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

Откуда:
Сообщений: 3422
Добрый день всем.

Microsoft SQL Server 2005 - 9.00.4035.00 (X64) 
Nov 24 2008 16:17:31
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)

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

Date		10.11.2011 22:58:37
Log SQL Server (Archive #5 - 11.11.2011 0:00:00)

Source spid233s

Message
The activated proc [dbo].[<ActivationProcName>] running on queue <dbname>.dbo.<QueueName> output the following: 'The definition of object '<ActivationProcName>' has changed since it was compiled.'

Насколько я понял, после этого момента активация на очереди отключилась, хотя в sys.service_queues все по-прежнему в ажуре.
Подозреваемые утверждают, что процедуру активации они не альтерили, и в принципе я им верю - попытка выполнить alter proc НЕ приводит к появлению аналогичного сообщения в логе. Гугл говорит, что такое случается, если таблица либо индекс, используемые процедурой, перестраиваются в процессе работы хранимки. Это отследить уже несколько сложнее, но это уже в любом случае вторичная проблема. Почему активация отрубилась?

Пробовал делать alter queue with activation (status = off), потом включать обратно. Пробовал менять в этом интервале процедуру активации. Пробовал вообще стопить и потом включать очередь. Во всех случаях результата ноль.

Профайлер показывает то, что собственно и должен: сначала со стороны инициатора "11 - BEGIN DIALOG" и "1 - Send Message", потом со стороны таргета аналогичная пара событий - "12 - Dialog Created" и "6 - Received Sequenced Message" (это значения столбца EventSubClass для события Broker:Conversation). По идее, после этого должна стартовать активация, но ее нет!
События Broker:Activation я пробовал мониторить, но по ним непонятно, что именно активируется. Ну или я до конца не разобрался, не знаю.

Кто-нибудь сталкивался с таким, и как это оживлять? Пересоздавать очередь не хотелось бы, там уже более 1М сообщений, которые неплохо бы обработать в штатном порядке.
15 ноя 11, 14:57    [11599906]     Ответить | Цитировать Сообщить модератору
 Re: Процедура активации для очереди не активируется  [new]
mike909
Member

Откуда:
Сообщений: 662
Ennor Tiegael,

Что выдает
select * 
from sys.service_queues
where is_receive_enabled != 1 and is_enqueue_enabled != 1

Если что-то выдает, то
alter queue [queuename] with activation (status = off)
и запустите Reader под отладчиком, поискав "отравленное" сообщение ...

Если все OK, то, как вариант, можно разгрести очередь запустив Reader вручную без отладчика, а зате пересоздать очередь ...
15 ноя 11, 18:14    [11601773]     Ответить | Цитировать Сообщить модератору
 Re: Процедура активации для очереди не активируется  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
mike909,

В sys.service_queues все эти биты установлены в 1, я уже писал.

Думаете, придется пересоздавать очередь? Эх...
15 ноя 11, 18:29    [11601871]     Ответить | Цитировать Сообщить модератору
 Re: Процедура активации для очереди не активируется  [new]
mike909
Member

Откуда:
Сообщений: 662
Ennor Tiegael
mike909,

В sys.service_queues все эти биты установлены в 1, я уже писал.

Думаете, придется пересоздавать очередь? Эх...

Да, писали
Ennor Tiegael
Насколько я понял, после этого момента активация на очереди отключилась, хотя в sys.service_queues все по-прежнему в ажуре.
уточнить, что Вы имели ввиду - не помешало...
Под отладчиком Reader побовали запускать ? Каков результат ? Все OK ?
Если все OK - тогда лучше пересоздать ...
15 ноя 11, 18:53    [11602040]     Ответить | Цитировать Сообщить модератору
 Re: Процедура активации для очереди не активируется  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
mike909,

Не понял, что вы называете Reader. Репликации на базе нет, если что.
Отравы там тоже нет - код процедуры активации написан так, что перехватывает отраву и вместо остановки очереди логирует ошибки в отдельную таблицу. Но там, как логично предположить, пусто, ибо активация не стартует.

Код процедуры активации не менялся уже порядка полугода, ломаться там нечему.
15 ноя 11, 19:07    [11602120]     Ответить | Цитировать Сообщить модератору
 Re: Процедура активации для очереди не активируется  [new]
mike909
Member

Откуда:
Сообщений: 662
Ennor Tiegael,

Под Reader_ом подразумевается SP_шка, которую запускает Service Broker, т.е. то, что у Вас не запускается.
15 ноя 11, 19:31    [11602198]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить