SQLServerは、ログを取りたいのだが、最後にロールバックされると
すべて戻ってしまう。これでは、トラブルの原因を調べる際にとても不便だ。
オラクルでは、「PRAGMA AUTONOMOUS_TRANSACTION」句で
独立トランザクションが簡単に実現できる。
SQLServerでも、同じ事ができないか?
SQLServer2008だと可能である。手順は以下の通り
■ループバックを設定
USE MASTER
GO
EXEC sp_addlinkedserver @server = N'loopback',@srvproduct = N' ',@provider = N'SQLNCLI', @datasrc = @@SERVERNAME
GO
EXEC sp_serveroption loopback,N'remote proc transaction promotion','FALSE'
EXEC sp_serveroption loopback,N'RPC OUT','TRUE' -- Enable RPC to the given server.
GO
■使い方
EXECUTE [loopback].[DB名].[dbo].[独立して実行したいストアド名]
これで、最後に「ROLLBACK TRANSACTION 」が実行されたとしても
ロールバックされずに済む。
■欠点
パフォーマンスが良くない。
ただ、ループ内などで連続で呼んだりしなければ、実用に耐える。
気になる方は、実験してから利用することを勧める。
0 件のコメント:
コメントを投稿