Изменения таблиц при выполнении репликации БД (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 необходим для работы репликации транзакций и не может быть изменен. Вам нужно будет удалить статью из репликации, если вы хотите изменить эти столбцы.

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

Другие вопросы по тегам