トランザクションをロールバックしたときに、一部の更新をコミットする方法です。
メッセージキューを利用します。
よくあるシナリオは、処理の経過をログとして残したい場合です。
データベース処理中の記録を専用のテーブルに残したい。
もし、処理中にエラーが発生し、ロールバックした場合にでも、記録は残しておきたい。
実装は次のようにします。
-
メッセージキューをインストールします
-
ログ保存用のメッセージキューを作成します。
-
トランザクション中のログを保存したい部分で、メッセージキューにメッセージを送信します。
-
定期的に、メッセージキューの内容をデータベースに保存します。
■メッセージキューの送受信用の拡張ストアドプロージャ
■メッセージキューのCOMオブジェクトを利用する方法
メッセージキュー送受信用のCOMオブジェクトは標準で提供されています。
これを使うには、sp_OACreate などのCOM用のストアドプロシージャを使います。
たぶん、sp_OACreate はシステム負荷が高く、ログには向かないと思われます。
■メッセージキュー MSMQ って ?
Windows が提供する非同期通信のための通信路です。
ローカルのコンピュータ上のプログラム間でも利用できますし、他のコンピュータとの通信にも利用できます。
メッセージを通信途中で失うことがないように保護する機能があります。
Windows 2000, XP, 2003 で利用することかができます。
※今回 XP_MSMQ を Windows XP 上でテストしました。