Публикация данных и объектов базы данных
При создании публикации можно выбрать таблицы и другие объекты базы данных, которые необходимо опубликовать. Используя репликацию, можно опубликовать следующие объекты базы данных.
Объект базы данных |
Репликация моментальных снимков и репликация транзакций |
Репликация слиянием |
---|---|---|
Таблицы |
Ы |
Ы |
Секционированные таблицы |
Ы |
Ы |
Хранимые процедуры — определение (Transact-SQL и среда CLR) |
Ы |
Ы |
Хранимые процедуры — выполнение (Transact-SQL и среда CLR) |
Ы |
нет |
Представления |
Ы |
Ы |
Индексированные представления |
Ы |
Ы |
Индексированные представления в виде таблиц |
Ы |
нет |
Определяемые пользователем типы (CLR) |
Ы |
Ы |
Определяемые пользователем функции (Transact-SQL и среда CLR) |
Ы |
Ы |
Псевдонимы типов данных |
Ы |
Ы |
Полнотекстовые индексы |
Ы |
Ы |
Объекты схемы (ограничения, индексы, пользовательские триггеры DML, расширенные свойства и параметры сортировки) |
Ы |
Ы |
Создание публикаций
Для создания публикации необходимо предоставить следующую информацию.
Распространитель.
Расположение файлов моментальных снимков.
База данных публикации.
Тип создаваемой публикации (публикация моментальных снимков, публикация транзакций, публикация транзакций с обновляемыми подписками или публикация слиянием).
Данные и объекты базы данных (статьи) для включения в публикацию.
Статические фильтры строк и фильтры столбцов для всех типов публикаций, параметризованные фильтры строк и фильтры соединения для публикаций слиянием.
Расписание агента моментальных снимков.
Учетные записи, под которыми следующие агенты должны быть запущены: агент моментальных снимков для всех публикаций; агент чтения журнала для всех публикаций транзакций; агент чтения очереди для публикаций транзакций, которые разрешают использование обновляемых подписок.
Имя и описание публикации.
Сведения о работе с публикациями см. в следующих разделах.
Примечание |
---|
Удаление статьи или публикации не приводит к удалению объектов с подписчика. |
Публикация таблиц
Наиболее часто публикуемым объектом является таблица. Следующие ссылки предоставляют дополнительные сведения по темам, связанным с публикацией таблиц.
При публикации таблицы для репликации можно указать, какие объекты схемы должны копироваться на подписчик, например: объявленная ссылочная целостность (ограничения на первичный ключ, ссылочные ограничения, ограничения уникальности), индексы, пользовательские триггеры DML (триггеры DDL не могут быть реплицированы), расширенные свойства и параметры сортировки. Репликация расширенных свойств производится только в процессе первоначальной синхронизации между издателем и подписчиком. При добавлении или изменении расширенного свойства после начальной синхронизации эти изменения не реплицируются.
Сведения об указании параметров схемы см. в разделе Указание параметров схемы или SchemaOption.
Секционированные таблицы и индексы
Репликация поддерживает публикацию секционированных таблиц и индексов. Уровень поддержки зависит от типа репликации, которая была использована, и параметров, заданных для публикации и статей, связанных с секционированными таблицами. Дополнительные сведения см. в разделе Репликация секционированных таблиц и индексов.
Публикация хранимых процедур
Все типы репликации позволяют реплицировать определения хранимых процедур: инструкция CREATE PROCEDURE копируется на каждый подписчик. В случае с хранимыми процедурами общеязыковой среды исполнения (CLR) также копируется связанная сборка. Изменения процедур реплицируются на подписчики; изменения связанных сборок не реплицируются.
Помимо репликации определения хранимой процедуры репликация транзакций позволяет реплицировать выполнение хранимых процедур. Это полезно при репликации результатов хранимых процедур, связанных с обслуживанием и работающих с большими объемами данных. Дополнительные сведения см. в разделе Публикация выполнения хранимых процедур в репликации транзакций.
Публикация представлений
Все типы репликации позволяют реплицировать представления. Представление (и сопутствующий индекс, если это индексированное представление) можно скопировать в подписчик, однако базовую таблицу также необходимо реплицировать.
Для индексированных представлений репликация транзакций также позволяет реплицировать индексированное представление в виде таблицы, а не как представление, исключая необходимость реплицировать и базовую таблицу. Для этого укажите один из вариантов, «основанных на журнале индексированного представления», для параметра @type хранимой процедуры sp_addarticle (Transact-SQL). Дополнительные сведения об использовании sp_addarticle см. в разделе Определение статьи.
Публикация пользовательских функций
Инструкции 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. Этот порядок обработки гарантирует создание функции на подписчике до создания таблицы, которая зависит от нее. Можно использовать различные числа для каждой статьи при условии, что число для функции меньше числа для таблицы.
Имена публикаций не могут содержать следующие символы: % * [ ] | : " ? \ / < >.
Ограничения на публикацию объектов
Максимальное количество публикуемых статей и столбцов зависит от типа публикации. Дополнительные сведения см. в подразделе «Объекты репликации» раздела Задание максимальной вместимости SQL Server.
Хранимые процедуры, представления, триггеры и определяемые пользователем функции, которые определяются как WITH ENCRYPTION, невозможно опубликовать как часть репликации 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, если статья является частью подписки на публикацию транзакций и включена в публикацию слиянием. В этом случае нужно иметь в виду, что по умолчанию репликация транзакций ожидает, что таблицы на подписчике будут иметь атрибут «только для чтения». Если репликация слиянием производит изменения данных в таблице подписки на публикацию транзакций, то может возникнуть потеря конвергенции данных. Чтобы избежать этой ситуации, рекомендуется, чтобы любые подобные таблицы задавались в публикации слиянием с атрибутом «только для загрузки». Это защищает подписчика на публикацию слиянием от передачи измененных данных в таблицу. Дополнительные сведения см. в разделе Оптимизация производительности репликации слиянием при работе со статьями, доступными только для загрузки.
Статья не может быть опубликована и в публикации слиянием и в публикации транзакций с подписками, обновляемыми посредством очередей.
Статьи, включенные в публикации транзакций, которые поддерживают обновляемые подписки, не могут переиздаваться.
Если статья опубликована в нескольких публикациях транзакций, которые поддерживают подписки, обновляемые посредством очередей, то во всех публикациях следующим свойствам этой статьи должны присваиваться одинаковые значения:
Свойство
Параметр в 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).
Репликация транзакций и нефильтрованная репликация слиянием поддерживают публикацию таблицы в нескольких публикациях с последующей подпиской в пределах одной таблицы в базе данных подписки (такой сценарий, как правило, называется сценарием сведения). Сведение часто используется для объединения подмножеств данных из нескольких мест в одной таблице на центральном подписчике. Фильтрованные публикации слиянием не поддерживают сценарий центрального подписчика. Для репликации слиянием сведение обычно реализуется в одной публикации с помощью параметризованных фильтров строк. Дополнительные сведения см. в разделе Параметризованные фильтры строк.
См. также
Основные понятия
Добавление и удаление статей в существующих публикациях