Изменения таблиц при выполнении репликации БД (MS SQL 2008)

Изменения таблиц при выполнении репликации БД (MS SQL 2008)

Я использую SQL Server 2008 Std с базой данных, которая публикуется в «транзакционной публикации» для одного подписчика.

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

Что я упускаю? Должен же быть способ обновить таблицы издателей?

Спасибо!

решение1

Изменение таблицы, которое вы пытаетесь сделать, скорее всего, было сделано в графическом дизайнере таблиц в SSMS. Реализация изменений таблиц через графический дизайнер плохая.

При сохранении изменений SSMS запускается и копирует всю таблицу в новую таблицу с новым дизайном, затем удаляет «старую» таблицу и переименовывает новую, чтобы заменить ее.

Имейте в виду, что порядок столбцов не имеет большого значения для таблиц, хранящихся в SQL Server, нет необходимости добавлять новые столбцы в «середине» таблицы, за исключением того, что это может выглядеть лучше :=)

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

Чтобы внести необходимые изменения (добавить или удалить столбец), вам необходимо выполнить команды в T-SQL

ALTER TABLE dbo.Table ADD NewCol int NULL;
ALTER TABLE dbo.Table DROP COLUMN NewCol;

Обратите внимание, что синтаксис команды непоследователен (спасибо, MS!). Добавление столбца не требует/не допускает указания ключевого слова COLUMN, тогда как удаление требует этого.

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

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

Надеюсь, это поможет.

Связанный контент