Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MS SQL Server locked Rows anzeigen / entsperren (https://www.delphipraxis.net/114950-ms-sql-server-locked-rows-anzeigen-entsperren.html)

Salomon 3. Jun 2008 11:06

Datenbank: MS SQL Server • Version: 2005 • Zugriff über: ADO

MS SQL Server locked Rows anzeigen / entsperren
 
Hi,

der Threadtitel sagt eigentlich schon alles. Einige Datensätze in einer Tabelle meiner DB sind per Transkation gesperrt. Nun kann ich allerdings nicht ermitteln wer die Daten sperrt. Jemand anderes würde aber gerne die Daten bearbeiten. Mir scheint es auch so, das die Daten schon sehr lange gespert sind...

Gibt es einen MS SQL Befehl mit dem ich mir die gesperten Zeilen einer Tabelle anzeigen lassen kann, und diese entsperren kann??

Lg
Marcus

shmia 3. Jun 2008 17:04

Re: MS SQL Server locked Rows anzeigen / entsperren
 
Die Sperren können nur dadurch aufgehoben werden, dass man den entsprechenden Prozess im SQL beendet.
SQL Manangement Studio starten, "Management" -> "Activity Monitor" wählen und mit rechtem Mausklick "View locks by object" wählen.

Salomon 5. Jun 2008 12:52

Re: MS SQL Server locked Rows anzeigen / entsperren
 
Hey Shima,
danke für deine Antwort. Ich nutze die Express Version des Studios. Da scheint es leider keinen "Activity Monitor" zu geben.

Ich habe es aber mittlerweile hinbekommen die Locks aus den Systemtabellen auszulesen und mit "Kill" zu beenden. Das ganze könnte auch für andere User interessant sein:

SQL-Code:
-- Locks indentifizieren --------------------------------------------------------------------------------
SELECT L.request_session_id AS SPID,               -- 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
  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 Mehode 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
  CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST
WHERE resource_database_id = db_id('DB_ProjectPoint')
      and L.request_mode in ('X', 'IX')          -- Exklusive Locks
ORDER BY L.request_session_id

-- Info
-- Lock Types: [url]http://www.sqlteam.com/article/introduction-to-locking-in-sql-server[/url]
-- Dead Lock Information: [url]http://weblogs.sqlteam.com/mladenp/category/223.aspx/rss[/url]


-- Locks aufheben --------------------------------------------------------------------------------
--KILL 108; -- Kill SPID Process id XYZ. Release the Dataset.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz