2017-08-30 63 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