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.

2 megjegyzés:

  1. Érdekes. Egyébként valami hasonló volt nekem is a napokban, itt az "elárvult" spid-et lőttem ki a KILL paranccsal

    VálaszTörlés
  2. De akkor nálad a SPID nem negatív szám volt?

    Mikinek is az kavart be, hogy a package-en belül valamelyik elemnél átállította a TransactionOption property-t Supported-re. Ehhez már kellett az MSDTC és így lett az elárvult session id-ja -2, amit aztán nem evett meg a KILL.

    Az ilyen spéci hibákat ki kell ám harcolni! ;)

    VálaszTörlés