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