2017-11-24 27 views
0

ロールバックが実行されている間にいくつかのテーブルの行を保存する方法はありますか?エラーの場合にシステムがロールバックする状況がありますが、 1つのテーブルの行を保存する必要があり、他のテーブルはロールバックされる必要があります。DB2がロールバックからデータベースに単一のテーブルを保存する

+1

セーブポイントをチェックする - 彼らは助けになるかもしれない... – MichaelTiefenbacher

答えて

1

あなたはCOBOLでタグ付けされているので、プログラムを使用して挿入/更新を行っていると仮定しています。

ロールバックが発生した後、ロールバックしたくないテーブルをもう一度挿入し直してください。

あなたがリクエストしていることをする方法はないと思います。ロールバックは常に作業単位をロールバックします。そのテーブルをロールバックしないようにする唯一の方法は、最初に挿入または更新を行い、その作業ユニットをコミットした後、ロールバックできるものをすべて実行することです。

それとも、ロールバック状況であれば、あなたは、私の最初の提案を使用することができ、プログラムだけで再挿入/あなたがグローバル一時テーブルを使用する能力を持っている場合は

0

は(作成したいものを更新していますグローバル・テンポラリ・テーブル、またはグローバル・テンポラリ・テーブルが宣言されている場合)は、ロールバック時に行を保持するという特性で定義できます。

この "ロールバック保存行"は、診断やその他の目的に役立ちますが、再起動可能なバッチ状況を処理し、「置換」オプションの結果を監視する必要があります。

一般に、いくつかの行を保存する必要がある場合、他のトランザクションがロールバックされる場合、トランザクション設計に欠陥があることが示唆されます。別のトランザクション(別の作業単位)セーブポイント。

0

これは、自律型トランザクションを使用して行うことができます。これはストアドプロシージャの定義に入れた機能です。同じ作業単位で自律的なプロシージャを呼び出すだけで、ロールバックの範囲が分かれます。

この機能の例は、ロールバックがあっても、メッセージをテーブルに記録するappenderというコンポーネント内のlog4db2で見ることができます。多かれ少なかれあなたが必要なもの:https://github.com/angoca/log4db2/blob/master/src/main/sql-pl/04-Appenders.sql#L73

関連する問題