/*
Bitte als "sa" anmelden (möglicherweise reicht die Windows-Authentification)
Hinweis: wenn z.B. ein Satz verändert wird, werden neben der Tabelle auch alle Indizes gesperrt.
Das ist der Grund für die vielen gesperrten Zeilen
*/
/*
KILL 141
KILL 141 WITH STATUSONLY --dies ist nur bei komplexen Rollback's sinnvoll möglich
*/
USE master
go
-- Locks indentifizieren --------------------------------------------------------------------------------
Select request_session_id, blocking_session_id, DatabaseName,dbid, LockedObjectName, LockedObjectId, LockedResource, LockType, LoginName, HostName
, IsUserTransaction, TransactionName, TransactionStartTime
, replace(replace(replace(replace( ST.text ,CHAR(9),' ') ,CHAR(13),' ') ,CHAR(10),' '),';',':') AS SqlStatementText /* SQL Statement */
from (
SELECT DISTINCT L.request_session_id AS request_session_id, -- Anfragender System Process Identifier
t2.blocking_session_id as blocking_session_id, -- Blockierender System Process Identifier
--request_owner_guid AS UOW, -- Identifiziert die Arbeitseinheits-ID (Unit of Work, UOW) verteilter Transaktionen
DB_NAME(L.resource_database_id) AS DatabaseName, -- Databasename
O.Name AS LockedObjectName, -- Object name
P.object_id AS LockedObjectId, -- Eindeutige Object identification number
L.resource_type AS LockedResource, -- Resource which is locked: DATABASE, FILE, OBJECT, PAGE, KEY, EXTENT, RID, APPLICATION, METADATA, HOBT, ALLOCATION_UNIT.
L.request_mode AS LockType, -- Lock Type: Exclusive locks (X), Intent locks (I), Shared locks (S), Update locks (U), Schema locks (Sch)
--L.resource_description AS LockDescription, -- LockDescription
--ST.text AS SqlStatementText, -- SQL Statement
--replace(replace(replace( ST.text ,CHAR(9),' ') ,CHAR(13),'/*CR*/') ,CHAR(10),'/*LF*/') AS SqlStatementText, /* SQL Statement */
CN.most_recent_sql_handle,
ES.login_name AS LoginName, -- Loginname mit dem der User an der DB angemeldet ist
ES.host_name AS HostName, -- Hostname des verbunden clients
TST.is_user_transaction as IsUserTransaction, -- 1 = Die Transaktion wurde von einer Benutzeranforderung initiiert. 0 = Systemtransaktion.
AT.name as TransactionName, -- Transaktionsname
AT.transaction_begin_time as TransactionStartTime,-- Uhrzeit des Transaktionsbeginns.
CN.auth_scheme as AuthenticationMethod -- Login Methode SQL / Windows authentifizierung
FROM sys.dm_tran_locks L
left JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id
left JOIN sys.objects O ON O.object_id = P.object_id
left JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id
left JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id
left JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id
left JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id
left JOIN sys.dm_os_waiting_tasks as t2
ON L.lock_owner_address = t2.resource_address
) as temp
CROSS APPLY sys.dm_exec_sql_text(temp.most_recent_sql_handle) AS ST
WHERE 1=1
--and resource_database_id = db_id('SalesLogix_Prod') --nur Locks einer bestimmten Datenbank betrachten
--and L.request_mode in ('X', 'IX') -- Exklusive Locks
--and L.request_mode NOT in ('S')
--and (t2.blocking_session_id IS NOT NULL OR L.request_mode = 'X') --klare Störer und Opfer darstellen
ORDER BY temp.request_session_id