Für alle, die letzten Dienstag auf dem PASS-Treffen in Nürnberg waren: Wir rätselten, wie man für eine Sperre feststellen kann, welche Ressource betroffen ist. Es geht hier um die Info, die z.B. mit sp_lock angezeigt wird.
Ich fand dazu doch keine Info im SQL-Server-Magazine. Aber das ist recht gut und ausführlich in den Books-Online bei "sys-dm_tran_locks" beschrieben. Wenn man die View abruft, dann kann man anhand der Datenbank–ID und der Ressource-ID (steht in "resource_description") feststellen, welches Objekt genau gesperrt wurde. Dazu benötigt man noch die Datenbank-ID (siehe unten) und ggf. die ID der übergeordneten Ressource (resource_associated_entity_id ), die enthält z.B. meist die "heap or b-tree ID" falls eine Seite gesperrt wurde.
Wegen der vielfältigen Möglichkeiten ist es nicht ganz unaufwändig dafür eine allgemeine Interpretationsfunktion zu schreiben.
Dabei muss man beachten, dass die Objekt-IDs jeweils auf eine Datenbank bezogen sind. Aber das kann man mit einem neuen Feature des SQL-Servers-2005 lösen. Während man früher für die Funktion "object_name(
Bisher (geht immer noch):
use northwind
select object_name(21575115);
–> Orders
go
use Adventureworks
select object_name(21575115);
–> uspLogError
Jetzt möglich:
use master
select object_name(21575115, db_id('Northwind'));
–> Orders
Damit kann man eine Auswertung schreiben, die neben der internen Angabe der Sperren auch das Objekt im Klartext nennt: Fleißige vor…