BT コマンドでは、ET ロジックユーザーのデータベース更新を取り消します。
このドキュメントでは、次のトピックについて説明します。
BT コマンドは、ユーザーの現在の論理トランザクション内で行われた全データベース更新処理(追加、削除、変更)を取り消すときに使用します。 この機能は、プログラムエラーまたはトランザクションを正常に処理できない場合に必要となります。 BT コマンドは、ET ロジックユーザーのみが使用できます。
Adabas は、BT コマンド処理の最後に内部 ET コマンドを発行します。 これにより、現在のデータプロテクションブロックが Adabas ワークおよびデータプロテクションログに物理的に書き込まれ、トランザクション処理中にホールドされた全レコードが解放されます。
コマンドオプション 1 フィールドのオプション("P")により、ISN バッファ内の全レコードをホールド状態に保ちます。 マルチフェッチ("M")オプションは、現在のトランザクションによってホールドされているレコードのサブセットを解放します。 ホールド状態から解放されたレコードを ISN バッファに指定します。 バッファ内の最初のフルワードは次の 8 バイトのエレメントの数を指定します。
コマンドオプション 2 フィールドのオプション("F")により、特定のファイルをバックアウト処理から除外できます。 指定したファイルに対する更新は取り消されません。 ただし、このユーザーがホールドしていたファイル内のレコードはすべてホールド状態から解放されます。
このセクションでは、BT コマンドの ACB インターフェイスダイレクトコールについて説明します。 本書には、次のトピックが含まれています。
ダイレクトコールが開始される前に、未使用の ACB フィールドにバイナリの 0 を設定することをお勧めします。
| フィールド | 位置 | フォーマット | Adabas コール前 | Adabas コール後 | 
|---|---|---|---|---|
| 1~2 | -- | -- | -- | |
| コマンドコード | 3~4 | 英数字 | F | U | 
| コマンド ID | 5~8 | バイナリ | -- | A | 
| ファイル番号 * | 9~10 | バイナリ | F * | U | 
| レスポンスコード | 11~12 | バイナリ | -- | A | 
| 13~16 | -- | -- | -- | |
| ISN 下限 | 17~20 | バイナリ | F | U | 
| 21‐32 | -- | -- | -- | |
| ISN バッファ長 ** | 33~34 | バイナリ | F ** | U | 
| コマンドオプション 1 | 35 | 英数字 | F | U | 
| コマンドオプション 2 | 36 | 英数字 | F | U | 
| 37~72 | -- | -- | -- | |
| コマンドタイム | 73~76 | バイナリ | -- | A | 
| ユーザーエリア | 77~80 | -- | -- | U | 
| バッファ | Adabas コール前 | Adabas コール後 | 
|---|---|---|
| ISN ** | F | U | 
上記の意味は次に示すとおりです。
| F | Adabas コール前にユーザーが入力するフィールド | 
| A | Adabas により入力されるフィールド | 
| U | Adabas コール後も変化なし | 
| * | コマンドオプション 2 が指定された場合にのみ必要 | 
| ** | コマンドオプション 1 が指定された場合にのみ必要 | 
| -- | 未使用 | 
ダイレクトコールが開始される前に、未使用の ACB フィールドにバイナリの 0 を設定することをお勧めします。
BT
Adabas は、バックアウトされたトランザクションのトランザクションシーケンス番号をこのフィールドに返します。 この番号はバイナリ形式です。
あるファイルをバックアウト処理から除外する場合は、除外するファイルの番号をこのフィールドに指定し、オプション F をコマンドオプション 2 フィールドに指定します。
除外するファイルがない(オプション F が指定されていない)場合、このフィールドは無視されます。
注意:
2 バイトファイル番号およびデータベース ID を使用する場合は、コントロールブロックの先頭バイトに X'30'
                        を入力しなければなりません。
            
Adabas は、コマンドのレスポンスコードをこのフィールドに返します。 レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。 BT コマンドによってゼロ以外のレスポンスコードが返された場合、Adabas コントロールブロックの下位 2 バイト、バイト 45~48(アディション 2 フィールド)にレスポンスコードの意味を正確に定義したサブコードが含まれていることがあります。 レスポンスコードとサブコードについては、『Adabas メッセージおよびコード』を参照してください。
ISN ホールドオプションを指定した場合、6 バイトの ISN バッファエントリのカウントをこのフィールドに入れる必要があります。
ISN バッファ長(バイト単位)。 この長さは、ISN ホールドオプションまたはマルチフェッチオプションを使用するときのみ必要です(コマンドオプション 1 フィールドの説明を参照)。 マルチフェッチ機能を指定する場合は、この値を 32 KB より小さくする必要があります。
注意:
ADARUN PREFETCH=YES でマルチフェッチを設定すると、ET/BT コマンドに対して
                        "P" オプションが自動的に使われます(他のすべてのコマンドに対しては
                        "M" オプションが自動的に使われます)。
                        このフィールドを使用して、このオプション設定を変更することはできません。
            
デフォルトでは、BT コマンドを実行すると、Adabas はユーザーが現在ホールドしている全 ISN を解放します。
| オプション | 説明 | 
|---|---|
| P | これらの ISN のすべてまたは一部をホールド状態に戻します。 ホールド状態に戻る ISN は ISN バッファに指定する必要があります。また、ISN カウントは ISN 下限フィールドに指定する必要があります。 | 
| M(コマンドレベルのマルチフェッチ) | 現在のトランザクションによってホールドされているすべての ISN の代わりにサブセットのみを開放します。 ホールド状態から解放するレコードは ISN バッファに指定します。バッファ内の最初のフルワードには、後続の 8 バイトのエレメントの数を指定します。 | 
| オプション | 説明 | 
|---|---|
| F(除外ファイル) | ファイル番号フィールドに指定された単一ファイルをバックアウト処理から除外します。 指定されたファイルの更新はバックアウトされません。 ただし、ホールド状態のファイルのレコードは解放されます。 | 
| 空白 | 全ファイルをバックアウト処理の対象とします。 | 
現在のユーザートランザクションをバックアウトします。 全ファイルにバックアウト処理を行います。
| コマンドコード | BT | |
|---|---|---|
| コマンドオプション 1 | 空白 | ホールドする ISN はありません。 | 
| コマンドオプション 2 | b | ファイル除外オプションを使用しない | 
現在のユーザートランザクションをバックアウトします。 ファイル 4 に行った更新は、バックアウト処理に含まれません。
| コマンドコード | BT | |
|---|---|---|
| ファイル番号 | 4 | ファイル 4 はバックアウト処理から除外します。 | 
| コマンドオプション 2 | F | ファイル除外オプションを使用します。 | 
現在のユーザートランザクションをバックアウトします。 ファイル 6 の ISN 1、2、3 をホールド状態にします。
| コマンドコード | BT | |
|---|---|---|
| コマンドオプション 1 | P | ISN(複数も可)をホールド状態にします。 | 
| コマンドオプション 2 | b | ファイル除外オプションを使用しない | 
| ISN バッファ | |
|---|---|
| 000600000001 | ISN 1 | 
| 000600000002 | ISN 2 | 
| 000600000003 | ISN 2 | 
このセクションでは、BT コマンドの ACBX インターフェイスダイレクトコールについて説明します。 本書には、次のトピックが含まれています。
ダイレクトコールが開始される前に、未使用の ACBX フィールドにバイナリの 0 を設定することをお勧めします。
| フィールド | 位置 | フォーマット | Adabas コール前 | Adabas コール後 | 
|---|---|---|---|---|
| 1~2 | --- | --- | --- | |
| バージョンインジケータ | 3~4 | バイナリ | F | U | 
| 5~6 | バイナリ | --- | --- | |
| コマンドコード | 7~8 | 英数字 | F | U | 
| 9~10 | --- | --- | --- | |
| レスポンスコード | 11~12 | バイナリ | --- | A | 
| コマンド ID | 13~16 | 英数字/バイナリ | --- | A | 
| データベース ID* | 17~20 | 数値 | F* | U | 
| ファイル番号 * | 21~24 | 数値 | F* | U | 
| 25~36 | --- | --- | --- | |
| ISN 下限 | 37~40 | バイナリ | F | U | 
| 45~48 | --- | --- | --- | |
| コマンドオプション 1 | 49 | 英数字 | F | U | 
| コマンドオプション 2 | 50 | 英数字 | F | U | 
| 51~114 | --- | --- | --- | |
| エラーサブコード | 115~116 | バイナリ | --- | A | 
| 117~144 | --- | --- | --- | |
| コマンドタイム | 145~152 | バイナリ | --- | A | 
| ユーザーエリア | 153~168 | 該当なし | --- | U | 
| 169~193 | --- | --- | --- | 
| ABD とバッファ | Adabas コール前 | Adabas コール後 | 
|---|---|---|
| ISN ** | F | U | 
上記の意味は次に示すとおりです。
| F | Adabas コール前にユーザーが入力するフィールド | 
| A | Adabas により入力されるフィールド | 
| U | Adabas コール後も変化なし | 
| * | コマンドオプション 2 が指定された場合にのみ必要 | 
| ** | コマンドオプション 1 が指定された場合にのみ必要 | 
| --- | 未使用 | 
ダイレクトコールが開始される前に、未使用の ACBX フィールドにバイナリの 0 を設定することをお勧めします。
F2
BT
Adabas はこのフィールドに、コマンドのレスポンスコードを返します。 レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。 ゼロ以外のレスポンスコードは、エラーサブコード(ACBXERRC)フィールドにサブコードを伴う場合があります。詳細は、Adabas メッセージおよびコード のドキュメントを参照してください。
Adabas は、バックアウトされたトランザクションのトランザクションシーケンス番号をこのフィールドに返します。 この番号はバイナリ形式です。
このフィールドは、バックアウト処理から除外するファイルのデータベース ID を指定するのに使用します。 Adabas コールはこのデータベースに送られます。
このフィールドは 4 バイトのバイナリフィールドですが、現時点では 2 バイトのデータベース ID のみがサポートされています。 したがって、データベース ID はフィールドの下位部分(右端のバイト)に指定し、その前にバイナリの 0 を付加する必要があります。
このフィールドがバイナリの 0 に設定されている場合は、Adabas API は DDCARD 入力データで指定された ADARUN カードのデータベース ID か、リンクされているかリンクルーチンによりロードされた LNKGBLS モジュールで指定されているデフォルトのデータベース ID 値のいずれかを使用します。
このフィールドは、バックアウト処理から除外するファイルの番号を指定するのに使用します(オプション F をコマンドオプション 2 フィールドに指定する必要があります)。
このフィールドは 4 バイトのバイナリフィールドですが、ファイル番号はフィールドの下位部分(右端のバイト)に指定し、その前にバイナリの 0 を付加する必要があります。
ファイルが除外されない(オプション F をコマンドオプション 2 に指定しない)場合、ファイル番号フィールドに指定した値は無視されます。
ISN ホールドオプションを指定した場合、6 バイトの ISN バッファエントリのカウントをこのフィールドに入れる必要があります。
ACBXISL フィールドは、8 バイトの ACBXISLG フィールドに埋め込まれた 4 バイトのバイナリフィールドで、まだ使用されていません。 ACBXISLG フィールドの上位部分には、バイナリの 0 を設定します。
デフォルトでは、BT コマンドを実行すると、Adabas はユーザーが現在ホールドしている全 ISN を解放します。
| オプション | 説明 | 
|---|---|
| P | これらの ISN のすべてまたは一部をホールド状態に戻します。 ホールド状態に戻る ISN は ISN バッファに指定する必要があります。また、ISN カウントは ISN 下限フィールドに指定する必要があります。 | 
| M(コマンドレベルのマルチフェッチ) | 現在のトランザクションによってホールドされているすべての ISN の代わりにサブセットのみを開放します。 ホールド状態から解放されたレコードを ISN バッファに指定します。 バッファ内の最初のフルワードは次の 8 バイトのエレメントの数を指定します。 | 
| オプション | 説明 | 
|---|---|
| F(除外ファイル) | ファイル番号フィールドに指定された単一ファイルをバックアウト処理から除外します。 指定されたファイルの更新はバックアウトされません。 ただし、ホールド状態のファイルのレコードは解放されます。 | 
| 空白 | 全ファイルをバックアウト処理の対象とします。 | 
コマンドがゼロ以外のレスポンスコードを返したときは、このフィールドにレスポンスコードの正確な意味を定義したサブコードが含まれます。 レスポンスコードとサブコードについては、『Adabas メッセージおよびコード』を参照してください。
コマンドオプション 1 フィールドに "P" を設定した場合、レコードをホールド状態に戻す各 ISN を 6 バイトバイナリのエントリとして指定する必要があります。この 6 バイトの内容は、次のとおりです。
先頭 2 バイトには、レコードが存在するファイルの番号を指定します。
残り 4 バイトには、ホールド状態にするレコードの ISN を指定します。
コマンドオプション 1 フィールドに "M" をセットした場合、現在のトランザクションによってホールドされているレコードのサブセットだけが解放されます。 ISN バッファ内の最初のフルワードは、8 バイトのエレメントの数になります。後続の各 8 バイトグループは、ホールド状態から解放されるレコードのファイル番号/ISN ID であると解釈されます(「BT/ET のマルチフェッチ処理」参照)。