CANCEL ROLLBACK ON TABLEコマンドは、Teradataシステムの回復、またはオンライン ユーザー トランザクション アボートの一環として現在ロールバック中のテーブルに対するロールバック処理をキャンセルします。
構文
CANCEL ROLLBACK ON TABLE table_id [,...]
構文要素
- table_id
- ロールバックがキャンセルされるテーブルの識別子。これは16進形式で指定します。
使用上の注意
テーブルに対してCANCEL ROLLBACK ON TABLEコマンドを実行すると、データベースは、関連したテーブル ヘッダーを無効とマークします。トランザクションの中の指定したテーブルに関するロールバックのみがキャンセルされます。トランザクションの残りの部分のロールバック処理は影響を受けません。
- テーブルの復元よりテーブルのロールバックに長い時間がかかる可能性が高い場合。
- テーブルの重要性が低い場合(一時テーブルなど)。
テーブルに対するロールバックをキャンセルした後は、そのテーブルに対してDELETE ALL操作を実行することを強く推奨します。
テーブルに対するロールバックの一般的なプロセスは、次のとおりです。
- ロールバックに長い時間がかかっている。
- ロールバックよりも短い時間で復元できる大きなテーブルを見つける。
- LIST ROLLBACK TABLESを実行して、どのテーブルがロールバック中であるかを調べる。
- CANCEL ROLLBACK ON TABLEを実行する。ロールバックをキャンセルできるのは、手順3の結果表示されたロールバック リストにIDが表示されているテーブルのみです。
- DELETE ALLを実行してテーブルを復元する。
テーブルを即時に復元しないのは、そのテーブルが不要な場合のみです。DELETE ALLは即時に実行する必要があります。CANCEL ROLLBACK ON TABLEを実行する前に、無効なテーブルをどのように扱うかを決めておく必要があります。また、その処理を即時に行なって、Teradataシステムをオンラインに復帰させる必要があります。
- テーブルを削除して再作成する場合。
- アーカイブ バックアップからテーブルを復元する場合。
- テーブルに関連したDLLが失われないようにするために、そのテーブルに対してDELETE ALL操作を実行する場合。DELETE ALLを実行すると、部分的にロールバックされた行が削除され、テーブルが使用できる状態になります。
rcvmanagerセッションでCANCEL ROLLBACK ON TABLEコマンドを初めて指定する場合は、ユーザーDBCのパスワードの入力を求めるプロンプトが表示されます。このコマンドはどのユーザーでも実行できますが、DBCパスワードが必要です。これは、この機能の使用を制限するための組み込み保護手段です。
このコマンドは、瞬時に完了しません。このコマンドの効果が生じるのは、コマンドで指定したすべてのテーブルの一時ジャーナル(TJ)行の読み取りが完了してからです。
テーブルに対するトランザクション ロールバックの一部が完了している場合でも、テーブルに対するロールバックをキャンセルすることができます。
ロールバック中に有効な優先順位レベルは、ロールバックのアボートにも適用されます。
- CANCEL ROLLBACK ON TABLEコマンドで指定したtable_idは、ロールバック テーブル リストに存在している必要があります。つまり、テーブルにロールバックのマークが付いている必要があります。
ロールバックをキャンセルするテーブルは、いくつでも指定できます。rcvmanagerは各table_idを検証します。これらのテーブルの一部がロールバック リストに存在しない場合、rcvmanagerは、存在しないテーブルについてエラー メッセージを報告し、すべての有効なテーブルに対するロールバックのキャンセルの確認を1回求めます。次の例を参照してください。
例1: 有効なコマンド
table-idが6712のテーブルが存在するとします。
> CANCEL ROLLBACK ON TABLE 0:6712; Type the password for user DBC or press the Enter key to return: > dbc Rollback will be cancelled for: 0000:6712 "EmployeeDB"."LogTable" Confirm y/n ? > y
rcvmanagerは、LogTableに対するロールバックをキャンセルします。
例2: 無効なコマンド
Table does not exist
table_idが6708のテーブルがロールバック リストに存在しないとします。
> CANCEL ROLLBACK ON TABLE 0:6708; Table 0:6708 does not exist in rollback list. Enter command, "QUIT;" or "HELP;" :
rcvmanagerは、テーブルが存在しないためコマンドを無視しました。
参照整合性制約があるテーブルに対するロールバックをキャンセルすることはできません。
すべての参照されるテーブルおよび参照テーブルのtable_idには、LIST ROLLBACK TABLESコマンドによって生成されるロールバック リストの中でアスタリスク(*)が付けられます。
複数のテーブルの指定
CANCEL ROLLBACK ON TABLEコマンドで複数のテーブルを指定する場合、rcvmanagerは各テーブルに参照整合性制約がないかどうかを検証します。
T1 (table_id 6710)、T2 (table_id 6711)、T3 (table_id 6712)という3つのテーブルがロールバック リストに存在し、T2にT1を参照する外部キーがあるとします。T3には自己参照のみがあり、他のテーブルを参照する制約はないとします。
> CANCEL ROLLBACK ON TABLE 0:6710; Entry ignored as table 0:6710 has referential integrity constraint. Enter command, "QUIT;" or "HELP;" : > CANCEL ROLLBACK ON TABLE 0:6711; Entry ignored as table 0:6711 has referential integrity constraint. Enter command, "QUIT;" or "HELP;" : > CANCEL ROLLBACK ON TABLE 0:6712; Rollback will be cancelled for: 0000:6712 "SG"."T3" Confirm y/n ? > y
rcvmanagerは、テーブルT3に対するロールバックのみをキャンセルします。
結合インデックスまたはハッシュ インデックスに関連付けられたテーブルの指定
ロールバックをキャンセルするために指定したテーブルが結合またはハッシュ インデックスに関連している場合、rcvmanagerはそのようなテーブルすべてをリストし、確認を1回求めます。
確認(y)の場合、テーブル、および関連付けられている結合インデックスとハッシュインデックスは無効としてマークされます。
結合インデックスまたはハッシュ インデックスに関連付けられたテーブル、またはエラーのあるテーブルの指定
CANCEL ROLLBACK ON TABLEコマンドで複数のテーブルを指定し、一部のテーブルに結合またはハッシュ インデックスが含まれているか、エラーが含まれている場合、rcvmanagerはすべての有効なテーブルについて確認を1回求めます。
table_id 6707のTemp_Tableが結合インデックスに関連しているとします。
> CANCEL ROLLBACK ON TABLE 0:6707; Rollback will be cancelled for: 0000:6707 "EmployeeDB"."Temp_Table" The following join and/or hash indexes will be invalidated: "EmployeeDB"."Sal_Join" Confirm y/n ? > y
CANCEL ROLLBACK ON TABLEコマンドで指定したtable_idを以前に指定したことがある場合、または同じコマンドで複数回指定した場合、rcvmanagerは入力が重複していることを示すメッセージを報告します。
以前にtable-id 6712に対するロールバックがキャンセルされたことがあるとします。
> CANCEL ROLLBACK ON TABLE 0:6712;
以下のメッセージが表示されます。
Table 0:6712 already on the cancel rollback list, input ignored. Enter command, "QUIT;" or "HELP;"
テーブルに対するロールバックをキャンセルすると、テーブルは無効になり、後続のトランザクションで使用できなくなります。
ユーザーがそのようなテーブルを更新しようとすると、次のメッセージが表示されます。
"Invalid operation on table table-name."
テーブルに対するロールバックはすでにキャンセルされました
次の例では、テーブルに対するロールバックが以前にキャンセルされたことがあり、テーブルが無効であるため、LogTableへのINSERTは失敗します。
BTEQ -- Enter your DBC/SQL request or BTEQ command: INSERT INTO EmployeeDB.LogTable; *** Failure 5792 Invalid operation on table 'LogTable'. Statement# 1, Info =0 *** Total elapsed time was 1 second.
ロールバックがキャンセルされたテーブルに対する有効な操作
テーブルに対するロールバックをキャンセルすると、テーブルの中のデータが無効になり、使用できなくなります。CANCEL ROLLBACK ON TABLEを実行したテーブルに対しては、次の操作のみが有効です。
操作 | 使用するコマンド |
---|---|
テーブルの中のすべての行を削除してもう一度有効にする操作 | ALLオプション付きのDELETE文。 |
テーブルを再作成するためにテーブルを削除する操作 | DROP TABLE文。 |
SELECT操作のために1つのテーブルを取り出す操作 | READ OVERRIDEオプション付きのLOCKINGリクエスト修飾子。 |
DSAユーティリティを使用してテーブルをアーカイブから復元する操作 | RESTOREコマンド。 |
DSAユーティリティを使用してテーブルをダンプする操作 | DUMPコマンド。 |
テーブルのヘッダーを再作成する操作 | Table Rebuild (rebuild)ユーティリティ |