Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: 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 |
Создание публикаций
Для создания публикации предоставьте следующую информацию:
- Распространитель.
- Расположение файлов моментальных снимков.
- База данных публикаций.
- Тип публикации, которую требуется создать (публикация снимков, транзакционная публикация, транзакционная публикация с обновляемыми подписками или публикация слияния).
- Данные и объекты базы данных (статьи) для включения в публикацию.
- Статические фильтры строк и фильтры столбцов для всех типов публикаций, параметризованные фильтры строк и фильтры соединения для публикаций слиянием.
- Расписание агента моментальных снимков.
- Учетные записи, под которыми работают следующие агенты: агент моментальных снимков для всех публикаций; Log Reader Agent для всех транзакционных публикаций; Queue Reader Agent для транзакционных публикаций, допускающих обновление подписок.
- Имя и описание публикации.
Для получения информации о том, как работать с публикациями, см. следующие статьи:
- Создание публикации
- Определение статьи
- Просмотр и изменение свойств публикации
- 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 Publisher, репликация по умолчанию распространяется на всех подписчиков SQL Server:
ALTER TABLE
ALTER VIEW
ALTER PROCEDURE
ALTER FUNCTION
ALTER TRIGGER
Дополнительные сведения см. в статье Внесение изменений в схемы баз данных публикации.
Аспекты публикации
Учитывайте следующие моменты при публикации объектов базы данных:
Пользователи могут получить доступ к базе данных во время создания публикации и первого снимка, но лучше создавать публикации в периоды низкой активности на Publisher.
Нельзя переименовать базу данных после создания публикации в ней. Чтобы переименовать базу данных, сначала необходимо удалить репликацию из базы.
Если вы публикуете объект базы данных, который зависит от одного или нескольких других объектов базы данных, вы должны публиковать все ссылающиеся объекты. Например, при публикации представления, зависящего от таблицы, необходимо также опубликовать и таблицу.
Примечание.
Если вы добавляете статью в объединённую публикацию, а существующая статья зависит от новой статьи, необходимо задать порядок обработки обеих статей, используя параметры @processing_ordersp_addmergearticle и sp_changemergearticle. Рассмотрим следующий сценарий: вы публикуете таблицу, но не публикуете функцию, на которую ссылка в таблице. Если вы не публикуете функцию, таблицу нельзя создать в Subscriber. При добавлении функции к публикации: задайте значение 1 для параметра @processing_order процедуры sp_addmergearticleи значение 2 для параметра @processing_order процедуры sp_changemergearticle, указав имя таблицы в параметре @article. Такой порядок обработки гарантирует, что функция у подписчика будет создана раньше, чем таблица, которая от неё зависит. Можно использовать различные числа для каждой статьи при условии, что число для функции меньше числа для таблицы.
Названия публикаций не могут включать следующие символы: % * [ ] | : " ? \ / <>.
Ограничения на публикации объектов
Максимальное количество статей и колонок, которые вы можете опубликовать, зависит от типа публикации. Дополнительные сведения см. в разделе "Объекты репликации" статьи Maximum Capacity Specifications for SQL Server (Спецификации максимально допустимых параметров SQL Server).
Вы не можете публиковать хранящиеся процедуры, представления, триггеры и пользовательские функции, которые определяются как С ШИФРОВАНИЕМ в рамках репликации SQL Server.
Вы можете воспроизводить коллекции схем XML, но изменения не повторяются после первоначального снимка.
Таблицы, опубликованные для репликации транзакций, должны содержать первичный ключ. Если таблица входит в публикацию транзакционной репликации, нельзя отключить какие-либо индексы, связанные со столбцами первичного ключа. Для репликации необходимы эти индексы. Чтобы отключить индексы, сначала необходимо удалить таблицу из публикации.
Привязанные значения по умолчанию, созданные с помощью sp_bindefault (Transact-SQL), не реплицируются (привязанные значения по умолчанию считаются устаревшими в пользу значений по умолчанию, созданных с помощью ключевого слова DEFAULT в ALTER TABLE или CREATE 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 , если статья является частью транзакционной подписки и включена в публикацию слияния. По умолчанию транзакционная репликация ожидает, что таблицы у подписчика будут только для чтения. Если репликация слияния изменяет данные в таблице в транзакционной подписке, может произойти несходимость данных. Чтобы избежать этой проблемы, укажите любую такую таблицу как только для скачивания в публикации слияния. Эта настройка не позволяет Merge Subscriber загружать изменения данных в таблицу. Дополнительные сведения см. в статье Оптимизация производительности репликации слиянием при работе со статьями, доступными только для загрузки.
Нельзя опубликовать статью одновременно в издании слияния и в транзакционном издании с очередными обновлениями подписок.
Вы не можете переиздавать статьи, включённые в транзакционные издания, поддерживающие обновление подписок.
Если вы публикуете статью в нескольких транзакционных публикациях, поддерживающих подписку с обновлением в очереди, статья должна иметь одинаковое значение для следующих свойств во всех публикациях:
Свойство Параметр в 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).
Транзакционная репликация и репликация слиянием без фильтрации поддерживают публикацию одной и той же таблицы в нескольких публикациях с последующей подпиской на неё в виде одной таблицы в базе данных подписчика (что обычно называется сценарием rollup). Rollup часто используется для объединения подмножеств данных из нескольких источников в одной таблице у центрального подписчика. Публикации слияния с фильтрацией не поддерживают сценарий с центральным подписчиком. Для репликации слияния ролл-ап обычно реализуется через одну публикацию с параметризованными строковыми фильтрами. Дополнительные сведения см. в разделе Параметризованные фильтры строк.