このドキュメントでは、次のトピックについて説明します。
BT コマンドは 2 つの目的のために使用されます。
論理トランザクションのバックアウト(コマンドオプション「S」の指定なし)。
サブトランザクションのバックアウト(コマンドオプション「S」の指定あり)。
BT コマンドを使用できるのは、ET ロジックユーザーだけです。
BT コマンドは、ユーザーの現在の論理トランザクション内で行われた全データベース更新処理(追加、削除、変更)を取り消す際に使用します。これは、プログラムエラーが発生した際、またはトランザクション全体を正しく完了できないと判断したときに、必要になることがあります。
コマンドオプション「H」を使用すると、ユーザーのすべての排他的ロックが共有ロックにダウングレードされます。これを使用しないと、マルチフェッチオプションなしの場合は、ユーザーがホールドしているすべてのレコードが解放され、マルチフェッチオプションありの場合は、ISN バッファで指定されているすべてのレコードが解放されます。
Adabas は、BT コマンド処理の最後に内部 ET コマンドを発行します。これにより、現在のデータプロテクションブロックが Adabas WORK ファイルおよびデータプロテクションログに物理的に書き込まれ、また、処理中にホールドされた全レコードは解放されます。
BT コマンドは、すべてのサブトランザクション中に実行された、すべてのデータベース変更を削除するために使用されます。これは、コントロールブロックのコマンド ID フィールドで指定されたセーブポイント ID を使用して、セーブポイントから開始されます。
BT コマンドにコマンドオプション「S」が指定されていますが、現在の Adabas ユーザーセッションではサブトランザクションが有効になっていません。レスポンス 22 が返され、アディション 2 フィールドの最初の 2 バイトが 19 に設定されます。
BT サブトランザクションに指定された CID は、現在のトランザクションに属するセーブポイント ID ではありません。レスポンス 21 が返され、アディション 2 フィールドの最初の 2 バイトが 10 に設定されます。
BT サブトランザクションに指定された CID は、BT サブトランザクションにより存在しなくなったセーブポイント ID です。次の図を参照してください。
この場合、問題のあるサブトランザクションバックアウトまでのアクションがロールバックされます。このサブトランザクションバックアウトにより、データベースの内容は ET-S=>CID=1 の発行時と同じになります。これは ET-S=>CID=2 が発行されたときのデータベースコンテンツではないので、レスポンス 2 が返され、アディション 2 フィールドの最初の 2 バイトが 5 に設定されます。
Field | フォーマット | |
---|---|---|
コールタイプ | B | F/U |
予約(内部使用) | -/- | |
コマンドコード | A | F/U |
コマンド ID | B | F/A |
File Number | B | F/U (1) |
Response Code | B | F/A (1) |
ISN バッファ長(ACB のみ) | B | F/U |
コマンドオプション 1 | A | F/U |
コマンドオプション 3(ACBX のみ) | A | F/U |
アディション 2 | A、B | -/A |
コマンドタイム | B | -/A |
ユーザーエリア | F/U |
バッファ | |
---|---|
フォーマットバッファ | –/– |
レコードバッファ | –/– |
サーチバッファ | –/– |
バリューバッファ | –/– |
ISN バッファ | F/U |
- フォーマット:
A 英数字 B 2 進数 - x/y Adabasコール前/後 - xとyは、値を取ることができます。
A Adabas によって設定 F ユーザーによって設定 U Adabas コール後も変更なし - 使用しません (1)このフィールドの意味は、Call タイプに指定された値によって異なります。詳細については、「Adabas の呼び出し」の「コントロールブロック」を参照してください。
- コマンドコード
BT
- コマンド ID
Adabas は、バックアウトされた処理のトランザクションシーケンス番号をこのフィールドに返します。この番号はバイナリ形式です。ユーザーが ET 状態である場合、0 が返ります。
- Response Code
このフィールドには、コマンドに対するレスポンスコードが返されます。レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。
- ISN バッファ長(ACB のみ)
ISN バッファ長(バイト単位)を示します。このバッファはマルチフェッチ機能とともに使用します。指定する値は 4 + (ISN数 * 8) 以上でなければならず、それより小さい場合は、マルチフェッチ機能が無視されます。
- コマンドオプション 1
ユーザーがこのフィールドに「S」を入力すると、サブトランザクションのバックアウトが実行されます。入力しないと、論理トランザクションのバックアウトが実行されます。このフィールドに M を指定すると、マルチフェッチ機能を呼び出します。マルチフェッチ機能の詳細については、「プログラミングの考察」の「マルチフェッチ機能の使用」を参照してください。
- コマンドオプション 3(ACBX のみ)
このフィールドが[H]に設定されている場合、すべてのロックされたレコードはホールド状態を維持しますが、排他的ロックは共有ロックにダウングレードされます。
このフィールドが空白に設定されている場合、現在ロックされているすべてのレコードがホールド状態から解放されます。
- アディション 2
このフィールドには、一部のレスポンスコードについて詳細情報が返されます。詳細については、『メッセージおよびコードマニュアル』を参照してください。
このバッファには、ホールド状態から解放されるレコードの ISN とファイル番号が含まれます。このフィールドは、マルチフェッチ機能と組み合わせてのみ使用されます。すべてのレコードをホールド状態のままにする場合、このバッファの先頭 4 バイトをゼロに設定する必要があります。
ISN バッファの詳細なレイアウトについては、「プログラミングの考慮事項」の「マルチフェッチ機能の使用(トランザクション制御)」を参照してください。
File Number
BT コマンドを "M" オプション付きで使用したときにエラーレスポンスが生成された場合、ISN バッファの無効なファイル番号/ISN エントリに指定されたファイル番号がこのフィールドに返されます。
ISN
BT コマンドを "M" オプション付きで使用したときにエラーレスポンスが生成された場合、ISN バッファの無効なファイル番号/ISN エントリに指定された ISN がこのフィールドに返されます。
ISN Buffer Length
"M" オプションを使用している場合は、このフィールドに ISN バッファ長が含まれている必要があります。ISN バッファにファイル番号/ISN エントリが含まれている場合は、ISN バッファ長を 4 + 8*n バイトにする必要があります。それ以外の場合は、レスポンスコード
53 が返されます。
Command Option 1
このフィールドが空白のときは、現トランザクションでホールド状態のレコードがすべて解放されます。このフィールドが M のときは、ISN バッファに指定された ISN だけがホールド状態から解放されます。
Additions 2
"M" オプションを使用しているときに、ISN バッファに無効なファイル番号/ISN エントリが含まれている場合は、無効なエントリのインデックスがこのフィールドに返されます(先頭エントリのインデックスは 0)。
BT コマンドの "M" オプションを使用している場合は、現在のトランザクションによってホールドされているレコードのサブセットを解放できます。解放するレコードは ISN バッファに指定します。
ISN バッファの先頭 4 バイトは、ISN バッファに続く 8 バイト要素の数を指定します。この値が 0 の場合は、レコードがホールド状態から解放されることはありません。各 8 バイト要素は、ホールド状態から解放されるレコードを指定します。各エントリの先頭 4 バイトにはファイル番号が含まれ、次の 4 バイトには ISN が含まれています。ファイル番号と ISN はともに、符号なし整数として指定する必要があります。
ファイル番号/ISN がこのユーザーに対してホールドされていない場合は、ISN バッファの処理が無効なエントリで終了し、レスポンス 144 が返されます。コントロールブロックのアディション 2 フィールドは、無効なエントリのインデックスに設定されます(先頭エントリのインデックスは 0)。コントロールブロックのファイル番号フィールドと ISN フィールドはそれぞれ、無効なエントリのファイル番号と ISN に設定されます。
ISN バッファ長が ISN バッファに必要なスペースより小さい値にセットされている場合は、"M" オプションが無視され、すべての ISN がホールド状態から解放され、レスポンス 53 が返されます。