The queue %i in database %i has activation enabled and contains unlocked messages but no RECEIVE has been executed for %i seconds.

Éljen, jó ez a mai nap, ma csak pár olyan hibaüzenetem volt, aminél sem a Google, illetve a #sqlhelp hashtag a Twitteren sem segített :-). A címben szereplő csúnya hibaüzenettel volt tele az SQL Server Error Log-om és hirtelen nem is igazán tudtam, hogy mihez is kezdjek. Tudom nehéz, de elkezdtem gondolkodni egy picit :-), mit is jelenthet ez: message, receive. activation. S lőn világosság: ez mind, mind Service Broker-re enged következtetni, azaz valamiért a QUEUE tele van, nem fut le valamiért az aktivátor. Ilyenkor újra kell "rúgni" a nyavalyás QUEUE-t és az aktivátort. Ehhez nem kell mást tenni, csak az alábbi scriptet (értelemszerűen kijavítva a neveket) kell lefuttatni:
ALTER QUEUE queuename WITH STATUS = OFF ;
GO
ALTER QUEUE queuename
WITH ACTIVATION 
(
    STATUS = ON, 
    PROCEDURE_NAME = dbo.sprocforactivation
);
Ezek után megszűnt a probléma.

Érdemes a http://technet.microsoft.com/en-us/library/ms177628(v=sql.110).aspx oldalon a queue status scriptet is megnézni, igen hasznos lehet.

Felmerül a kérdés, hogy mégis mikor fordulhat elő ilyen. A válasz igen egyszerű: ha van egy Service Broker-t használó adatbázis megoldás és az AAG-ben vagy DBM-ben van, egy failover után az auto-activated process nem minden esetben indul el, ezért ezt manuálisan kellett megtenni. Ilyen például a Master Data Services mögötti adatbázis is (lásd:http://iamberke.com/post/2014/04/27/MDS-es-AAG-automatikus-failover.aspx).

Add comment