CHECKコマンドの制限
データベース名やテーブル名を含むCHECKコマンドは、1300文字を超えることはできません。ワイルドカード文字は、1つの文字としてカウントされます。詳細については、オブジェクト名での有効文字および名前でのワイルドカード文字の使用を参照してください。
CHECKコマンドは、大文字と小文字を区別しません。構文要素は、大文字または小文字、あるいはこれらを混ぜて指定できます。このことは、ワイルドカード構文で指定した名前にも適用されます。
CheckTableがチェックできるデータベースおよびテーブルの数に制限はありませんが、CHECKコマンドがコマンド ラインで受け付ける名前は最大30個です。dbname、tablename、およびdbname.tablenameの形式の名前は、それぞれ1つの名前であるとみなされます。ただし、ワイルドカード表現も1つの名前であるとみなされ、任意の数のデータベースおよびテーブルに解決できます。ワイルドカード表現の使用法の詳細は、名前でのワイルドカード文字の使用を参照してください。
CHECK AGAINコマンドの制限
各CHECKコマンドでは、重大なエラーのリストが含まれたエラー ファイルを生成します。CHECK AGAINコマンドは、エラー ファイル内にリストされた(障害が発生した)テーブルだけをチェックする場合に使用します。また、入力エラー ファイルを指定したり、CheckTableに入力エラー ファイルをデフォルトで前のCHECKコマンドで生成された出力エラー ファイルに設定させたりすることもできます。
Error-filenameを指定しない場合、現在のCheckTableインスタンス内の前のCHECKコマンドによって生成された最後のエラー ファイルが入力として使用されます。
Error-filenameは、完全修飾のファイル名(/var/tmp/CheckTableErrors20130503164640など)または相対パスのファイル名(例えばCheckTableErrors20130503164640)にできます。
相対パス名については、ルート ディレクトリはエラー ファイルのディレクトリで、そのディレクトリはERRORFILEDIRコマンドを使用して管理します。
テーブル チェックのステータスの判別
現在のテーブル チェック タイプのステータスを判別する場合は、CheckTableコマンド プロンプトにstatusと入力します。詳細については、STATUSを参照してください。
例えば、進行中のテーブル チェックで、表t1、t10、t100、t1000、t11のあるデータベースDB0を指定したとします。次のテーブルには、PARALLELモードとSERIALモードでの結果が示されています。
モード | 結果の例 |
---|---|
PARALLEL | >>> STATUS: CheckTable running in PARALLEL mode. 5 CheckTable tasks started. 4 CheckTable tasks ACTIVE. 1 CheckTable tasks IDLE. 1000005 bytes spool space in use. 120 bytes spool space available. Task Status **** ********************************** 1 Checking data subtable ("DB0"."T1"). 2 Checking data subtable ("DB0"."T10"). 3 Checking data subtable ("DB0"."T100"). 4 Waiting for a read lock on table ("DB0"."T1000"). 0 lock retry(s), total wait time of 1.4 minute(s). これらの結果は、CheckTableが5つの並行チェックを開始したことを示しています。
|
SERIAL | >>>> STATUS: Checking data subtable ("DB0"."T10"). CheckTableがテーブルDB0.T10のデータ サブテーブルをチェックしていることを示しています。 |
テーブル チェックの停止
現在の1つのテーブル(SERIALモード)、またはチェック中のテーブルの現在のグループ(PARALLELモード)のチェックを停止するには、CheckTableコマンド プロンプトにabort tableと入力します。詳細については、ABORT TABLEを参照してください。
すべてのテーブルのチェックを停止する場合は、CheckTableコマンド プロンプトにabortと入力します。詳細については、ABORTを参照してください。
CheckTable実行のロギング
CheckTableでは、Check実行の開始時刻と終了時刻が、 DBC.SW_Event_Logテーブルとオペレーティング システムのイベント ログに記録されます。 ログに記録された開始時刻と終了時刻により、CheckTableの実行時間を計算でき、今後のCheckTableの実行時間を予測できます。
ログのエントリは、Teradata Databaseを問合わせることにより、またはオペレーティング システムのイベント ログを表示することにより表示できます。Linuxでは、イベント ログは、/var/logディレクトリ内にあるメッセージ ファイルとなります。
CheckTableヘルプ
CheckTableのメニュー上から階層型ヘルプ システムにアクセスするには、[F7]キーを押します。ヘルプ システム内の移動には、ファンクション キーを使用します。
ヘルプ システムのテキスト全文を表示するには、CheckTableコマンド プロンプトでhelp;と入力します。詳細については、HELPを参照してください。
CheckTableおよびシステム アクティビティ
- テーブルの保全性の検証には、CheckTableの診断中にテーブルが変更されないことが必要です。したがってCheckTableは、テーブルのチェック時に各テーブルに対してREADロックをかけます。CheckTableが、テーブルの基本行とフォールバック行との整合性を確認している間は、INSERTを実行することはできません。
- CheckTableは、DBC.TVMに対して一時的にREADロックをかけて、検査中のテーブルの有無を検査します。また、実施中に表、ビュー、マクロの作成または変更を行なうとロックによる問題が生じる可能性があります。なぜなら、これらの操作にはDBC.TVMに対するWRITEロックが必要だからです。
- ダウンしているAMPが1つ以上あると、CheckTableはテーブルの整合性の検証を完了できないことがあります。
- PRIORITY
CheckTableを実行すると、システム リソース(CPU使用率、ディスク アクセス、スプール領域など)に負担がかかり、システムにアクセスするときのパフォーマンスが低下することがあります。デフォルトでは、CheckTableは、MEDIUM優先順位で実行します。
予想されるシステム ワークロードに基づいてジョブ スケジューリングを制御し、パフォーマンスを向上させるには、PRIORITYオプションを使用します。
- CONCURRENT MODE
このオプションは、ロック プロトコルを最適化してテーブルを逐次チェックすることにより、ロック競合を少なくします。
CONCURRENT MODEでは、CheckTableを完了まで実行することができ、静止していないシステムでデッドロックを回避できます。並行モード(同時実行モード)で使用されるロック プロトコルを最適化して必要なロックの数を最小化し、できるだけ制限の少ないロック タイプを使用します。ただし、進行中のトランザクションによる誤ったエラー報告を回避するために必要なロックもあります。
ロック競合を最小限にしても、アクティブなシステムではブロックが必要です。例えば、チェック中のテーブルにはREADロックがかけられます。したがって、そのテーブルに対する更新操作は、表チェックが完了するまでブロックされます。
CONCURRENT MODE RETRY LIMITオプションを指定すると、CheckTableはロックされたすべてのテーブルをスキップし、これらのロックされたテーブルに対しては、他のセッションによってロックされていない指定されたすべてのテーブルのチェックを完了した後にチェックを再試行します。
RETRY LIMITの値 CheckTableの動作 … 指定されない すべてのテーブルのチェックが正常に終了するまで、ロックされたテーブルに対して繰り返しチェックを再試行し続けます。 CheckTableはロックされたテーブルにアクセスしようとする際、最大5分間ロックが解放されるのを待機します。ロックがその時間内に解放されない場合、CheckTableは次のテーブルに移動します。CheckTableは、ロックされたテーブルに戻って再試行します。
0より大 RETRY LIMITに達するまでチェックを再試行し続けます。 0 スキップしたテーブルに対してチェックを再試行しません。 負 エラー メッセージを表示します。
データ ディクショナリ テーブルのチェック
データ ディクショナリのテーブルは、チェックでALL TABLES(非同時実行モード)を指定している場合、あるいはデータベースDBCのチェックを明示的に指定している場合のみチェックされます。この場合、Teradata Databaseは静止状態で、ログオンが使用不可となっている必要があります。
データ ディクショナリ処理は、パフォーマンス上の理由からデフォルトでバッチ スキャン モードに設定されます。ディクショナリのエラーが発生した場合、処理は、より包括的なエラー処理機能のためにSERIAL(順次)スキャン モードに自動的に切り替わります。ただし、SERIALスキャン モードは処理が遅くなるため、大規模なシステムでは非常に時間がかかる可能性があります。
データ ディクショナリ スキャンの進捗状況を調べるには、STATUSコマンドを使用します。
CHECKコマンド自体とともにデータ ディクショナリ スキャンをアボートするには、ABORTコマンドを使用します。データ ディクショナリ スキャンをスキップするには、ログオンが有効な間にCHECKコマンドを発行します。
ファイルの破損およびCheckTable
CheckTableは、ファイル システムのデータ構造が一貫していることを確認します。そのためCheckTableがテーブルとデータベースをチェックしているときに、ファイルの損傷を見つけると進行中のテーブル チェックを打ち切り、CheckTable はエラー メッセージを表示します。
エラー内容を調査するには、CheckTableが残りのテーブルのチェックを終了してからSCANDISKコマンドを実行してください。SCANDISKの詳細については、Ferretユーティリティ(ferret)を参照してください。
順序誤りの行
CheckTableは、順序の誤っている行を存在しないものとして扱い、続けて次の順序の行を探します。これが原因で、CheckTableが後続の行について順序の誤りのエラーを報告する可能性があります。1つの行しか順序に誤りがない場合もあるので注意してください。
例えば、次の順序 1、2、4、6、8、20、9、10、11、12、17、18、21、25の場合、CheckTableは9が昇順から逸脱しているとみなします。そこでCheckTableは9を無視し、20に続く行を探します。この場合、20こそが順序が誤っている唯一の行である可能性が高いにもかかわらず、CheckTableは9から18までをエラーとして報告します。
特別なテーブルおよび例外
CheckTableは、基本グローバル一時テーブルとそのインスタンスのテーブルヘッダーのみをチェックします。また、レベル1のチェックではインスタンスのデータ行はチェックされません。レベル1のチェックの詳細については、レベル1のチェックを参照してください。
ストアド プロシージャ、UDF、およびUDMは、テキストおよびオブジェクト コードを、通常はユーザーからアクセスできない特別なテーブルとして内部に格納します。結合インデックス行またはハッシュ インデックス行も、テーブルとして内部に格納されます。CheckTableは、通常のデータ テーブルのチェックに加えて、これらすべてのテーブルをチェックします。
ハッシュされていないテーブル、およびある種の結合インデックスとハッシュ インデックスについては、実行されないチェックがあります。
CheckTableはチェック対象のテーブルとしてDBC.ALLテーブルを含めません。DBC.ALLテーブルは通常のテーブルとはみなされないからです。
CheckTableは、ロールバックがキャンセルされたテーブルはチェックしません。
参照整合性用語
次のテーブルは、CheckTableで使用する参照整合性用語を定義しています。
用語 | 定義 |
---|---|
プライマリ キー | テーブルの行を固有に識別する1つ以上の列 |
外部キー | 1つ以上のテーブル(親テーブル)内のプライマリ キーを参照するテーブル(子テーブル)内の1つ以上の列 |
親テーブル | 別のテーブルである子テーブルにより参照されるプライマリ キーを持つテーブル |
子テーブル | 別のテーブルである親テーブル内のプライマリ キーを参照する外部キーを持つテーブル |
参照整合性の詳細については、<Teradata Vantage™ SQL基礎、B035-1141>および<Teradata Vantage™ データベース設計、B035-1094>を参照してください。