2012. július 24., kedd

SPID = -2

Hegedűs Miklós kollégám - miután az SSIS a kezei közt lehelte ki a lelkét egy pakk futtatása közben -, észrevette, hogy az SQL Server-en, az SSIS után beragadt session a rejtélyes -2-es azonosítót kapta. Ezt sajnos a KILL parancs nem tudja kezelni, hibával elszáll:

 Msg 6101, Level 16, State 1, Line 1
 Process ID -2 is not a valid process ID. Choose a number between 1 and 2048.

Kis nyomozás után Miki a megoldást is megtalálta Utsab Chattopadhyay blogján, a CONSULTDBA-n. A -2 az elárvult MSDTC session-öknek dedikált azonosító. Ha a session-t kézzel kell lezárnunk, használhatjuk a KILL-t, ami egy SPID-et, vagy egy UOW (Unit Of Work) azonosítót vár paraméterként. Mivel az előbbi csak 1 és 2048 közé eshet, keressünk egy UOW id-t. A CONSULTDBA szerint így:
  1. SELECT req_transactionUOW FROM master..syslockinfo WHERE req_spid = -2;
Mivel a syslockinfo egy igen régi darab, és a Microsoft azzal fenyeget, hogy a következő SQL Server verzióban már meg se találjuk, én inkább a sys.dm_tran_locks hívását javaslom:
  1. SELECT request_owner_guid FROM master.sys.dm_tran_locks WHERE request_session_id = -2;  
Mindkét select egy guid-ot ad vissza, amivel a KILL már működni fog.