2011-07-26 20 views
23

tengo esta transacción abierta, de acuerdo con DBCC OPENTRAN:cerrar/kill transacción

Oldest active transaction: 
SPID (server process ID) : 54 
UID (user ID)   : -1 
Name      : UPDATE 
LSN      : (4196:12146:1) 
Start time    : Jul 20 2011 12:44:23:590PM 
SID      : 0x01 

¿Hay una manera de acabar con él/rodar de nuevo?

Respuesta

49

Usted primero debe averiguar lo que estaba haciendo, de donde vino, y en su caso por cuánto tiempo más se podría esperar para funcionar:

SELECT 
    r.[session_id], 
    c.[client_net_address], 
    s.[host_name], 
    c.[connect_time], 
    [request_start_time] = s.[last_request_start_time], 
    [current_time] = CURRENT_TIMESTAMP, 
    r.[percent_complete], 
    [estimated_finish_time] = DATEADD 
     (
      MILLISECOND, 
      r.[estimated_completion_time], 
      CURRENT_TIMESTAMP 
     ), 
    current_command = SUBSTRING 
     (
      t.[text], 
      r.[statement_start_offset]/2, 
      COALESCE(NULLIF(r.[statement_end_offset], -1)/2, 2147483647) 
     ), 
    module = COALESCE(QUOTENAME(OBJECT_SCHEMA_NAME(t.[objectid], t.[dbid])) 
     + '.' + QUOTENAME(OBJECT_NAME(t.[objectid], t.[dbid])), '<ad hoc>'), 
    [status] = UPPER(s.[status]) 
FROM 
    sys.dm_exec_connections AS c 
INNER JOIN 
    sys.dm_exec_sessions AS s 
    ON c.session_id = s.session_id 
LEFT OUTER JOIN 
    sys.dm_exec_requests AS r 
    ON r.[session_id] = s.[session_id] 
OUTER APPLY 
    sys.dm_exec_sql_text(r.[sql_handle]) AS t 
WHERE 
    c.session_id = 54; 

Si está seguro de que se puede romper esta conexión puede utilizar:

KILL 54; 

Sólo ten en cuenta que dependiendo de lo que estaba haciendo la sesión podría dejar los datos y/o la aplicación que llama en un estado extraño.

+31

Otra manera fácil de ver todas las transacciones abiertas en un servidor es presionando 'CTRL + 1' en la ventana de consulta. Muestra todas las transacciones actuales. –

+7

@ SimonDugré Este atajo se puede cambiar en las opciones, si alguien cambió esto, no funcionará como se esperaba. En su lugar, podemos ejecutar el procedimiento almacenado 'sp_who', que en realidad recibe una llamada cuando presiona ctrl + 1. Gracias –

+0

@SibeeshVenu, tienes razón. Buena llamada. –