Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Репликация поддерживает широкий диапазон изменений схем для опубликованных объектов. При внесении любого из следующих изменений схемы на соответствующий опубликованный объект на издателе Microsoft SQL Server это изменение распространяется по умолчанию ко всем подписчикам SQL Server:
ИЗМЕНИТЬ ТАБЛИЦУ
ALTER TABLE SET LOCK ESCALATION не следует использовать, если включена репликация изменений схемы, а топология включает SQL Server 2005 или SQL Server Compact 3.5 как подписчиков. ALTER VIEW
ALTER PROCEDURE
ALTER FUNCTION
ALTER TRIGGER
ALTER TRIGGER можно использовать только для триггеров языка обработки данных [DML], так как триггеры языка определения данных [DDL] не могут быть реплицированы.
Это важно
Изменения схемы в таблицах необходимо вносить с помощью Transact-SQL или объектов управления SQL Server (SMO). При внесении изменений схемы в SQL Server Management Studio она пытается удалить и повторно создать таблицу. Вы не можете удалить опубликованные объекты базы данных, поэтому изменение схемы проваливается.
Для транзакционной и слияния репликации изменения схемы распространяются постепенно при запуске агента распространения или агента слияния. При репликации моментальных снимков изменения схемы распространяются на подписчике при применении нового моментального снимка. При репликации моментальных снимков новая копия схемы отправляется подписчику при каждой синхронизации. Поэтому все изменения схемы (а не только перечисленные выше) на ранее опубликованные объекты автоматически распространяется с каждой синхронизацией.
Сведения о добавлении и удалении статей из публикаций см. в разделе "Добавление статей в существующие публикации" и "Удаление статей".
Репликация изменений схемы
Перечисленные выше изменения схемы реплицируются по умолчанию. Сведения об отключении репликации изменений схемы см. в разделе "Репликация изменений схемы".
Рекомендации по изменению схемы
При репликации изменений схемы следует учитывать следующие рекомендации.
Общие рекомендации
Изменения схемы подвергаются любым ограничениям, введенным Transact-SQL. Например, ALTER TABLE не позволяет изменять столбцы первичного ключа.
Сопоставление типов данных производится только для начального снимка. Изменения схемы не сопоставляются с предыдущими версиями типов данных. Например, если инструкция
ALTER TABLE ADD datetime2 columnиспользуется в SQL Server 2012, тип данных не преобразуетсяnvarcharв подписчики SQL Server 2005. В некоторых случаях изменения схемы блокируются издателем.Если для публикации задано разрешение распространения изменений схемы, изменения схемы распространяются независимо от того, как настроен параметр связанной схемы для статьи в публикации. Например, если вы не реплицируете ограничения внешнего ключа для табличной статьи, а затем выполняете команду ALTER TABLE, которая добавляет внешний ключ в таблицу в издателе, внешний ключ добавляется в таблицу в подписчике. Чтобы предотвратить это, отключите распространение изменений схемы перед выдачой команды ALTER TABLE.
Изменения схемы должны вноситься только на публикаторе, а не на подписчиках (включая повторную публикацию подписчиков). Репликация слияния не позволяет изменять схему на подписчике. Репликация транзакций не предотвращает изменения, но изменения могут привести к сбою репликации.
Изменения, распространяемые на перепубликуемого подписчика, по умолчанию распространяются на его подписчиков.
Если изменение схемы ссылается на объекты или ограничения, существующие на издателе, но не на подписчике, изменение схемы будет выполнено на издателе, но завершится сбоем на подписчике.
Все объекты на подписчике, на которые ссылается при добавлении внешнего ключа, должны иметь то же имя и владельца, что и соответствующий объект издателя.
Явное добавление, удаление или изменение индексов не поддерживается. Поддерживаются индексы, созданные неявно для ограничений (например, ограничения первичного ключа).
Изменение или удаление столбцов идентификаторов, которые управляются репликацией, не поддерживается. Дополнительные сведения об автоматическом управлении столбцами идентификаторов см. в разделе Репликация столбцов идентификаторов.
Изменения схемы, включающие недетерминированные функции, не поддерживаются, поскольку они могут привести к тому, что данные издателя и подписчика отличаются (например, не конвергенция). Например, если вы выдаете следующую команду на Publisher:
ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), значения отличаются, когда команда реплицируется к подписчику и выполняется. Дополнительные сведения о недетерминированных функциях см. в разделе детерминированные и недетерминированные функции.Рекомендуется явно назвать ограничения. Если ограничение не имеет явного имени, SQL Server создает имя ограничения, и эти имена будут отличаться на издателе и каждом подписчике. Это может привести к проблемам во время репликации изменений схемы. Например, при удалении столбца на издателе и зависимом ограничении репликация попытается удалить ограничение на подписчике. Удаление на подписчике завершится ошибкой, так как имя ограничения отличается. Если синхронизация завершается сбоем из-за проблемы с именованием ограничений, вручную удалите ограничение на подписчике и затем повторно запустите агент слияния.
Если таблица опубликована для репликации, невозможно изменить столбец в этой таблице на тип данных XML, если снимок состояния публикации уже создан; чтобы изменить столбец, необходимо сначала удалить репликацию.
Уровень изоляции «чтение без фиксации» не поддерживается при выполнении DDL операций на опубликованной таблице.
SET CONTEXT_INFOне следует использовать для изменения контекста транзакций, в которых изменения схемы выполняются для опубликованных объектов.
Добавление столбцов
Чтобы добавить новый столбец в таблицу и включить этот столбец в существующую публикацию, выполните инструкцию ALTER TABLE <Table> ADD <Column>. По умолчанию столбец реплицируется для всех подписчиков. Столбец должен разрешать значения NULL или включать ограничение по умолчанию. Дополнительные сведения о добавлении столбцов см. в разделе "Репликация слиянием" в этом разделе.
Чтобы добавить новый столбец в таблицу и не включить этот столбец в существующую публикацию, отключите репликацию изменений схемы, а затем выполните инструкцию ALTER TABLE <> ADD <Column>.
Чтобы включить существующий столбец в существующую публикацию, используйте sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL), или диалоговое окно "Свойства публикации — публикация>". <
Дополнительные сведения см. в разделе "Определение и изменение фильтра столбцов". Для этого потребуется повторно инициализировать подписки.
Добавление столбца идентификации в опубликованную таблицу не поддерживается, так как это может привести к неконвергенции при репликации столбца на Подписчик. Значения в столбце идентификаторов на издателе зависят от порядка, в котором строки для затронутой таблицы физически хранятся. Строки могут храниться по-разному у подписчика, поэтому значение столбца идентификаторов может отличаться для одинаковых строк.
Удаление столбцов
Чтобы удалить столбец из существующей публикации и удалить столбец из таблицы на сервере издательства, выполните команду ALTER TABLE <Table> DROP <Column>. По умолчанию столбец удаляется из таблицы у всех подписчиков.
Чтобы удалить столбец из существующей публикации, но сохранить столбец в таблице на издателе, используйте sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL) или диалоговое окно «Свойства публикации – <Публикация>».
Дополнительные сведения см. в разделе "Определение и изменение фильтра столбцов". Для этого потребуется создать новый моментальный снимок.
Столбец, который должен быть удалён, не может использоваться в предложениях фильтра ни одной статьи ни одной публикации в базе данных.
При удалении столбца из опубликованной статьи следует учитывать все ограничения, индексы или свойства столбца, которые могут повлиять на базу данных. Рассмотрим пример.
Нельзя удалять столбцы, входящие в состав первичного ключа статей в транзакционных публикациях, поскольку они используются для репликации.
Невозможно удалить столбец rowguid из статей в публикациях слияния или столбец mstran_repl_version из статей в транзакционных публикациях, поддерживающих обновление подписок, поскольку они используются для репликации.
Изменения индекса не распространяются на подписчиков: если вы удалите столбец на сервере публикации и из-за этого удалится зависимый индекс, то удаление индекса не реплицируется. Перед удалением столбца на издателе необходимо удалить индекс на подписчике, чтобы успешным было удаление столбца, когда он реплицируется с издателя к подписчику. Если синхронизация завершается ошибкой из-за индекса на подписчике, удалите индекс вручную и повторно запустите агент слияния.
Ограничения должны быть явно названы для возможности удаления. Дополнительные сведения см. в разделе "Общие рекомендации" ранее в этом разделе.
Репликация транзакций
Изменения схемы распространяются на подписчиков, работающих с предыдущими версиями SQL Server, но оператор DDL должен включать только синтаксис, поддерживаемый версией SQL Server, установленной у подписчика.
Если подписчик повторно публикует данные, единственные поддерживаемые изменения схемы - это добавление и удаление столбца. Эти изменения следует вносить на издателе с помощью sp_repladdcolumn (Transact-SQL) и sp_repldropcolumn (Transact-SQL) вместо синтаксиса ALTER TABLE DDL.
Изменения схемы не реплицируются в подписчиков, не использующих SQL Server.
Изменения в схеме не передаются от издателей, не использующих SQL Server.
Нельзя изменить индексированные представления, которые реплицируются в виде таблиц. Индексированные представления, которые реплицируются в виде индексированных представлений, могут быть изменены, но изменение их приведет к тому, что они становятся регулярными представлениями, а не индексированными представлениями.
Если публикация поддерживает немедленное обновление или обновление подписок в очереди, система должна быть приведена в тихий режим перед внесением изменений схемы: все действия в опубликованной таблице должны быть остановлены на издателе и подписчиках, а необработанные изменения данных должны быть перенесены на все узлы. После распространения изменений схемы на все узлы действие может возобновиться в опубликованных таблицах.
Если публикация находится в одноранговой топологии, система должна быть приостановлена перед внесением изменений в схему. Дополнительные сведения см. в документе "Приостановка топологии репликации (Программирование репликации Transact-SQL)".
Добавление столбца метки времени в таблицу и сопоставление метки времени с binary(8) приводит к повторной инициализации статьи для всех активных подписок.
Репликация слиянием
Как репликация слиянием обрабатывает изменения схемы, определяется уровнем совместимости публикации и устанавливается ли моментальный снимок в собственном режиме (по умолчанию) или в режиме символов:
Чтобы изменения схемы были реплицированы, уровень совместимости публикации должен быть не ниже 90RTM. Если подписчики работают с предыдущими версиями SQL Server или уровень совместимости меньше 90RTM, можно использовать sp_repladdcolumn (Transact-SQL) и sp_repldropcolumn (Transact-SQL) для добавления и удаления столбцов. Однако эти процедуры устарели.
При попытке добавить в существующую статью столбец с типом данных, представленным в SQL Server 2008, SQL Server имеет следующее поведение:
100RTM, собственный моментальный снимок 100RTM, моментальный снимок символа Все остальные уровни совместимости hierarchyidРазрешить изменение Блокировка изменения Блокировка изменения geographyиgeometry.Разрешить изменение Разрешить изменение1 Блокировка изменения filestreamРазрешить изменение Блокировка изменения Блокировать изменение date,time,datetime2иdatetimeoffsetРазрешить изменение Разрешить изменение1 Блокировка изменения 1 SQL Server Compact подписчики преобразуют эти типы данных на узле-подписчике.
Если при применении изменения схемы возникает ошибка (например, ошибка, полученная при добавлении внешнего ключа, ссылающегося на таблицу, недоступная на подписчике), синхронизация завершается сбоем, а подписка должна быть повторно инициализирована.
Если вносятся изменения в схему в столбце, задействованном в фильтре соединения или параметризованном фильтре, необходимо снова инициализировать все подписки и заново создать моментальный снимок.
Репликация слиянием предоставляет хранимые процедуры для пропуска изменений схемы во время устранения неполадок. Дополнительные сведения см. в статьях sp_markpendingschemachange (Transact-SQL) и sp_enumeratependingschemachanges (Transact-SQL).
См. также
ИЗМЕНИТЬ ТАБЛИЦУ (Transact-SQL)
ИЗМЕНИТЬ ПРЕДСТАВЛЕНИЕ (Transact-SQL)
ИЗМЕНИТЬ ПРОЦЕДУРУ (Transact-SQL)
ALTER FUNCTION (Transact-SQL)
ALTER TRIGGER (Transact-SQL)
Публикация объектов данных и баз данных
Повторное создание пользовательских процедур транзакций для отражения изменений схемы