挿入/更新/削除が行われたときに起動する挿入トリガーをテーブルに作成しました。トリガーは、それを起動したクエリに関する情報を送信することになっていますが、起動するたびに、以下のエラーが発生します。
OLE DB provider "SQLNCLI11" for linked server "TMP-DBA-DB" returned message "The transaction manager has disabled its support for remote/network transactions.".
Msg 7391, Level 16, State 2, Procedure AuditlDealerDebitAuditTrailTEST, Line 22
The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "TMP-DBA-DB" was unable to begin a distributed transaction.
これが私のトリガークエリです:
create trigger dbo.AuditlDealerDebitAuditTrailTEST
on [dbo].[lDealerDebitAuditTrailTEST]
after UPDATE, INSERT, DELETE
as
declare @TableName varchar(20), @User varchar(20), @PCNo varchar(20), @server nvarchar(30), @Database varchar(30),
@table varchar(30),@activity varchar(20), @date datetime;
begin
set @TableName = 'lDealerDebitAuditTrailTEST'
if exists(SELECT * from inserted) and exists (SELECT * from deleted)
begin
SET @User = SYSTEM_USER;
set @PCNo = Host_NAME();
set @server = @@SERVERNAME;
set @Database = DB_NAME();
Set @table = @TableName;
SET @activity = 'UPDATE';
set @date = GETDATE();
INSERT into [TMP-DBA-DB].[Josel_TestDB].[dbo].[audit](ExecutedBy, PCNo, "Server", "Database", "Table", Activity, ExecutedOn)
values (@User, @PCNo, @server, @Database, @table, @Activity, @date);
end
If exists (Select * from inserted) and not exists(Select * from deleted)
begin
SET @Activity = 'INSERT';
SET @User = SYSTEM_USER;
set @PCNo = Host_NAME();
set @server = @@SERVERNAME;
set @Database = DB_NAME();
Set @table = @TableName;
set @date = GETDATE();
INSERT into [TMP-DBA-DB].[Josel_TestDB].dbo.audit(ExecutedBy, PCNo, "Server", "Database", "Table", Activity, ExecutedOn)
values (@User, @PCNo, @server, @Database, @table, @Activity, @date);
end
If exists(select * from deleted) and not exists(Select * from inserted)
begin
SET @activity = 'DELETE';
SET @User = SYSTEM_USER;
set @PCNo = Host_NAME();
set @server = @@SERVERNAME;
set @Database = DB_NAME();
Set @table = @TableName;
set @date = GETDATE();
INSERT into [TMP-DBA-DB].[Josel_TestDB].dbo.audit(ExecutedBy, PCNo, "Server", "Database", "Table", Activity, ExecutedOn)
values (@User, @PCNo, @server, @Database, @table, @Activity, @date);
end
end
GO
ディストリビュータートランザクションコーディネーター を設定してみましたか?
分散トランザクションは、使用しているSQL Serverのインスタンスの外部のソースからデータを取得するためにSQL Serverを必要とするトランザクションです(これには、リンクサーバーなどの使用が最も頻繁に伴います。
たとえば、分散トランザクションの例は次のとおりです。
INSERT MyTable (Col1, Col2, Col3....)
SELECT Col1, Col2, Col3 ... FROM OPENQUERY(MyLinkedServer, 'SELECT Col1, Col2, Col3 ...
FROM RemoteTable
WHERE predicate1 = Condition1')
INNER JOIN Table2 ON Table2.ColX = Col1
分散トランザクションコーディネーターを設定するには、次の手順に従います。
[適用]をクリックすると、サービスの再起動を求められ、yes
と言います。
この記事も読む価値があります: