Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Изменение схемы базы, участвующей в репликации  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Каким образом осуществлять сабж? Есть ситуация, когда все таблицы базы входят в публикацию для репликации транзакций с обновлением на подписчике. И при попытке изменить схему одной из таблиц(отменить свойство NOT FOR REPLICATION у поля IDENTITY, или поставить какому-то полю значение NOT NULL) вылезает ошибка, что таблицу невозможно удалить, поскольку она учавствует в репликации. При попытке убрать таблицу из публикации выдается сообщение, что подписки станут недействительными и их надо будет переинициализировать, а это очень большой гемморой. Неужто таблицу нельзя модифицировать внутри работающей репликации, или хотя бы безболезненно доставть её оттуда, а потом возвращать?
3 июн 08, 12:57    [5751671]     Ответить | Цитировать Сообщить модератору
 Re: Изменение схемы базы, участвующей в репликации  [new]
el Pueblo
Member

Откуда: Харьков
Сообщений: 202
https://www.sql.ru/articles/mssql/2005/021502AlteringReplicatedTableColumn.shtml
3 июн 08, 13:08    [5751778]     Ответить | Цитировать Сообщить модератору
 Re: Изменение схемы базы, участвующей в репликации  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Большое спасибо за ответ, схема в общем понятна. А может кто подсказать, каким способом можно установить кол-во неудачных попыток синхронизации до того, как подписка метится неактивной? А то возникла ошибка при попытке вставить данные на подписчике, он 10 раз повторил попытку с тем же результатом, а потом отвалился с ошибкой "subscription(s) have been marked inactive and must be reinitialized". Хотелось бы вместо 10 попыток поставить очень много, потому как переинициализировать всю подписку слишком хлопотно
3 июн 08, 16:29    [5753598]     Ответить | Цитировать Сообщить модератору
 Re: Изменение схемы базы, участвующей в репликации  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Правой кнопкой на нужном агенте, Agent Properties->Steps->шаг, который называется Run agent->Edit->закладка Advanced->поле Retry attempts
3 июн 08, 18:42    [5754851]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Изменение схемы базы, участвующей в репликации  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Подниму свою древнюю тему.

Дано:
Репликация транзакций.
Добавление статьи в публикацию следующим скриптом:
exec sp_addarticle @publication = N'Search_Main', @article = N'Makes', @source_owner = N'dbo', 
@source_object = N'Makes', @type = N'logbased', @description = N'', 
@creation_script = N'', @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509F, 
@identityrangemanagementoption = N'manual', @destination_table = N'Makes', @destination_owner = N'dbo', @status = 24,
@vertical_partition = N'true', @ins_cmd = N'CALL [sp_MSins_dboMakes]', @del_cmd = N'CALL [sp_MSdel_dboMakes]', @upd_cmd = N'SCALL [sp_MSupd_dboMakes]'

-- Adding the article's partition column(s)
exec sp_articlecolumn @publication = N'Search_Main', @article = N'Makes', @column = N'MakeId', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Search_Main', @article = N'Makes', @column = N'MakeLogo', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Search_Main', @article = N'Makes', @column = N'MakeName', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Search_Main', @article = N'Makes', @column = N'bitOriginal', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1

-- Adding the article synchronization object
exec sp_articleview @publication = N'Search_Main', @article = N'Makes', @view_name = N'SYNC_Makes_1__170', @filter_clause = N'', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
GO

Скрипт сгенерирован студией.

Таблица Makes содержит порядка 1500 записей, но очень высоконагружена. Во время выполнения скрипта мы получаем блокировку схемы LCK_M_SCH_S на таблице Makes на вызове sp_articleview порядка 250 секунд, что никому не нравится.

Можно это как-то обойти?

Потому что непонятно, как тогда поступать при изменении схемы таблиц, участвующих в публикации? Каждый раз ловить такие локи?
21 дек 11, 13:46    [11802832]     Ответить | Цитировать Сообщить модератору
 Re: Изменение схемы базы, участвующей в репликации  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oblom
Во время выполнения скрипта мы получаем блокировку схемы LCK_M_SCH_S на таблице Makes на вызове sp_articleview порядка 250 секунд, что никому не нравится.
Можно это как-то обойти?

А как предлагаете производить модификацию схемы без блокировки ?
21 дек 11, 13:56    [11802945]     Ответить | Цитировать Сообщить модератору
 Re: Изменение схемы базы, участвующей в репликации  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Glory
Oblom
Во время выполнения скрипта мы получаем блокировку схемы LCK_M_SCH_S на таблице Makes на вызове sp_articleview порядка 250 секунд, что никому не нравится.
Можно это как-то обойти?

А как предлагаете производить модификацию схемы без блокировки ?


Я не против блокировки, мне интересно почему так долго? Таблица маленькая, в дереве блокировок она находится в самом верху, то есть её никто не держит, всего четыре столбца, что там делать 4 минуты?
21 дек 11, 14:04    [11803008]     Ответить | Цитировать Сообщить модератору
 Re: Изменение схемы базы, участвующей в репликации  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oblom
Я не против блокировки, мне интересно почему так долго? Таблица маленькая, в дереве блокировок она находится в самом верху, то есть её никто не держит, всего четыре столбца, что там делать 4 минуты?

Наверное не только эта таблица меняется.
21 дек 11, 14:07    [11803044]     Ответить | Цитировать Сообщить модератору
 Re: Изменение схемы базы, участвующей в репликации  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Glory,

наблюдается странная картина, есть скрипт:
exec sp_addarticle @publication = N'EmExMain_Search_Test', @article = N'Makes', @source_owner = N'dbo', @source_object = N'Makes', @type = N'logbased', 
@description = N'', @creation_script = null, @pre_creation_cmd = N'truncate', @schema_option = 0x000000000803509F, @identityrangemanagementoption = N'manual', 
@destination_table = N'Makes', @destination_owner = N'dbo', @status = 0, @vertical_partition = N'true', @ins_cmd = N'CALL sp_MSins_dboMakes', 
@del_cmd = N'CALL sp_MSdel_dboMakes', @upd_cmd = N'SCALL sp_MSupd_dboMakes'

запускаю его в SSMS, он отрабатывает за 4 секунды. Точнее как отрабатывает, пишет "Command(s) completed successfully.".

Вроде бы всё хорошо. Однако в ActivityMonitor он по-прежнему висит со статусом Sleeping и с OpenTran = 2 и лочит всё подряд. Приходится мочить его руками через KillProcess в ActivityMonitor.

Такое ощущение, что в хранимке sp_addarticle не срабатывает COMMIT, что на самом деле очень маловероятно.
21 дек 11, 15:22    [11803794]     Ответить | Цитировать Сообщить модератору
 Re: Изменение схемы базы, участвующей в репликации  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Результат select @@version?
21 дек 11, 16:08    [11804222]     Ответить | Цитировать Сообщить модератору
 Re: Изменение схемы базы, участвующей в репликации  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
invm
Результат select @@version?


Microsoft SQL Server 2005 - 9.00.5000.00 (X64)   Dec 10 2010 10:38:40   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) 
21 дек 11, 16:16    [11804302]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить