none
Verificar se uma tabela esta em transação RRS feed

  • Pergunta

  • Pessoal, 

    Como faço para verificar se uma tabela ou quais tabelas estão em transação no SQL Server

    com esse select eu verifico se tem transação no banco , mas queria saber a tabela espeficicamente

    select * From master..sysProcesses where open_tran <> 0

    Obrigado

    Charbel

    terça-feira, 25 de fevereiro de 2014 16:28

Respostas

  • Charbel,

    Utilize a consulta abaixo, mas ao invés do nome da tabela vai exibir a consulta realizada:

    SELECT spid, QRY.[text] AS Consulta FROM sysprocesses AS P
    CROSS APPLY sys.dm_exec_sql_text(P.sql_handle) AS QRY
    WHERE P.open_tran <> 0

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Editado Durval RamosModerator terça-feira, 25 de fevereiro de 2014 17:07 inclusão do "open_tran"
    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 16:42
    terça-feira, 25 de fevereiro de 2014 17:06
    Moderador
  • Charbel,

    Veja se este código ajuda:

    With Monitor (SPID, Bloqueio, LastWaittype, Evento, Máquina, Programa, 
                  CPU, [I/O], Banco, Usuário, DiaHora, Início, [Plano Execução])
    As 
    (select 
    		er.session_id,
    		wt.blocking_session_id,
    		er.last_wait_type,
    		es.text,
    		ss.host_name,
    		ss.program_name,
    		er.cpu_time,
    		er.logical_reads,
    		er.database_id,
    		ss.login_name,
    		getdate(),
    		er.start_time,
    		ep.query_plan
    from sys.dm_exec_requests er left Join sys.dm_os_waiting_tasks wt 
                                  on er.session_id=wt.session_id 
                                 cross apply sys.dm_exec_sql_text(er.sql_handle) es  
                                 Left Outer Join sys.sysusers su 
                                  on su.uid=er.user_id 
                                 Left Outer Join sys.dm_exec_sessions ss 
                                  on ss.session_id=er.session_id 
                                 Cross apply sys.dm_exec_query_plan(plan_handle)ep)
    
    Select * From Monitor
    

    Aqui você vai encontrar o Código T-SQL  + Plano de Execução.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 16:42
    terça-feira, 25 de fevereiro de 2014 17:28
  • Deleted
    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 16:42
    terça-feira, 25 de fevereiro de 2014 17:54
  • Jose,

    Sinceramente não entendi o que você quis explicar em sua Citação.

    Você quiz dizer que uma possível tabela pode naquele momento não estar em uso, mas a mesmo pode estar fazendo parte de um processo em Sleeping ou Waiting?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 16:42
    sábado, 1 de março de 2014 14:12

Todas as Respostas

  • Charbel,

    Utilize a consulta abaixo, mas ao invés do nome da tabela vai exibir a consulta realizada:

    SELECT spid, QRY.[text] AS Consulta FROM sysprocesses AS P
    CROSS APPLY sys.dm_exec_sql_text(P.sql_handle) AS QRY
    WHERE P.open_tran <> 0

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Editado Durval RamosModerator terça-feira, 25 de fevereiro de 2014 17:07 inclusão do "open_tran"
    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 16:42
    terça-feira, 25 de fevereiro de 2014 17:06
    Moderador
  • Durval , obrigado pela resposta

    Vamos fazer diferente , eu sei o nome tabela que esta em transação, como eu faço antes de abri-la verificar se a mesma esta em transação no momento, pois seu eu tentar abri-la no momento da transação vai demora e o SQL retorna um erro, eu queria tratar esse "erro" verificando antes de abri-la se esta em transação e eu retorno uma mensagem amigável pro usuário de forma rápida.

    Obrigado

    Charbel

    terça-feira, 25 de fevereiro de 2014 17:25
  • Charbel,

    Veja se este código ajuda:

    With Monitor (SPID, Bloqueio, LastWaittype, Evento, Máquina, Programa, 
                  CPU, [I/O], Banco, Usuário, DiaHora, Início, [Plano Execução])
    As 
    (select 
    		er.session_id,
    		wt.blocking_session_id,
    		er.last_wait_type,
    		es.text,
    		ss.host_name,
    		ss.program_name,
    		er.cpu_time,
    		er.logical_reads,
    		er.database_id,
    		ss.login_name,
    		getdate(),
    		er.start_time,
    		ep.query_plan
    from sys.dm_exec_requests er left Join sys.dm_os_waiting_tasks wt 
                                  on er.session_id=wt.session_id 
                                 cross apply sys.dm_exec_sql_text(er.sql_handle) es  
                                 Left Outer Join sys.sysusers su 
                                  on su.uid=er.user_id 
                                 Left Outer Join sys.dm_exec_sessions ss 
                                  on ss.session_id=er.session_id 
                                 Cross apply sys.dm_exec_query_plan(plan_handle)ep)
    
    Select * From Monitor
    

    Aqui você vai encontrar o Código T-SQL  + Plano de Execução.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 16:42
    terça-feira, 25 de fevereiro de 2014 17:28
  • Deleted
    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 16:42
    terça-feira, 25 de fevereiro de 2014 17:54
  • Jose,

    Sinceramente não entendi o que você quis explicar em sua Citação.

    Você quiz dizer que uma possível tabela pode naquele momento não estar em uso, mas a mesmo pode estar fazendo parte de um processo em Sleeping ou Waiting?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 16:42
    sábado, 1 de março de 2014 14:12