Merkwürdige Werte in SYS.DM_TRAN_LOCKS Tabelle RESOURCE_ASSOCIATED_ENTITY_ID Spalte

Ich habe versucht, einige seltsame Werte in der Spalte RESOURCE_ASSOCIATED_ENTITY_ID von SYS.DM_TRAN_LOCKS zu verstehen, wenn RESOURCE_TYPE "OBJECT" ist. Obwohl diese object-Ids sein sollten, kann ich nicht feststellen, auf welches object sie sich beziehen.

Ich habe alles versucht, was ich mir vorstellen kann, einschließlich der Abfrage aller Systemtabellen mit Spalten vom Typ INT und BIGINT, um zu sehen, ob ich den Wert finden kann. Kein Glück. Die lustigen Werte erscheinen tatsächlich in SYS.DM_TRAN_LOCKS, SYS.SYSLOCKINFO und SP_LOCK.

(Microsoft SQL server Standard Edition (64-Bit), Version 9.00.4053.00 (SP3 + ein securityspatch))

select db_name(resource_database_id),object_name(resource_associated_entity_id),* from sys.dm_tran_locks where request_session_id is not null and resource_associated_entity_id <> 0 select db_name(resource_database_id),object_name(resource_associated_entity_id),* from sys.dm_tran_locks where request_session_id is not null and db_name(resource_database_id)='SamsungeStore' and resource_associated_entity_id <> 0 

Es kann die object-ID, die Hobt-ID oder die Zuweisungseinheit-ID zurückgeben.

Die objecte können datatabelle, view, gespeicherte Proc, Extended Stored Proc oder irgendein anderes object sein, das eine object-ID hat.

Kann OBJECTPROPERTYEX (ID, PROPERTY) ausprobieren. Siehe 2008 Bücher Online für Beispiele.

Ich fand diese Abfrage, wo RESOURCE_ASSOCIATED_ENTITY_ID decodiert und verwendet wird, basierend auf resource_type, und in einigen Fällen bemerkte ich, dass es nicht decodiert werden kann.

 /* LOCK MONITOR ON CURRENT schema connections */ Select GETDATE() as Current_Time1, es.session_id, db_name(sp.dbid) As DatabaseName, es.status, substring((Select text From sys.dm_exec_sql_text(sp.sql_handle)),1,128) As LastSQLText, es.host_name, es.login_time, es.login_name, es.program_name, Convert(float, Round((IsNull(es.cpu_time, 0.0) / 1000.00),0)) As CPU_Time_in_seconds, Convert(float, Round((IsNull(es.lock_timeout, 0.0) / 1000.00),0)) as lock_timeout_in_seconds, tl.resource_type As LockType, tl.request_mode, tl.resource_associated_entity_id, CASE WHEN tl.resource_type = 'OBJECT' THEN OBJECT_NAME(tl.resource_associated_entity_id) WHEN tl.resource_type IN ('KEY', 'PAGE', 'RID') THEN ( SELECT object_name(object_id) FROM sys.partitions ps1 WHERE ps1.hobt_id=tl.resource_associated_entity_id ) ELSE 'na' END AS ObjectName, tl.request_status As LockStatus, ec.connect_time, ec.net_transport, ec.client_net_address, er.connection_id, Case er.blocking_session_id When 0 Then 'Not Blocked' When -2 Then 'Orphaned Distributed Transaction' When -3 Then 'Deferred Recovery Transaction' When -4 Then 'Latch owner not determined' Else '' End As Blocking_Type, er.wait_type, Convert(float, Round((IsNull(er.wait_time, 0.0) / 1000.00),0)) As Wait_Time_in_seconds, er.percent_complete, er.estimated_completion_time, Convert(float, Round((IsNull(er.total_elapsed_time, 0.0) / 1000.00),0)) As Total_Elapsed_Time_in_seconds, Case er.transaction_isolation_level When 0 Then 'Unspecified' When 1 Then 'ReadUncomitted' When 2 Then 'ReadCommitted' When 3 Then 'Repeatable' When 4 Then 'Serializable' When 5 Then 'Snapshot' Else '' End transaction_isolation_level From master.sys.dm_exec_sessions es Inner Join master.sys.sysprocesses sp On sp.spid = es.session_id Left Join master.sys.dm_exec_connections ec On ec.session_id = es.session_id Left Join master.sys.dm_exec_requests er On er.session_id = es.session_id Left Join master.sys.dm_tran_locks tl On tl.request_session_id = es.session_id Where es.session_id <> @@spid And es.session_id = es.session_id And sp.dbid = DB_ID() /* CURRENT DB TO MONITOR */ And tl.resource_type <> 'DATABASE'; raiserror( '- ', 10, 3 ) with nowait; WAITFOR DELAY '00:00:30'; GO 30 

AJM hat erklärt, dass er diese unbekannten object-IDs sieht, wenn RESOURCE_TYPE OBJECT ist. Nach den Books Online sollte der Inhalt der RESOURCE_ASSOCIATED_ENTITY_ID in diesem Fall eine object-ID (keine Hobt-ID oder Zuweisungs-ID) sein. Der eigentliche Wortlaut lautet: "Stellt ein databaseobjekt dar. Dies kann eine datatabelle, eine view, eine gespeicherte Prozedur, eine erweiterte gespeicherte Prozedur oder ein beliebiges object mit einer object-ID sein.

Allerdings bin ich in der Lage, das Problem in meiner Umgebung neu zu erstellen (SQL server 2005 Developer Edition Version 9.00.3282.00, SP1). Ich habe versucht, die OBJECTPROPERTYEX Vorschlag, aber es gibt auch NULL. Auch dies deutet darauf hin, dass die Mystery-objecte nicht Schema-Scoped sind, aber leider kann ich auch nicht herausfinden, was sie sind.