2012-05-22 246 views
9

Tengo una tabla llamada MyTable en el que he definido un disparador, así:Contexto de transacción en uso por otra sesión

CREATE TRIGGER dbo.trg_Ins_MyTable 
    ON dbo.MyTable 
    FOR INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    insert SomeLinkedSrv.Catalog.dbo.OtherTable 
     (MyTableId, IsProcessing, ModifiedOn) 
    values (-1, 0, GETUTCDATE()) 
END 
GO 

Siempre que intente insertar una fila en MyTable, me sale este mensaje de error:

Msg 3910, nivel 16, estado 2, línea 1 contexto de transacción en uso por otra sesión.

He SomeLinkedSrv adecuadamente definido como un servidor vinculado (por ejemplo, select * from SomeLinkedSrv.Catalog.dbo.OtherTable funciona muy bien).

¿Cómo puedo evitar el error e insertar con éxito el registro + ejecutar el disparador?

+0

¿Hay algún disparador en SomeLinkedSrv.Catalog.Dbo.OtherTable? – Gratzy

+0

@Gratzy - no, 'OtherTable' no tiene triggers definidos – GolfWolf

+0

¿Está sucediendo en una transacción explícita?¿DTC está encendido en ambos servidores? – Gratzy

Respuesta

14

Los servidores vinculados al bucle invertido no se pueden usar en una transacción distribuida si MARS está habilitado.

Los servidores enlazados al bucle invertido no se pueden usar en una transacción distribuida. Intentar una consulta distribuida contra un servidor vinculado de loopback desde dentro de una transacción distribuida provoca un error, como el error 3910: "[Microsoft] [Controlador ODBC SQL Server] [SQL Server] Contexto de transacción en uso por otra sesión." Esta restricción no se aplica cuando una instrucción INSERT ... EXECUTE, emitida por una conexión que no tiene conjuntos de resultados activos múltiples (MARS) habilitados, se ejecuta contra un servidor vinculado de loopback . Tenga en cuenta que la restricción todavía se aplica cuando MARS está habilitado en una conexión.

http://msdn.microsoft.com/en-us/library/ms188716(SQL.105).aspx

0

También me dio el mismo error en nuestra environemnt DEV, mover las bases de datos vinculadas a otra instancia de SQL resuelva el problema. En nuestro entorno de producción estas bases de datos ya están en instancias separadas

0

Lo resuelvo. Estaba usando el mismo servidor vinculado para llamar al segundo procedimiento y luego al procedimiento estaba usando el mismo servidor vinculado.

Es muy fácil, solo tenemos que conocer las restricciones de los servidores vinculados.

0

En mi caso, yo estaba usando SQL 2005 y obtuve "contexto de transacción en uso por otra sesión" al ejecutar Insert .... exec en un servidor vinculado. La solución para mí fue parchar desde SP2 build 3161 a SP3. SP2 acumulativo 5 se supone que arreglar.

https://support.microsoft.com/en-us/kb/947486

0

Cuando base de datos remota se encuentra en el mismo servidor, configurar el servidor vinculado sin especificar el servidor de base de datos IP/nombre de host y el puerto. Solo el nombre de la base de datos debería ser suficiente.

0

Lo resolví quitando el servidor vinculado utilizado en el procedimiento almacenado y luego llamé al procedimiento almacenado por el mismo servidor vinculado. No funcionó en entornos DEV.

Cuestiones relacionadas