AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MS SQL Server locked Rows anzeigen / entsperren
Thema durchsuchen
Ansicht
Themen-Optionen

MS SQL Server locked Rows anzeigen / entsperren

Ein Thema von Salomon · begonnen am 3. Jun 2008 · letzter Beitrag vom 5. Jun 2008
Antwort Antwort
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#1

MS SQL Server locked Rows anzeigen / entsperren

  Alt 3. Jun 2008, 12:06
Datenbank: MS SQL Server • Version: 2005 • Zugriff über: ADO
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
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: MS SQL Server locked Rows anzeigen / entsperren

  Alt 3. Jun 2008, 18:04
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#3

Re: MS SQL Server locked Rows anzeigen / entsperren

  Alt 5. Jun 2008, 13:52
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.
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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