目的
SCANDISKコマンドは、ファイル システムを検証し、以下の項目に示す矛盾を含め、検出されたエラーについて報告します。
- マスター インデックス(MI)、スナップショットMIの現在の(メモリ)コピー、シリンダー インデックス(CI)、データ ブロック(DB)、空きCIを含む、キー ファイル システム データ構造。また、SCANDISKは、次のWALログ構造を検証します: WALマスター インデックス(WMI)、WALシリンダーインデックス(WCI)、WALデータ ブロック(WDB)。
- キー物理行に対するパーティション番号を含むRowIDは、シリンダ インデックスとマスター インデックスの行に格納された値と一致する必要があります。
"物理行"とは、ファイル システムによって格納される下位レベルの行構造を意味します。物理テーブルの行、1つまたは複数の列パーティションのデータ、テーブル ヘッダー(テーブルに関するメタデータ)、インデックス データ構造、およびその他のデータ型など、複数のデータ型のいずれかを格納できます。すべての物理行には、1種類のデータのみが格納されます。
- キー物理TJおよびREDOレコードに対するWAL Logical Sequence Number (WLSN)は、WALシリンダ インデックスとWALマスター インデックスの対応するレコードに格納された値と一致する必要があります。
- サブテーブルの中の物理行の内部パーティション番号で、先行の行の内部パーティション番号と等しいか、またはそれより大きいもの(存在する場合)。
- サブテーブル内では、すべての物理行はパーティション化(物理行に内部パーティション番号が含まれる)されるか、非パーティション化(物理行に内部パーティション番号が含まれない)されるかのいずれかになります。
- パーティション内では、物理行のRowIDは先行する行(存在する場合)のRowIDよりも大きな値である必要があります。
- ファイル システムのキー データ構造体(シリンダ インデックス、データ ブロックおよびWALでそれらに相当するもの)の計算されたチェックサム値は、記録されたチェックサム値に一致する必要があります(チェックサムが有効な場合)。
- 内部パーティション番号では、論理行のパーティション列に適用されるパーティション式の結果との整合性、または現在定義されている列パーティション番号との整合性の検査は行なわれません。
- 物理的な行ヘッダーのRowIDのハッシュ値は、プライマリ インデックスまたは基本AMPインデックスに対するインデックス列をハッシュした結果によっては評価されません。
構文
- /Y
- 確認のメッセージが表示されないようにします。
- /S
- MIおよびWMIをスキャンします。
- /M
- MI、CI、WMI、およびWCIをスキャンします。
- /L
- MI、CI、DB、WMI、WCI、およびWDBをスキャンします。
- CI
- MIおよびCIをスキャンします。対象範囲が選択したサブテーブルではなく、AMPまたはすべてのサブテーブルの場合、空きCIもスキャンされます。
- DB
- MI、CI、およびDBをスキャンします。これが通常のファイル システムに対するデフォルトで、CI、MI、またはFREECISオプションによって上書きできます。対象範囲が選択したサブテーブルではなく、AMPまたはすべてのサブテーブルの場合、空きCIもスキャンされます。
- FREECIS
- 割り当てマップで空きであると示されているシリンダのCIをスキャンします。CIでシリンダが空きであることが示されていないシリンダがあれば、そのシリンダも報告します。
- MI
- MIだけをスキャンします。
- WCI
- WMIおよびWCIをスキャンします。
- WDB
- WMI、WCI、およびWDBをスキャンします。これがWALログに対するデフォルトで、WCIまたはWMIオプションによって上書きできます。
- WMI
- WMIだけをスキャンします。
- SKIPDECOMPRESS
- SKIPDECOMP
- SCANDISKがブロック レベルの圧縮データ ブロックを圧縮解除しないようにします。これは一部の検証をスキップしますが、多数の圧縮データ ブロックがあるシステムでSCANDISKを高速化できます。
- WITHSPOOL
- SCANDISKを実行し、非スプール データだけでなく、すべてのスプール データのチェックを行ないます。
- inquire_opt
- 関連するAMPSにおいてスキャンされているものの中で最低のtidとrowidを表示する。このオプションは、SCANDISKの進行状況を完了までの合計時間のパーセンテージ割合の形で報告し、これまでに発生したエラーを表示します。
- NOCR
- シリンダ読み取りの代わりに、通常のデータ ブロック事前ロードを使用するように指定する。これは、デフォルトです。
- CR
- 通常のデータ ブロック事前ロードの代わりに、シリンダ読み取りを使用するように指定する。
- MAXERRCNT n
- MAXERR n
- SCANDISKが、vprocごとのサブテーブルにつき表示するエラーの最大数を指定します。指定の数のエラーが検出されると、SCANDISKは停止します。この設定を使用して、大量のエラーが報告される場合におけるSCANDISK実行時間を減らします。
Ferret INQUIRE (INQ)コマンドおよびABORTコマンドを使用して、コマンド実行中に処理状況を確認、または処理を中断することができます。
使用上の注意
SCANDISKを実行できるのは、システムがオンライン状態で、Teradata Databaseが通常どおり動作可能なときのみです。
- システムのアップグレードや拡張の前後にデータ保全性を検証する。
- データの破損が疑われる場合。
- (例えば週ごとの)定期的なデータ保全性チェックとして。
SCANDISKコマンドに続く構文の順序は変えてもかまいません。例えば、コマンドSCANDISK NOCR MIはコマンドSCANDISK MI NOCRと同じです。
オプションを入力しないと、SCANDISKはデフォルトとしてDBとvproc上のすべてのサブテーブルを走査します。デフォルトのスキャン対象範囲は、通常のファイル システムとWALログ両方です。それぞれ、最下位レベル(DB、WDB)から最上位レベル(MI、WMI)までスキャンします。空きCIもスキャンされます。
SCANDISKコマンドは、SCOPEコマンドによって制限され、例えば、1つのテーブルだけ、WALログだけ、特定のAMPだけをスキャンします。詳細は、SCOPEを参照してください。
デフォルトでは、SCANDISKはシリンダ読み取りではなく通常のデータ ブロック事前ロードを使用します。CRオプションによって、シリンダ読み取りを使用してSCANDISKを実行し、シリンダ スロットにデータを事前ロードできます。これによってSCANDISKのパフォーマンスが向上することがあります。ただし、他の作業でも シリンダ スロットの使用が必要な場合、スロットの競合によって、SCANDISKと他の作業の処理速度が低下する可能性があります。また、パフォーマンスの向上は、ロードされたデータの量、データの分散、および平均ブロックI/Oサイズによって異なります。
NOCRオプションを指定すると、SCANDISKによるシリンダ スロットの使用を停止することができるため、シリンダ スロットを必要とする他の作業の進行は妨げられなくなりますが、SCANDISKのパフォーマンスが低下する可能性があります。
SCANDISKは、スキャンが完了すると、検出したものだけを報告します。
SCANDISKの出力には、テーブルの行識別子(RowID)が含まれることがあります。
- 最初の8バイトは、行の内部パーティション番号です。
(非パーティション テーブルの場合、内部パーティション番号は0になり、内部パーティション番号は実際は行自体に格納されません。)
- 次の8バイトには、行のハッシュ バケット値と固有性値が含まれます。
SCANDISKの開始、完了、アボート、およびシステム リセットの時刻はLinuxの/var/log/messagesファイルにログ記録され、DBS.SW_Event_Logテーブルにも記録されます。
例: SCANDISK出力
SCANDISKが生成する出力の例を次に示します。
Ferret ==> scandisk Tue Feb 28, 1995 15:16:50 :Scandisk has been started on all AMP Vprocs in the SCOPE. Vproc 0 response DB @ Cylinder 0 2 (0000 0002) Sector 16 (0010) length 1 (0001) DB ref count doesn’t match DBD row Count Tue Feb 28, 1995 15:16:50 : The scandisk found problems Vproc 1 response Tue Feb 28, 1995 15:16:50 : The scandisk found nothing wrong
例: CIへの書き込み時にLSIによる割り込みが発生した場合のSCANDISK出力
以下は、SCANDISKがCIの中でLSIによって中断された書き込みパターンを見つけた場合に生成する出力例です。このエラーは、LSIブランド ストレージに固有です。
Ferret ==> scandisk ci Mon May 06, 2002 15:12:20 :Scandisk has been started on all AMP Vprocs in the SCOPE. vproc 0 (0000) response Mon May 06, 2002 15:55:21 : CI @ Cylinder 0 7 (0000 000007) Mon May 06, 2002 15:55:21 : LSI interrupted write pattern found in CI. 0120 MAY 05 05:02:35 LUN 1111, Start Block 00004545, Blocks 0400 SRD num table id firstdbd dbdcount offset u0 u1 tai ---- ----- ----- ----- -------- -------- ------ 0001 0000 0494 0800 FFFF 0014 001E Mon May 06, 2002 15:55:21 : Invalid DBD sector length of 14901 (3A35) found Mon May 06, 2002 15:55:21 : Invalid DBD sector length of 26912 (6920) found Mon May 06, 2002 15:55:21 : Invalid DBD sector length of 25972 (6574) found Mon May 06, 2002 15:55:21 : Invalid DBD sector length of 12336 (3030) found Mon May 06, 2002 15:55:21 : First rowid out of order dbds 18 (0012) and 19 (0013)
例: DBへの書き込み時にLSIによる割り込みが発生した場合のSCANDISK出力
以下は、SCANDISKがDBの中でLSIによって中断された書き込みパターンを見つけた場合に生成する出力例です。このエラーは、LSIブランド ストレージに固有です。
Ferret ==> scandisk db Tue Feb 28, 1995 15:16:50 :Scandisk has been started on all AMP Vprocs in the SCOPE. vproc 0 (0000) response Mon May 06, 2002 15:12:20 1 of 1 vprocs responded with no messages or errors. Type 'ABORT' to stop the command before completion Type 'INQUIRE' to check on progress of command Reading vproc 0 (0000) response Mon May 06, 2002 15:11:11 : CI @ Cylinder 0 7 (0000 000007) Mon May 06, 2002 15:11:11 : LSI interrupted write pattern found in DB. 0120 MAY 05 05:02:35 LUN 1111, Start Block 00004545, Blocks 0400 Mon May 06, 2002 15:11:11 : rows -1 (FFFFFFFF) and 0 (0000) are out of order
例: SCANDISKを使用してWALログをスキャン
以下の例では、スキャンがWALログだけに制限されます。
scope wal scandisk
例: SCANDISKを使用して1つのデータサブテーブルをスキャン
以下の例では、1つのユーザー データ サブテーブルをスキャンします。
scope table 'employee.emp' p scandisk
例: INQUIREオプションを使用してSCANDISKの進行状況を表示
以下の例では、INQUIREコマンドが1分ごとに送信されます。そのため、SCANDISKの進行状況が1分ごとに表示されます。
Ferret ==> > scandisk inq 1 m > Mon Jul 17, 2012 05:02:45 SCANDISK STATUS : Slowest vproc 2 is 44% done Fastest vproc 3 is 64% done The scandisk is about 55% done
SCANDISKのアボート
SCANDISK DBはファイル システムが一貫していることをバイト単位で検証するため、このプロセスには非常に長い時間がかかることがあります。そのためオプションとして、処理を停止するためのコマンドが用意されています。
ABORTは処理の実行に最大で30秒を要する場合があります。
SCANDISKプロセスの開始後、ABORTはそれを停止させて、現在の状態を報告します。
アボートが成功すると、以下が表示されます。
Are you sure you want to scandisk? (Y/N) y Tue Feb 28, 1995 15:16:50 : Scandisk has been started on all AMP Vprocs in the SCOPE. Type ‘ABORT‘ to stop them before completion Type ‘INQUIRE‘ to check on progress of command ABORT Abort request has been sent Vproc 0 response DB @ Cylinder 0 2 (0000 0002) Sector 16 (0010) length 1 (0001) DB ref count doesn’t match DBD row Count Tue Feb 28, 1995 15:16:50 : The scandisk found problems Vproc 1 response Tue Feb 18, 1995 15:16:50 : The scandisk found nothing wrong Ferret ==>
SCANDISKステータスの検査
SCANDISKの実行には長い時間がかかるため、スキャン開始後に状態検査を行なうことができます。それにはINQUIREコマンドを使用します。
INQUIREは、関連するAMPの中でもスキャンされた最小のtidとrowidを表示し、SCANDISKの進行状況を完了までの合計時間のパーセンテージ割合の形で報告します。また、最後のINQUIREコマンド以降に発生したエラーのリストも表示します。
この.INQUIREコマンドはSCANDISKのINQUIREスタートアップ オプションに似ていますが、呼び出し時に一度だけ実行されます。INQUIREスタートアップ オプションとは異なり、指定間隔で自動的に繰り返されるように設定することはできません。
INQUIRE出力のSCANFREEセクションは、空き状態のCIのスキャンのステータスを表示します。
INQUIRE出力のサンプルを以下に示します。
Ferret ==> scandisk Wed Apr 11, 2007 16:46:24 : Scandisk will be started On All AMP vprocs Do you wish to continue based upon this scope?? (Y/N) y Wed Apr 11, 2007 16:46:26 : Scandisk has been started Type 'ABORT' to stop the command before completion Type 'INQUIRE' to check on progress of command inq Inquire request has been sent Wed Apr 11, 2007 16:46:30 SCANDISK STATUS : Slowest vproc 0 is 2% done Fastest vproc 0 is 2% done The scandisk is about 2% done Scanning Table: 0 1434 1024 Scanning Row: 0 1972 32488 0 1 Nobody has reached the SCANFREE stage Wed Apr 11, 2007 16:46:30 2 of 2 vprocs responded with no messages or errors. Type 'ABORT' to stop the command before completion Type 'INQUIRE' to check on progress of command inq Inquire request has been sent Wed Apr 11, 2007 16:46:36 SCANDISK STATUS : Slowest vproc 1 is 4% done Fastest vproc 0 is 5% done The scandisk is about 4% done Scanning Table: 0 1434 1024 Scanning Row: 0 28847 58771 0 95 Nobody has reached the SCANFREE stage vproc 1 (0001) response Wed Apr 11, 2007 16:46:33 : CI @ Cylinder 0 100 (0000 000064) Wed Apr 11, 2007 16:46:33 : CID's First TID doesn't Match CI's First TID 0 1434 1024 (0000 059A 0400) ( test.trans ) 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) /nWed Apr 11, 2007 16:46:33 : CID's Last TID doesn't Match CI's Last TID 0 1434 1024 (0000 059A 0400) ( test.trans ) 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:33 : Table Header is missing. May be in the process of being dropped 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 3418 (0D5A) length 126 (007E) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 3629 (0E2D) length 70 (0046) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 3699 (0E73) length 70 (0046) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 48 (0030) length 65 (0041) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 432 (01B0) length 65 (0041) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 113 (0071) length 66 (0042) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 179 (00B3) length 66 (0042) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 2646 (0A56) length 122 (007A) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 1953 (07A1) length 66 (0042) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 2346 (092A) length 66 (0042) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 2932 (0B74) length 72 (0048) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 3004 (0BBC) length 72 (0048) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 684 (02AC) length 72 (0048) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 756 (02F4) length 72 (0048) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 1191 (04A7) length 109 (006D) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 1606 (0646) length 74 (004A) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 2768 (0AD0) length 74 (004A) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 3150 (0C4E) length 119 (0077) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 1056 (0420) length 69 (0045) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : DB @ Cylinder 0 100 (0000 000064) Sector 3544 (0DD8) length 69 (0045) : TID : 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) Wed Apr 11, 2007 16:46:34 : SRD TID.uniq doesn't match DB tid.uniq 0 1435 (0000 059B) 0 1434 (0000 059A) Wed Apr 11, 2007 16:46:34 : CI @ Cylinder 0 266 (0000 00010A) Wed Apr 11, 2007 16:46:34 : Table Ids are out of order 0 1435 1024 (0000 059B 0400) ( TEST.data1 ) 0 1434 1024 (0000 059A 0400) ( test.trans ) Wed Apr 11, 2007 16:46:36 1 of 2 vprocs responded with no messages or errors. Wed Apr 11, 2007 16:46:36 1 of 2 vprocs responded with messages or errors as specified above Type 'ABORT' to stop the command before completion Type 'INQUIRE' to check on progress of command