2017-08-30 66 views
0

我這樣定義(VB.NET)交易跟蹤.NET的事務,在SQL

Dim objTransaction As New Transaction(IsolationLevel.ReadCommitted, "OpenTransaction") 

做的過程,然後用

objTransaction.Commit() 
objTransaction.Dispose() 

objTransaction.Rollback() 
關閉

如果有錯誤。

現在,如果事務處於打開狀態,如何在SQL中查找「OpenTransaction」?

我做了

SELECT * FROM sys.dm_tran_active_transactions 

,並讓 - NAME = 「user_transaction」,而不是 「OpenTransaction」。如何在SQL中找到我給它的名稱?我有幾個用戶在網頁上做所有不同的事情,我發現在SQL中有一個長時間運行的開放事務,但無法找到我在代碼中給出的名字。

+0

user_transaction是你的事務。此外,你可以使用sys.dm_exec_requests知道sql文本 – TheGameiswar

+0

謝謝,但可能有幾十個「user_transaction」。 我可以找到SPID,然後選擇「DBCC INPUTBUFFER(XX)」來查找SQL。但我實際上需要在代碼中指定的事務名稱,因爲SQL在多個位置可能非常相似。 – Bibbs

回答

0

您可以使用SQL事件探查器來達到此目的。你可以啓動SQL管理工作室裏這樣便設置過濾器,並開始跟蹤

檢查this聯繫以獲取更多信息

UPDATE

你也可以使用此查詢來監控交易:

USE [master] 
GO 
CREATE PROCEDURE [dbo].[sp_who3] 

AS 
BEGIN 

SET 
    TRANSACTION isolation level READ uncommitted; 
SELECT 
    SPID = er.session_id, 
    BlkBy = 
    CASE 
     WHEN 
     lead_blocker = 1 
     THEN 
     - 1 
     ELSE 
     er.blocking_session_id 
    END 
, ElapsedMS = er.total_elapsed_time , CPU = er.cpu_time , IOReads = er.logical_reads + er.reads , IOWrites = er.writes , Executions = ec.execution_count , CommandType = er.command , LastWaitType = er.last_wait_type , ObjectName = Object_schema_name(qt.objectid, dbid) + '.' + Object_name(qt.objectid, qt.dbid) , SQLStatement = Substring (qt.text, er.statement_start_offset/2, 
    CASE 
     WHEN 
     (
      CASE 
       WHEN 
        er.statement_end_offset = - 1 
       THEN 
        Len(CONVERT(NVARCHAR(max), qt.text)) * 2 
       ELSE 
        er.statement_end_offset 
      END 
      - er.statement_start_offset/2 
     ) 
     < 0 
     THEN 
     0 
     ELSE 
     CASE 
      WHEN 
       er.statement_end_offset = - 1 
      THEN 
       Len(CONVERT(NVARCHAR(max), qt.text)) * 2 
      ELSE 
       er.statement_end_offset 
     END 
     - er.statement_start_offset/2 
    END 
) , STATUS = ses.status , [Login] = ses.login_name , Host = ses.host_name , DBName = Db_name(er.database_id) , StartTime = er.start_time , Protocol = con.net_transport , transaction_isolation = 
    CASE 
     ses.transaction_isolation_level 
     WHEN 
     0 
     THEN 
     'Unspecified' 
     WHEN 
     1 
     THEN 
     'Read Uncommitted' 
     WHEN 
     2 
     THEN 
     'Read Committed' 
     WHEN 
     3 
     THEN 
     'Repeatable' 
     WHEN 
     4 
     THEN 
     'Serializable' 
     WHEN 
     5 
     THEN 
     'Snapshot' 
    END 
, ConnectionWrites = con.num_writes , ConnectionReads = con.num_reads , ClientAddress = con.client_net_address , Authentication = con.auth_scheme , DatetimeSnapshot = Getdate() , plan_handle = er.plan_handle 
FROM 
    sys.dm_exec_requests er 
    LEFT JOIN 
     sys.dm_exec_sessions ses 
     ON ses.session_id = er.session_id 
    LEFT JOIN 
     sys.dm_exec_connections con 
     ON con.session_id = ses.session_id OUTER apply sys.Dm_exec_sql_text(er.sql_handle) AS qt OUTER apply ( 
     SELECT 
     execution_count = Max(cp.usecounts) 
     FROM 
     sys.dm_exec_cached_plans cp 
     WHERE 
     cp.plan_handle = er.plan_handle) ec OUTER apply ( 
     SELECT 
      lead_blocker = 1 
     FROM 
      master.dbo.sysprocesses sp 
     WHERE 
      sp.spid IN 
      (
       SELECT 
        blocked 
       FROM 
        master.dbo.sysprocesses WITH (nolock) 
       WHERE 
        blocked != 0 
      ) 
      AND sp.blocked = 0 
      AND sp.spid = er.session_id) lb 
     WHERE 
      er.sql_handle IS NOT NULL 
      AND er.session_id != @@SPID 
     ORDER BY 
      CASE 
       WHEN 
        lb.lead_blocker = 1 
       THEN 
        - 1 * 1000 
       ELSE 
        - er.blocking_session_id 
      END 
, er.blocking_session_id DESC, er.logical_reads + er.reads DESC, er.session_id; 
END 

並創建一個SP。您可以使用

EXEC sp_who3

它會給你所有的用戶,你也可以在你需要編輯它運行的事務。

+0

謝謝。但我需要做到這一點反應,而不是主動。 – Bibbs

+0

檢查我的更新 –

+0

我運行代碼,在創建事務後放置斷點。該事務出現在sys.dm_tran_active_transactions中,鏈接到sys.dm_tran_session_transactions。但不是在你的查詢中(或者我有類似的查詢),並且我無法得到我在代碼中給出的事務名稱。思考我可能需要閱讀'Context_Info'來將數據推送到sys.dm_exec_sessions。 – Bibbs