Репликация транзакций SQL Server с объектами, на которые часто ссылаются, терпит неудачу при повторной инициализации

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

В базе данных также есть представления, хранимые процедуры, функции и т. Д., Которые вручную развертываются в репликах с помощью сценариев TSQL.

Теперь, если, например, к публикации добавляется новая таблица, мы должны повторно инициализировать все подписки, создав новый моментальный снимок и позволить ему доставляться через распространителя (который находится на том же сервере, что и публикация). Головная боль начинается, когда агент распространителя хочет отбросить таблицу, чтобы впоследствии воссоздать ее, на некоторые таблицы ссылаются представления, на которые также ссылаются другие объекты. Дистрибьютор не может (или не будет) отбрасывать объекты и выдает ошибку типа Cannot DROP TABLE 'dbo.table' because it is being referenced by object 'thisisafunctionorview'.

Раньше у нас также были представления, функции и хранимые процедуры в публикации, но это вызывало еще большую боль (повторную инициализацию приходилось выполнять после каждого незначительного изменения в процедурах и т. Д.), А также справочные проблемы, которые действительно расстраивали.

Чтобы решить эту проблему, мы должны удалить все функции и представления (всего около 200 объектов) и воссоздать их после того, как моментальный снимок был доставлен.

Есть ли у кого-нибудь идея, как мы могли бы изменить концепцию этой репликации, чтобы мы могли изменять объекты и не устанавливать массовое время простоя (около 2 часов для 6 реплик), чтобы исправить беспорядок из-за ссылок?

Для полноты информации: мы используем MS SQL Server 2008 R2 на всех экземплярах (с выпусками Enterprise и Standard). Обновление до SQL Server 2014 запланировано на конец этого года для издателя и некоторых подписчиков. Только Публикация требует доступа для записи. Обновления схемы базы данных развертываются часто (примерно два раза в месяц), обычно есть только изменения в процедурах, но иногда добавлялись / изменялись таблицы, вот где наша концепция репликации, кажется, разваливается.

Любые предложения приветствуются. Заранее спасибо!

С уважением Дэвид


person David E.    schedule 13.02.2015    source источник
comment
Вы можете разместить это на dba.stackexchange.com.   -  person ta.speot.is    schedule 13.02.2015


Ответы (1)


Для меня это звучит странно, потому что у меня много хранимых процедур в репликации и нет проблем со сменой SP. ИЗМЕНЕНИЕ ПРОЦЕДУРЫ можно распространяться по подпискам. Также не вижу проблем с переинициализацией подписок из-за зависимости объектов. Я могу вспомнить такие проблемы при репликации слиянием, и есть SP для переупорядочивания объектов. В большинстве случаев SQL Server хорошо обрабатывает зависимости. Во-вторых, вы можете добавлять \ удалять статьи в репликацию транзакций без повторной инициализации.

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

person Alsin    schedule 13.02.2015