Как избежать отбрасывания таблицы при повторной инициализации подписки (репликация) - PullRequest
0 голосов
/ 07 декабря 2011

В реплицируемой базе данных я добавляю дополнительный столбец в каждую таблицу.Каждый раз, когда я повторно инициализирую подписку, все таблицы удаляются, и я теряю добавленный столбец, поэтому мне нужно добавить его снова.Можно ли избежать отбрасывания таблицы, чтобы процесс репликации использовал существующие данные в БД?

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Вы не говорите, какой тип репликации вы используете - это снимок, транзакция, слияние или одноранговая связь?

Независимо от типа, краткий ответ на ваш вопрос - нет;в снимке репликации схема таблицы на подписчике должна соответствовать издателю (или, если быть точным, отфильтрованному списку столбцов из статьи об издателе, включенной в снимок)

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

Есть несколько способов обойти это:

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

Альтернатива (иболее сложный метод), чтобы изменить публикацию для выполнения сценария до моментального снимка, который переименовал таблицу на подписчике, и сценария после моментального снимка, который создал новый столбец, скопировал данные из дополнительного столбца в переименованной таблице в новыйсоздал таблицу, затем отбросил переименованную таблицу.Подробности см. В документации по sp_addpublication (параметры @pre_snapshot_script и @post_snapshot_script)

0 голосов
/ 08 декабря 2011

Учитывая, что вы хотите добавить столбец, вам нужно сделать это в базе данных публикации и распространить его на подписчиков, для которых свойство публикации @ replicate_ddl установлено в значение true. Реинициализация не требуется.

Вы захотите сделать это, используя ALTER TABLE ADD синтаксис на издателе.

Взгляните на Внесение изменений в схемы в базах данных публикаций .

...