2011-02-06 5 views
0

Есть ли способ временно запретить выполнение асинхронных триггеров в SQL Server 2008. Я реализовал триггеры с Queue и Service Broker, который читает из очереди. Поскольку я хочу выполнить некоторые тяжелые запросы на этом сервере, и эти триггеры будут сильно замедлять работу - как я могу остановить выполнение триггеров, но все же они попадают в очередь, чтобы выполнить их позже.SQL Server 2008: Могу ли я временно приостановить выполнение асинхронных триггеров?

Заранее благодарен!

ответ

0

Вот что мы придумали:

Во-первых: Комментарий тело хранимой процедуры, которая считывает сообщения в очереди. Все остальное (триггеры, очередь и т. Д.) Работает, как и должно работать. Таким образом, сообщения попадают в очередь, но оттуда никто не читает.

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

Третьего: Раскоментируйте тело хранимой процедуры в исходном состоянии

Forth: Выполните Отключить и после Включить операцию по очереди. Теперь хранимая процедура начнет считываться из очереди. А изменения применяются асинхронно.

-1

Да, ОТКЛЮЧАЙТЕ ТРИГГЕР, и когда вы закончите. Включите TRIGGER. См. http://msdn.microsoft.com/en-us/library/ms189748.aspx для документации.

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

+0

Нет, я обязательно захочу запустить триггеры позже со всеми измененными мной данными. SO, отключить/включить триггеры хотят работать. Также логика в этих триггерах слишком тяжелая и сложная, и я не хочу ее дублировать. – anthares

1

Первый ответ с комментариями хранимой процедуры, а затем отключением и включением очереди должен работать. У меня похожая ситуация - очередь сервис-брокера после триггера обновления. В очереди используется хранимая процедура для активации. я сделал следующее (почти такой же, как первый ответ, но я не закомментировать сохраненное тело процедуры): 1. Отключение очереди:

альтер ИмяОчереди очереди с активацией (статус = выключено);

  1. Обновления массовой информации, сообщения будут сохранены в очереди.

  2. Активация очереди:

альтер ИмяОчереди очереди с активацией (статус = ON);

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

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