Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server Управляемый экземпляр SQL Azure
При создании публикации можно выбрать таблицы и другие объекты базы данных, которые необходимо опубликовать. Используя репликацию, можно опубликовать следующие объекты базы данных.
| Объект базы данных | Репликация моментальных снимков и репликация транзакций | Репликация слиянием |
|---|---|---|
| Таблицы | X | X |
| Секционированные таблицы | X | X |
| Хранимые процедуры — определение (Transact-SQL и CLR) | X | X |
| Хранимые процедуры — выполнение (Transact-SQL и CLR) | X | нет |
| Представления | X | X |
| Индексированные представления | X | X |
| Индексированные представления в виде таблиц | X | нет |
| Определяемые пользователем типы (CLR) | X | X |
| Определяемые пользователем функции (Transact-SQL и CLR) | X | X |
| Псевдонимы типов данных | X | X |
| Полнотекстовые индексы | X | X |
| Объекты схемы (ограничения, индексы, пользовательские триггеры DML, расширенные свойства и параметры сортировки) | X | X |
Создание публикаций
Для создания публикации необходимо предоставить следующую информацию.
- Распространитель.
- Расположение файлов моментальных снимков.
- База данных публикаций.
- Тип публикации, которую требуется создать (публикация снимков, транзакционная публикация, транзакционная публикация с обновляемыми подписками или публикация слияния).
- Данные и объекты базы данных (статьи) для включения в публикацию.
- Статические фильтры строк и фильтры столбцов для всех типов публикаций, параметризованные фильтры строк и фильтры соединения для публикаций слиянием.
- Расписание агента моментальных снимков.
- Учетные записи, под которыми должны быть запущены следующие агенты: агент моментальных снимков для всех публикаций; агент чтения журнала для всех публикаций транзакций; агент чтения очереди для публикаций транзакций, разрешающих использование обновляемых подписок.
- Имя и описание публикации.
Сведения о работе с публикациями см. в следующих разделах.
- Создание публикации
- Определение статьи
- Просмотр и изменение свойств публикации
- View and Modify Article Properties (Просмотр и изменение свойств статьи)
- Delete a Publication (Удаление публикации)
- Delete an Article (Удаление статьи)
Примечание.
Удаление статьи или публикации не приводит к удалению объектов с подписчика.
Публикация таблиц
Наиболее часто публикуемым объектом является таблица. Следующие ссылки предоставляют дополнительные сведения по темам, связанным с публикацией таблиц.
- Фильтрация опубликованных данных
- Настройки статьи для транзакционной репликации
- Параметры статьи для репликации слиянием
- Репликация столбцов идентификаторов
При публикации таблицы для репликации можно указать, какие объекты схемы следует копировать Подписчику, например: объявленную ссылочную целостность (ограничения первичного ключа, ограничения внешнего ключа, ограничения уникальности), индексы, пользовательские триггеры DML (триггеры DDL не реплицируются), расширенные свойства и параметры сортировки. Расширенные свойства реплицируются только во время начальной синхронизации между издателем и подписчиком. При добавлении или изменении расширенного свойства после начальной синхронизации эти изменения не реплицируются.
Сведения об указании параметров схемы см. в разделе Указание параметров схемы или SchemaOption.
Секционированные таблицы и индексы
Репликация поддерживает публикацию секционированных таблиц и индексов. Уровень поддержки зависит от типа репликации, которая была использована, и параметров, заданных для публикации и статей, связанных с секционированными таблицами. Дополнительные сведения см. в статье Replicate Partitioned Tables and Indexes (Репликация секционированных таблиц и индексов).
Публикация хранимых процедур
Во всех типах репликации можно реплицировать определения хранимых процедур: CREATE PROCEDURE копируется каждому подписчику. В случае хранимых процедур общеязыковой среды выполнения (CLR) также копируется связанная с ними сборка. Изменения в процедурах реплицируются подписчикам; изменения в связанных сборках не реплицируются.
Помимо репликации определения хранимой процедуры репликация транзакций позволяет реплицировать выполнение хранимых процедур. Это полезно при репликации результатов хранимых процедур, связанных с обслуживанием и работающих с большими объемами данных. Дополнительные сведения см. в статье Публикация выполнения хранимой процедуры в репликации транзакций.
Публикация представлений
Все типы репликации позволяют реплицировать представления. Представление (и связанный с ним индекс, если это индексированное представление) можно скопировать на подписчик, однако базовую таблицу также необходимо реплицировать.
Для индексированных представлений репликация транзакций также позволяет реплицировать индексированное представление в виде таблицы, а не как представление, исключая необходимость реплицировать и базовую таблицу. Для этого укажите один из параметров logbased для индексированного представления для параметра @type процедуры sp_addarticle (Transact-SQL). Дополнительные сведения об использовании sp_addarticle см. в статье Define an Article (Определение статьи).
Публикация пользовательских функций
Инструкции CREATE FUNCTION для функций CLR и функций Transact-SQL копируются каждому подписчику. В случае функций CLR также копируется связанная сборка. Изменения функций реплицируются подписчикам; изменения связанных сборок не реплицируются.
Публикация определяемых пользовательских типов и псевдонимов типов данных
Столбцы, использующие пользовательские типы или псевдонимы типов данных, реплицируются на подписчики, как и другие столбцы. Инструкция CREATE TYPE для каждого реплицируемого типа выполняется у подписчика перед созданием таблицы. В случае пользовательских типов каждому подписчику также копируется связанная сборка. Изменения пользовательских типов и псевдонимных типов данных не реплицируются подписчикам.
Если тип определен в базе данных, но ни в одном столбце нет ссылок на него, то при создании публикации этот тип не копируется подписчикам. Если впоследствии в базе данных создается столбец этого типа и его необходимо реплицировать, то вначале этот тип (вместе со связанной сборкой для определяемого пользователем типа) необходимо скопировать вручную на каждый подписчик.
Публикация полнотекстовых индексов
Оператор CREATE FULLTEXT INDEX копируется каждому подписчику, а полнотекстовый индекс создается у подписчика. Изменения, внесённые в полнотекстовые индексы с использованием ALTER FULLTEXT INDEX, не реплицируются.
Внесение изменений схемы в опубликованные объекты
Репликация поддерживает широкий диапазон изменений схем для опубликованных объектов. При внесении любого из следующих изменений схемы на соответствующий опубликованный объект на издателе SQL Server это изменение распространяется по умолчанию ко всем подписчикам SQL Server:
ALTER TABLE
ALTER VIEW
ALTER PROCEDURE
ALTER FUNCTION
ALTER TRIGGER
Дополнительные сведения см. в статье Внесение изменений в схемы баз данных публикации.
Некоторые аспекты процесса публикации
При публикации объектов базы данных необходимо принимать во внимание следующие соображения.
Во время создания публикации и первоначального моментального снимка база данных остается доступной пользователям, однако рекомендуется создавать публикации в периоды низкой активности на издателе.
Базу данных невозможно переименовать после создания в ней публикации. Чтобы базу данных переименовать, необходимо сначала удалить из нее репликацию.
При публикации объекта базы данных, зависящего от одного или нескольких других объектов базы данных, необходимо опубликовать и все связанные с ним объекты. Например, при публикации представления, зависящего от таблицы, необходимо также опубликовать и таблицу.
Примечание.
Если при добавлении статьи в публикацию слияния существующая статья зависит от новой статьи, необходимо указать порядок обработки для обеих статей с помощью параметра @processing_order процедур sp_addmergearticle и sp_changemergearticle. Рассмотрим следующий сценарий: необходимо опубликовать таблицу без публикации функции, на которую ссылается эта таблица. Если функция не будет опубликована, таблицу не удастся создать у подписчика. При добавлении функции к публикации: задайте значение 1 для параметра @processing_order процедуры sp_addmergearticleи значение 2 для параметра @processing_order процедуры sp_changemergearticle, указав имя таблицы в параметре @article. Такой порядок обработки гарантирует, что функция у подписчика будет создана раньше, чем таблица, которая от неё зависит. Можно использовать различные числа для каждой статьи при условии, что число для функции меньше числа для таблицы.
Имена публикаций не могут содержать следующие символы: % * [ ] | : " ? \ / <>.
Ограничения на публикацию объектов
Максимальное количество публикуемых статей и столбцов зависит от типа публикации. Дополнительные сведения см. в разделе "Объекты репликации" статьи Maximum Capacity Specifications for SQL Server (Спецификации максимально допустимых параметров SQL Server).
Хранимые процедуры, представления, триггеры и определяемые пользователем функции, определенные как WITH ENCRYPTION, не могут быть опубликованы в рамках репликации SQL Server.
Коллекции схем XML могут быть реплицированы, но изменения, внесенные после создания исходного моментального снимка, не реплицируются.
Таблицы, опубликованные для репликации транзакций, должны содержать первичный ключ. Если таблица входит в публикацию репликации транзакций, то нельзя отключить никакие индексы, связанные с первичными ключевыми столбцами. Эти индексы необходимы для репликации. Чтобы отключить индексы, сначала необходимо удалить таблицу из публикации.
Привязанные значения по умолчанию, созданные с использованием sp_bindefault (Transact-SQL), не реплицируются (привязанные значения по умолчанию считаются устаревшими; вместо них следует использовать значения по умолчанию, созданные с помощью ключевого слова DEFAULTALTER TABLECREATE TABLE).
Функции, содержащие указание NOEXPAND на индексированных представлениях, невозможно опубликовать в той же публикации, что и ссылочные таблицы и индексированные представления. Это обусловлено порядком их доставки агентом распространения. Чтобы обойти эту проблему, поместите создание таблицы и индексированного представления в первую публикацию, а во вторую публикацию добавьте функции, содержащие указание NOEXPAND для индексированных представлений; вторую публикацию следует опубликовать после завершения публикации первой. Также вы можете создать сценарии для этих функций и передать скрипт с помощью параметра @post_snapshot_script в sp_addpublication.
Схемы и принадлежность объектов
Репликации свойственно следующее поведение по умолчанию в мастере создания публикаций, касающееся схем и принадлежности объектов:
Для статей в публикациях слияния с уровнем совместимости 90 или выше, публикациях моментальных снимков и транзакционных публикациях по умолчанию владелец объекта у подписчика совпадает с владельцем соответствующего объекта у издателя. Если на подписчике отсутствуют схемы, которым принадлежат объекты, они создаются автоматически.
Для статей в публикациях слияния с уровнем совместимости ниже 90: по умолчанию поле владельца оставляется пустым, а при создании объекта на подписчике владелец указывается как dbo.
Для статей в публикациях Oracle: по умолчанию владельцем назначается dbo.
Для статей в публикациях, использующих снимки в символьном режиме (которые используются для подписчиков, не использующих SQL Server, и подписчиков SQL Server Compact): по умолчанию поле владельца остается пустым. Владельцем по умолчанию является владелец, указанный в учетной записи, используемой агентом распространителя или агентом слияния для соединения с подписчиком.
Владельца объекта можно изменить с помощью диалогового окна Свойства статьи — <статья> и следующих хранимых процедур: sp_addarticle, sp_addmergearticle, sp_changearticle и sp_changemergearticle. Дополнительные сведения см. в статье Просмотр и изменение свойств публикации, Определение статьи и Просмотр и изменение свойств статьи.
Публикация данных для подписчиков, работающих под управлением предыдущих версий SQL Server
Если вы публикуете данные для подписчика, использующего более раннюю версию SQL Server, вы ограничены функциональными возможностями этой версии как с точки зрения функций репликации, так и с точки зрения возможностей продукта в целом.
Публикации слияния используют уровень совместимости, который определяет, какие функции можно использовать в публикации, и позволяет поддерживать подписчиков, использующих предыдущие версии SQL Server.
Публикация таблиц в нескольких публикациях
Репликация поддерживает публикацию статей в нескольких публикациях (включая переиздание данных) со следующими ограничениями.
Если статья опубликована в транзакционной публикации и публикации слияния, убедитесь, что для статьи в публикации слияния свойство @published_in_tran_pub имеет значение TRUE. Дополнительные сведения об изменении свойств см. в статье Просмотр и изменение свойств публикации и Просмотр и изменение свойств статьи.
Также следует установить свойство @published_in_tran_pub, если статья является частью подписки на транзакционную публикацию и включена в публикацию слияния. Если это так, имейте в виду, что по умолчанию транзакционная репликация предполагает, что таблицы у подписчика используются только для чтения; если репликация слиянием вносит изменения в данные таблицы в транзакционной подписке, возможна неконвергенция данных. Чтобы избежать такой возможности, мы рекомендуем указывать все такие таблицы в публикации слияния как доступные только для загрузки. Это не позволяет подписчику слияния отправлять изменения данных в таблицу. Дополнительные сведения см. в статье Оптимизация производительности репликации слиянием при работе со статьями, доступными только для загрузки.
Статья не может быть опубликована ни в публикации слияния, ни в транзакционной публикации с подписками на обновление с постановкой в очередь.
Статьи, включенные в транзакционные публикации с поддержкой обновляемых подписок, не могут публиковаться повторно.
Если статья опубликована более чем в одной публикации транзакций, поддерживающей подписки с обновлением через очередь, следующие свойства этой статьи должны иметь одинаковые значения во всех публикациях:
Свойство Параметр в sp_addarticle Управление диапазонами идентификаторов @auto_identity_range (является устаревшим) и @identityrangemangementoption Диапазон идентификаторов издателя @pub_identity_range Диапазон значений идентификаторов @identity_range Порог диапазона идентификаторов @threshold Дополнительные сведения об этих параметрах см. в sp_addarticle (Transact-SQL).
Если статья опубликована более чем в одной объединённой публикации, следующие свойства статьи должны иметь одинаковые значения во всех публикациях:
Свойство Параметр для sp_addmergearticle Отслеживание столбцов @column_tracking Параметры схемы @schema_option Фильтрация столбцов @vertical_partition Параметры выгрузки данных подписчика @subscriber_upload_options Условное отслеживание удалений @delete_tracking Компенсация ошибок @compensate_for_errors Управление диапазонами идентификаторов @auto_identity_range (является устаревшим) и @identityrangemangementoption Диапазон идентификаторов издателя @pub_identity_range Диапазон значений идентификатора @identity_range Порог диапазона значений идентификаторов @threshold Параметры раздела @partition_options Потоковая передача столбца BLOB @stream_blob_columns Тип фильтра @filter_type (параметр хранимой процедуры sp_addmergefilter) Дополнительные сведения об этих параметрах см. в sp_addmergearticle (Transact-SQL) и sp_addmergefilter (Transact-SQL).
Репликация транзакций и нефильтрованная репликация слиянием поддерживают публикацию таблицы в нескольких публикациях с последующей подпиской на них в одну таблицу в базе данных подписчика (такой сценарий обычно называется сценарием свертки). Сведение часто используется для агрегирования подмножеств данных из нескольких источников в одной таблице у центрального подписчика. Фильтрованные публикации слияния не поддерживают сценарий центрального подписчика. Для репликации слиянием агрегирование обычно реализуется с помощью одной публикации с параметризованными фильтрами по строкам. Дополнительные сведения см. в разделе Параметризованные фильтры строк.