LIST INDOUBT TRANSACTIONS コマンド
LIST INDOUBT TRANSACTIONS コマンドは、未確定トランザクションのリストを表示します。 未確定トランザクションのコミット、ロールバック、または破棄を対話式で実行できます。
- PREPARE フェーズ。このフェーズでは、 リソース・マネージャーがログ・ページをディスクに書き込んでいるので、 COMMIT または ROLLBACK プリミティブのどちらにも応答することができます。
- COMMIT (または ROLLBACK) フェーズ。このフェーズでは、 トランザクションの実際のコミットまたはロールバックが実行されます。
トランザクションを取り消すと、ヒューリスティックに完了した (ヒューリスティックにコミットあるいはロールバックされた) トランザクションに保持されていたリソースが解放されます。 未確定トランザクションは、準備済みのトランザクションのうち、 コミットまたはロールバックが実行されていないものです。
範囲
このコマンドは、 このコマンドが実行されたノード上にある未確定トランザクションのリストを戻します。
許可
なし
必要な接続
データベース。 暗黙的な接続が可能である場合には、 デフォルトのデータベースへの接続が確立されます。
コマンド構文
コマンド・パラメーター
- WITH PROMPTING
- 未確定トランザクションを処理することを指定します。 このパラメーターを指定すると、対話式ダイアログ・モードが開始され、
未確定トランザクションのコミット、ロールバック、または破棄が可能になります。 このパラメーターを指定しない場合、
未確定トランザクションは標準出力装置に書き込まれ、
対話式ダイアログ・モードは開始されません。対話式ダイアログ・モードでは次のことが可能です。
- すべての未確定トランザクションのリスト表示 (l を入力)
- 未確定トランザクション番号 x のリスト表示 (l の後に有効なトランザクション番号を入力)
- 終了 (q を入力)注: トランザクション番号は永続的ではないため、対話式セッションを終了して LIST INDOUBT TRANSACTIONS コマンドを再発行すると、トランザクションの番号が異なる場合があります。
- トランザクション番号 x をコミット (c の後に有効なトランザクション番号を入力)
- トランザクション番号 x をロールバック (r の後に有効なトランザクション番号を入力)
- トランザクション番号 x を破棄 (f の後に有効なトランザクション番号を入力)
- 対話式セッションのヘルプを表示 (h を入力)
コマンド文字と引数の間は、ブランク・スペースで区切る必要があります。
トランザクションのコミット、ロールバック、または破棄を実行する前に、 トランザクション・データが表示され、 アクションを確認するように求められます。
- TM
- 未確定トランザクションは、 データベースをトランザクション・マネージャー・データベースとして使用することを示します。
- RM
- 未確定トランザクションは、 データベースをリソース・マネージャーとして使用することを示します。 つまり、それがトランザクションに参加する複数のデータベースの 1 つであっても、 トランザクション・マネージャー・データベースではないことを示します。
使用上の注意
未確定トランザクションは、 未確定状態のままになっているグローバル・トランザクションです。 これは、2 フェーズ・コミット・プロトコルの第 1 フェーズ (つまり PREPARE フェーズ) を正常終了した後、トランザクション・マネージャー (TM)、 または少なくとも 1 つのリソース・マネージャー (RM) のいずれかが使用できなくなった場合に発生します。 RM がもう一度使用できるようになり、TM が RM からの未確定状況情報に関するログを統合できるようになるまで、RM はトランザクションの分岐をコミットするのかそれともロールバックするかがわかりません。 未確定トランザクションは MPP 環境でも発生する可能性があります。
現在接続されているデータベースに対して LIST INDOUBT TRANSACTIONS が発行された場合、コマンドは、そのデータベース内の未確定トランザクションに関する情報を返します。
コミットできるのは、状況が未確定 (i)、またはコミット肯定応答欠落 (m)、またはフェデレーテッド・コミット肯定応答欠落 (d) のトランザクションだけです。
ロールバックできるのは、状況が未確定 (i)、フェデレーテッド・ロールバック肯定応答欠落 (b)、または終了済み (e) のトランザクションだけです。
取り消しができるのは、状況がコミット済み (c)、ロールバック (r)、フェデレーテッド・コミット肯定応答欠落 (d)、またはフェデレーテッド・ロールバック肯定応答欠落 (b) のトランザクションだけです。
2 フェーズ・コミットのコミット・フェーズでは、 コーディネーター・ノードがコミットの肯定応答を待機します。 (ノード障害などの理由で) 応答しないノードが 1 つ以上ある場合、 そのトランザクションはコミット肯定応答欠落状態になります。
未確定トランザクション情報は、コマンドが出された時点でしか有効ではありません。 対話式ダイアログ・モードになると、外部アクティビティーが原因でトランザクション状況が変更される可能性があります。 ただし、サーバー上で状況が変化した場合に、クライアント上の出力はリフレッシュされません。 その場合、該当する状態にない未確定トランザクションを処理しようとすると、エラー・メッセージが表示されます。 最新の状況を取得するには、対話式セッションを終了し、 WITH PROMPTING オプションを指定して LIST INDOUBT TRANSACTIONS コマンドを再発行する必要があります。
$ db2 list indoubt transactions with prompting
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919165159 sequence_no: 0001 status: i
timestamp: 09/19/2013 16:51:59 auth_id: SMITH
log_full: n type: RM
xid: 53514C2000000017 00000000544D4442 00000000002F93DD A92F8C4FF3000000
0000BD
Enter in-doubt transaction command or 'q' to quit.
e.g. 'c 1' heuristically commits transaction 1.
c/r/f/l/q: c 1
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919165159 sequence_no: 0001 status: i
timestamp: 09/19/2013 16:51:59 auth_id: SMITH
log_full: n type: RM
xid: 53514C2000000017 00000000544D4442 00000000002F93DD A92F8C4FF3000000
0000BD
Do you want to heuristically COMMIT this in-doubt transaction ? (y/n) y
DB20000I "COMMIT INDOUBT TRANSACTION" completed successfully
c/r/f/l/q: c 5
DB20030E "5" is not a valid in-doubt transaction number.
c/r/f/l/q: l
In-doubt Transactions for Database SAMPLE
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919165159 sequence_no: 0001 status: c
timestamp: 09/19/2013 16:51:59 auth_id: SMITH
log_full: n type: RM
xid: 53514C2000000017 00000000544D4442 00000000002F93DD A92F8C4FF3000000
0000BD
c/r/f/l/q: q
以下のサンプル対話式セッションでは、リストされていないため、ユーザーは未確定トランザクションのロールバックに失敗し、有効な未確定トランザクションのロールバックに成功します。$ db2 list indoubt transactions with prompting
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919161043 sequence_no: 0001 status: i
timestamp: 09/19/2013 16:10:43 auth_id: JONES
log_full: n type: RM
xid: 53514C2000000017 00000000544D4442 00000000002F95FE B62F8C4FF3000000
0000C1
Enter in-doubt transaction command or 'q' to quit.
e.g. 'c 1' heuristically commits transaction 1.
c/r/f/l/q: r 5
DB20030E "5" is not a valid in-doubt transaction number.
c/r/f/l/q: l
In-doubt Transactions for Database SAMPLE
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919161043 sequence_no: 0001 status: i
timestamp: 09/19/2013 16:10:43 auth_id: JONES
log_full: n type: RM
xid: 53514C2000000017 00000000544D4442 00000000002F95FE B62F8C4FF3000000
0000C1
c/r/f/l/q: r 1
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919161043 sequence_no: 0001 status: i
timestamp: 09/19/2013 16:10:43 auth_id: JONES
log_full: n type: RM
xid: 53514C2000000017 00000000544D4442 00000000002F95FE B62F8C4FF3000000
0000C1
Do you want to heuristically ROLLBACK this in-doubt transaction ? (y/n) y
DB20000I "ROLLBACK INDOUBT TRANSACTION" completed successfully
c/r/f/l/q: l 1
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919161043 sequence_no: 0001 status: r
timestamp: 09/19/2013 16:10:43 auth_id: JONES
log_full: n type: RM
xid: 53514C2000000017 00000000544D4442 00000000002F95FE B62F8C4FF3000000
0000C1
c/r/f/l/q: f 1
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919161043 sequence_no: 0001 status: i
timestamp: 09/19/2013 16:10:43 auth_id: JONES
log_full: n type: RM
xid: 53514C2000000017 00000000544D4442 00000000002F95FE B62F8C4FF3000000
0000C1
Do you want to FORGET this in-doubt transaction ? (y/n) y
DB20000I "FORGET INDOUBT TRANSACTION" completed successfully
c/r/f/l/q: l 1
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919161043 sequence_no: 0001 status: f
timestamp: 09/19/2013 16:10:43 auth_id: JONES
log_full: n type: RM
xid: 53514C2000000017 00000000544D4442 00000000002F95FE B62F8C4FF3000000
0000C1
c/r/f/l/q: q
以下のサンプル対話式セッションでは、状況が変化した未確定トランザクションのロールバックをユーザーが試みます。$ db2 list indoubt transactions with prompting
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919175827 sequence_no: 0001 status: i
timestamp: 09/19/2013 13:58:35 auth_id: CASTELLE
log_full: n type: RM
xid: 00001D3400000008 0000000000010000 00000030
c/r/f/l/h/q: r 1
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919175827 sequence_no: 0001 status: i
timestamp: 09/19/2013 13:58:35 auth_id: SMITH
log_full: n type: RM
xid: 00001D3400000008 0000000000010000 00000030
Do you want to heuristically ROLLBACK this in-doubt transaction? (y/n) y
SQL1725N Could not perform the specified action because the status of the indoubt
transaction changed after you issued the LIST INDOUBT TRANSACTIONS command.
c/r/f/l/h/q: q
$ db2 list indoubt transactions with prompting
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919175827 sequence_no: 0001 status: m
timestamp: 09/19/2013 13:58:35 auth_id: CASTELLE
log_full: n type: RM
xid: 00001D3400000008 0000000000010000 00000030
c/r/f/l/h/q: c 1
1. originator: Db2 Enterprise Server Edition
appl_id: *LOCAL.DB2.130919175827 sequence_no: 0001 status: i
timestamp: 09/19/2013 13:58:35 auth_id: SMITH
log_full: n type: RM
xid: 00001D3400000008 0000000000010000 00000030
Do you want to heuristically COMMIT this in-doubt transaction? (y/n) y
DB20000I "COMMIT INDOUBT TRANSACTION" completed successfully
c/r/f/l/h/q: q