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

Применимо к: да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

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

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

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

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

Примечание

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

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

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

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

Сведения об указании параметров схемы см. в разделе Указание параметров схемы или SchemaOption.

Partitioned Tables and Indexes

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

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

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

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

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

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

Для индексированных представлений репликация транзакций также позволяет реплицировать индексированное представление в виде таблицы, а не как представление, исключая необходимость реплицировать и базовую таблицу. Для этого укажите один из вариантов на основе журнала индексированного представления для параметра @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), не реплицируются (вместо связанных значений по умолчанию мы рекомендуем использовать значения по умолчанию, созданные с помощью ключевого слова DEFAULT инструкции ALTER TABLE или CREATE TABLE).

  • Функции, содержащие указание NOEXPAND на индексированных представлениях, невозможно опубликовать в той же публикации, что и ссылочные таблицы и индексированные представления. Это обусловлено порядком их доставки агентом распространения. Чтобы обойти эту проблему, поместите создание таблицы и индексированного представления в первую публикацию, добавьте функции с указанием NOEXPAND в на индексированных представлениях во вторую публикацию, которую следует опубликовать после завершения первой публикации. Также вы можете создать сценарии для этих функций и передать сценарий с помощью параметра @post_snapshot_script в sp_addpublication.

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

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

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

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

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

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

Владельца объекта можно изменить с помощью диалогового окна Свойства статьи — <Article> и следующих хранимых процедур: 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
    Направление потока данных столбцов большого двоичного объекта @stream_blob_columns
    Тип фильтра @filter_type (параметр хранимой процедуры sp_addmergefilter)

    Дополнительные сведения об этих параметрах см. в статье об sp_addmergearticle (Transact-SQL) и sp_addmergefilter (Transact-SQL).

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

См. также:

Добавление и удаление статей в существующих публикациях
Настройка распространения
Инициализация подписки
Scripting Replication (Скрипты репликации)
Организация безопасности издателя
Подписка на публикации