Публикация данных и объектов базы данных

При создании публикации можно выбрать таблицы и другие объекты базы данных, которые необходимо опубликовать. Используя репликацию, можно опубликовать следующие объекты базы данных.

Объект базы данных

Репликация моментальных снимков и репликация транзакций

Репликация слиянием

Таблицы

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

Создание публикаций

Для создания публикации необходимо предоставить следующую информацию.

  • Распространитель.

  • Расположение файлов моментальных снимков.

  • База данных публикации.

  • Тип создаваемой публикации (публикация моментальных снимков, публикация транзакций, публикация транзакций с обновляемыми подписками или публикация слиянием).

  • Данные и объекты базы данных (статьи) для включения в публикацию.

  • Статические фильтры строк и фильтры столбцов для всех типов публикаций, параметризованные фильтры строк и фильтры соединения для публикаций слиянием.

  • Расписание агента моментальных снимков.

  • Учетные записи, под которыми следующие агенты должны быть запущены: агент моментальных снимков для всех публикаций; агент чтения журнала для всех публикаций транзакций; агент чтения очереди для публикаций транзакций, которые разрешают использование обновляемых подписок.

  • Имя и описание публикации.

Создание публикаций и определение статей.

Изменение публикаций и статей

Удаление публикаций и статей

ПримечаниеПримечание

Удаление статьи или публикации не приводит к удалению объектов с подписчика.

Публикация таблиц

Наиболее часто публикуемым объектом является таблица. Следующие ссылки предоставляют дополнительные сведения по темам, связанным с публикацией таблиц.

При публикации таблицы для репликации можно указать, какие объекты схемы должны копироваться на подписчик, например: объявленная ссылочная целостность (ограничения на первичный ключ, ссылочные ограничения, ограничения уникальности), индексы, пользовательские триггеры DML (триггеры DDL не могут быть реплицированы), расширенные свойства и параметры сортировки. Расширенные свойства реплицируются только во время начальной синхронизации между издателем и подписчиком. При добавлении или изменении расширенного свойства после начальной синхронизации эти изменения не реплицируются.

Указание параметров схемы

Секционированные таблицы и индексы

Репликация поддерживает публикацию секционированных таблиц и индексов. Уровень поддержки зависит от типа репликации, которая была использована, и параметров, заданных для публикации и статей, связанных с секционированными таблицами. Дополнительные сведения см. в разделе Репликация секционированных таблиц и индексов.

Публикация хранимых процедур

Все типы репликации позволяют реплицировать определения хранимых процедур: инструкция CREATE PROCEDURE копируется на каждый подписчик. В случае с хранимыми процедурами общеязыковой среды исполнения (CLR) также копируется связанная сборка. Изменения процедур реплицируются на подписчики; изменения связанных сборок не реплицируются.

Помимо репликации определения хранимой процедуры репликация транзакций позволяет реплицировать выполнение хранимых процедур. Это полезно при репликации результатов хранимых процедур, связанных с обслуживанием и работающих с большими объемами данных. Дополнительные сведения см. в разделе Публикация выполнения хранимых процедур в репликации транзакций.

Публикация представлений

Все типы репликации позволяют реплицировать представления. Представление (и сопутствующий индекс, если это индексированное представление) можно скопировать в подписчик, однако базовую таблицу также необходимо реплицировать.

Для индексированных представлений репликация транзакций также позволяет реплицировать индексированное представление в виде таблицы, а не как представление, исключая необходимость реплицировать и базовую таблицу. Для этого укажите один из вариантов, «основанных на журнале индексированного представления», для параметра @type хранимой процедуры sp_addarticle (Transact-SQL). Дополнительные сведения об использовании sp_addarticle см. в разделе Как определить статью (программирование репликации на языке Transact-SQL).

Публикация пользовательских функций

Инструкции 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).

Схемы и принадлежность объектов

Репликации свойственно следующее поведение по умолчанию в мастере создания публикаций, касающееся схем и принадлежности объектов:

  • Для статей в публикациях слиянием с уровнем совместимости 90 или выше, публикаций моментальных снимков и публикаций транзакций: по умолчанию владелец объекта на подписчике идентичен владельцу соответствующего объекта на издателе. Если на подписчике не существует схем, владеющих объектами, они создаются автоматически.

  • Для статей в публикациях слиянием с уровнем совместимости менее 90: по умолчанию владелец не указывается и устанавливается как dbo во время создания объекта на этом подписчике.

  • Для статей в публикациях Oracle: по умолчанию владелец устанавливается как dbo.

  • Для статей в публикациях, где используются моментальные снимки в символьном режиме (которые используются для подписчиков, отличных от подписчиков SQL Server, и подписчиков SQL Server Compact 3.5 с пакетом обновления 2 (SP2)): по умолчанию владелец не указывается. Владельцем по умолчанию является владелец, связанный с учетной записью, используемой агентом распространителя или агентом слияния для подключения к подписчику.

Владелец объекта может быть изменен с помощью диалогового окна Свойства статьи — <статья> и следующих хранимых процедур: sp_addarticle, sp_addmergearticle, sp_changearticle и sp_changemergearticle. Дополнительные сведения см. в разделах Как просмотреть и изменить свойства публикации и статьи (среда SQL Server Management Studio), Как определить статью (программирование репликации на языке Transact-SQL) и Как просмотреть и изменить свойства статьи (программирование репликации на языке Transact-SQL).

Публикация данных на подписчики, использующие предыдущие версии SQL Server

  • При публикации данных на подписчик, использующий предыдущую версию SQL Server, предлагаются только те функции, которые имеются в этой версии. Ограничения накладываются как на функции репликации, так и на функции продукта в целом. Например невозможна публикация пользовательских типов данных и функций CLR на подписчики, использующие SQL Server 2000.

  • Публикации слиянием используют уровень совместимости, который определяет, какие функции могут использоваться в публикации, а также обеспечивает поддержку подписчиков, на которых выполняются предыдущие версии SQL Server.

Дополнительные сведения см. в разделе Использование нескольких версий SQL Server в топологии репликации.

Публикация таблиц в нескольких публикациях

Репликация поддерживает публикацию статей в нескольких публикациях (включая переиздание данных) со следующими ограничениями.

  • Если статья опубликована в публикации транзакций и публикации слиянием, убедитесь, что свойство @published_in_tran_pub имеет значение true для статьи публикации слиянием. Дополнительные сведения о настройке свойств см. в разделе Как просмотреть и изменить свойства публикации и статьи (среда SQL Server Management Studio) и Как просмотреть и изменить свойства статьи (программирование репликации на языке Transact-SQL).

    Также нужно установить свойство @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).

  • Репликация транзакций и нефильтрованная репликация слиянием поддерживают публикацию таблицы в нескольких публикациях с последующей подпиской в пределах одной таблицы в базе данных подписки (такой сценарий, как правило, называется сценарием сведения). Сведение часто используется для объединения подмножеств данных из нескольких мест в одной таблице на центральном подписчике. Фильтрованные публикации слиянием не поддерживают сценарий центрального подписчика. Для репликации слиянием сведение обычно реализуется в одной публикации с помощью параметризованных фильтров строк. Дополнительные сведения см. в разделе Параметризованные фильтры строк.