2011年4月23日土曜日

SQLServerで独立トランザクション

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 件のコメント:

コメントを投稿