2014-02-15 3 views
1

Я работаю с средой, которая использует репликацию Merge, чтобы публиковать десятки публикаций до 6 десятков подписчиков каждые 10 минут. Когда выполняются определенные задания одновременно, встречаются блокировки и блокировка, а процесс репликации неэффективен.Как выполнить SQL Server Merge Replication Jobs последовательно?

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

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

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

Прямо сейчас, если я отключу задание слияния репликации, пакет SSIS все равно начнет и запустит его в любом случае.

Я попытался создать пакет SSIS для каждого задания репликации, а затем создать задание агента SQL Server, которое последовательно вызывает эти пакеты. Эта работа занимает 8 секунд, чтобы закончить, пока отдельные пакеты, на которые он звонит (запуск задания репликации), занимают не менее минуты. Другими словами, это тоже не работает.

Агент SQL Server знает, когда закончится задание на репликацию! Почему пакет SSIS или задание не знает? Какой смысл иметь поток управления, если он не работает?

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

ответ

0

Может быть, я не видел реальной проблемы, но, естественно, вам нужна точка синхронизации, и есть много способов ее создания. Например, вы все равно можете запускать задания одновременно, но пусть первая работа блокирует ресурс, который необходим для второго, который будет ждать разблокировки ресурса. Или второе задание может прослушать таблицу журналов в цикле (с ожиданием «минуты» и «отменить» после «часа») ...

+0

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

+0

Я вижу. Чем если бы не преднамеренная блокировка, почему бы не синхронизировать в цикле с отслеживанием таблицы журналов? Я думаю, что экзотика, подобная синхронизации на SQL SERVER Alerts, менее предпочтительна. На самом деле вы можете добавить новые шаги «при успешном запуске нового задания», вы даже можете добавить эти шаги из другого задания или создать задание в задании, задание также может удалить себя, но все же я предпочел бы прозрачную синхронизацию с таблицей событий цикла и отслеживания. –

+0

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

Смежные вопросы