Вопрос по – Контекст транзакции используется другим сеансом

12

У меня есть столMyTable на котором я определил триггер, вот так:

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

Всякий раз, когда я пытаюсь вставить строку вMyTableЯ получаю это сообщение об ошибке:

Msg 3910, Level 16, State 2, Line 1 Transaction context in use by another session.

я имеюSomeLinkedSrv правильно определен как связанный сервер (например,select * from SomeLinkedSrv.Catalog.dbo.OtherTable работает просто отлично).

Как можно избежать ошибки и успешно вставить запись + выполнить триггер?

@Gratzy - нет,OtherTable триггеры не определены Cristian Lupascu
случается также, чтобы быть триггером на SomeLinkedSrv.Catalog.Dbo.OtherTable? Gratzy
Вы пытались реализовать это как триггер вместо? Какой тип транзакции вы используете для оригинальной вставки? Рассматривали ли вы запись этого локально и использование фонового процесса для обновления удаленного сервера (таким образом, удаленный сервер не усложняет первичную транзакцию, и первичной транзакции не нужно ждать удаленной операции). Aaron Bertrand
@ На данный момент я испытываю это на своем компьютере разработчика; Я подключен к локальному экземпляру SQLSserver, и связанный сервер указывает на этот экземпляр. MSDTC работает. Cristian Lupascu
Это происходит в явной транзакции? Включен ли DTC на обоих серверах? Gratzy

Ваш Ответ

6   ответов
0

настройте связанный сервер без указания ip / hostname и порта сервера базы данных. Достаточно только имени базы данных.

1

Я использовал тот же связанный сервер для вызова второй процедуры, а затем в процедуру, которую я использовал на том же связанном сервере.

Это очень просто, только мы должны знать ограничения связанных серверов.

0

используемый другим сеансом». при запуске Insert .... exec через связанный сервер. Исправление для меня было патч от SP2 build 3161 до SP3. SP2 кумулятивный 5 должен исправить, хотя.

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

0

удалив связанный сервер, используемый в хранимой процедуре, а затем вызвал хранимую процедуру тем же связанным сервером. Он не работал в среде DEV.

17

еделенной транзакции, если включен MARS.

Loopback linked servers cannot be used in a distributed transaction. Trying a distributed query against a loopback linked server from within a distributed transaction causes an error, such as error 3910: "[Microsoft][ODBC SQL Server Driver][SQL Server]Transaction context in use by another session." This restriction does not apply when an INSERT...EXECUTE statement, issued by a connection that does not have multiple active result sets (MARS) enabled, executes against a loopback linked server. Note that the restriction still applies when MARS is enabled on a connection.

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

0

перенося связанные базы данных в другой экземпляр sql, решил проблему. В нашей производственной среде эти базы данных уже находятся в отдельных экземплярах.

Похожие вопросы