131 DBMS_REPAIR
DBMS_REPAIR
パッケージには、データ破損修復プロシージャが含まれており、表および索引にある破損ブロックを検出して修復できます。可能な場合は破損をつき止め、再構築中または修復中にオブジェクトの使用を続行できます。
この章のトピックは、次のとおりです:
参照:
DBMS_REPAIR
パッケージの使用方法の詳細は、『Oracle Database管理者ガイド』を参照してください。
131.3 DBMS_REPAIRの定数
DBMS_REPAIR
パッケージは、パラメータ値の指定に使用するいくつかの列挙定数を定義します。列挙定数にはパッケージ名を接頭辞として付加する必要があります。たとえば、DBMS_REPAIR
.TABLE_OBJECT
と記述します。
次の表に、パラメータおよび列挙定数の一覧を示します。
表131-1 DBMS_REPAIRパラメータおよび列挙定数
パラメータ | オプション | タイプ | 説明 |
---|---|---|---|
|
|
|
- |
|
|
|
- |
|
|
|
- |
|
|
|
- |
|
|
|
修飾するすべてのオブジェクトをクリーンアップします。 |
|
|
|
基礎となる表の((サブ)パーティション)オブジェクトで、DMLロックを取得するかどうかを指定します。 |
ノート:
デフォルトのtable_name
は、table_type
がREPAIR_TABLE
のときはREPAIR_TABLE
で、table_type
がORPHAN_TABLE
のときはORPHAN_KEY_TABLE
です。
131.4 DBMS_REPAIRの操作のノート
ORPHAN_KEYS_TABLE
を作成するプロシージャは、REPAIR_TABLE
の作成に使用するプロシージャに類似しています。
CONNECT / AS SYSDBA; EXEC DBMS_REPAIR.ADMIN_TABLES('ORPHAN_KEYS_TABLE', DBMS_REPAIR.ORPHAN_TABLE, DBMS_REPAIR.CREATE_ACTION); EXEC DBMS_REPAIR.ADMIN_TABLES('REPAIR_TABLE', DBMS_REPAIR.REPAIR_TABLE, DBMS_REPAIR.CREATE_ACTION); DESCRIBE ORPHAN_KEYS_TABLE; DESCRIBE REPAIR_TABLE; SELECT * FROM ORPHAN_KEYS_TABLE; SELECT * FROM REPAIR_TABLE;
DBAは、修復表および孤立したキー表を1回作成します。その後CHECK_OBJECTプロシージャを実行すると、検出されたエラーのタイプを示す適切な表に行が追加されます。
修復表および孤立したキー表の名前はユーザーが選択できますが、修復表の名前は接頭辞REPAIR_
で、孤立したキー表は接頭辞ORPHAN_
で始める必要があるという制限があります。また、次のコードも有効です。
CONNECT / AS SYSDBA; EXEC DBMS_REPAIR.ADMIN_TABLES('ORPHAN_FOOBAR', DBMS_REPAIR.ORPHAN_TABLE, DBMS_REPAIR.CREATE_ACTION); EXEC DBMS_REPAIR.ADMIN_TABLES('REPAIR_ABCD', DBMS_REPAIR.REPAIR_TABLE, DBMS_REPAIR.CREATE_ACTION); DESCRIBE ORPHAN_FOOBAR; DESCRIBE REPAIR_ABCD; SELECT * FROM ORPHAN_FOOBAR; SELECT * FROM REPAIR_ABCD;
CHECK_OBJECTプロシージャを起動する場合(特にADMIN_TABLESプロシージャまたはCREATE_ACTION
でデフォルト値が使用されない場合)、作成された修復表および孤立したキー表の名前を正しく指定する必要があります。
ADMIN_TABLESプロシージャの他のアクションを使用して、REPAIR_TABLE
およびORPHAN_KEYS_TABLE
をパージ(削除)できます。
131.5 DBMS_REPAIRの例外
このトピックの表は、DDBMS_REPAIRサブプログラムで発生する例外について説明しています。
表131-2 DBMS_REPAIRの例外
例外 | 説明 | 処置 |
---|---|---|
|
指定した表が存在していないと、 |
- |
|
指定した表がすでに存在していると、 |
- |
|
指定した |
有効なパラメータ値を指定するか、またはパラメータのデフォルトを使用してください。 |
|
ブロック範囲の指定に誤りがあります。 |
|
|
指定した機能を使用しようとしましたが、その機能はまだ実装されていません。 |
この機能は使用しないでください。 |
|
|
|
|
|
|
|
|
|
|
パーティション化されていないオブジェクトに対して、パーティション名が指定されました。 |
パーティション名は、オブジェクトがパーティション化されているときのみ指定してください。 |
|
接頭辞を指定しないで、table_nameパラメータを渡そうとしました。 |
有効なtable_nameパラメータを渡してください。 |
|
存在しない修復表または孤立した表を指定しようとしました。 |
table_nameパラメータに有効な値を指定してください。 |
|
誤った定義内容の修復表または孤立した表を指定しようとしました。 |
正しく作成された表を参照する表名を指定してください。 |
|
30文字を超える表名を指定しようとしました。 |
table_nameパラメータに有効な値を指定してください。 |
131.6 DBMS_REPAIRの例
このトピックの表は、DBMS_REPAIRの使用例について説明しています。
/* Fix the bitmap status for all the blocks in table mytab in schema sys */ EXECUTE DBMS_REPAIR.SEGMENT_FIX_STATUS('SYS', 'MYTAB'); /* Mark block number 45, filenumber 1 for table mytab in sys schema as FULL.*/ EXECUTE DBMS_REPAIR.SEGMENT_FIX_STATUS('SYS', 'MYTAB', TABLE_OBJECT,1, 45, 1);
131.7 DBMS_REPAIRサブプログラムの要約
この表は、DBMS_REPAIR
サブプログラムを示し、簡単に説明しています。
表131-3 DBMS_REPAIRパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
|
表または索引の破損を検出し、レポートします。 |
|
破損データ・ブロック内の行を指す索引エントリをレポートします。 |
|
|
|
失敗または中断したオンラインでの索引の作成または再作成を手動でクリーンアップします。 |
|
オブジェクトの空きリストを再作成します。 |
|
ビットマップ・エントリの破損状態を修正します。 |
|
表および索引のスキャン時に破損マークのあるブロックを無視するか、または破損マークのあるブロックが検出された場合に |
131.7.1 ADMIN_TABLESプロシージャ
このプロシージャは、DBMS_REPAIR
パッケージの修復表および孤立したキー表に対して管理ファンクションを提供します。
構文
DBMS_REPAIR.ADMIN_TABLES ( table_name IN VARCHAR2, table_type IN BINARY_INTEGER, action IN BINARY_INTEGER, tablespace IN VARCHAR2 DEFAULT NULL);
パラメータ
表131-4 ADMIN_TABLESプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
処理する表の名前。指定した |
|
表のタイプ。 「定数」を参照してください。 |
|
実行する管理アクションを示します。
定数を参照してください。 |
|
表の作成時に使用する表領域を示します。 デフォルトでは、 |
131.7.2 CHECK_OBJECTプロシージャ
このプロシージャは、指定したオブジェクトをチェックし、破損および修復指示に関する情報を修復表に移入します。
妥当性チェックでは、オブジェクト内のすべてのブロックがチェックされます。
構文
DBMS_REPAIR.CHECK_OBJECT ( schema_name IN VARCHAR2, object_name IN VARCHAR2, partition_name IN VARCHAR2 DEFAULT NULL, object_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT, repair_table_name IN VARCHAR2 DEFAULT 'REPAIR_TABLE', flags IN BINARY_INTEGER DEFAULT NULL, relative_fno IN BINARY_INTEGER DEFAULT NULL, block_start IN BINARY_INTEGER DEFAULT NULL, block_end IN BINARY_INTEGER DEFAULT NULL, corrupt_count OUT BINARY_INTEGER);
パラメータ
表131-5 CHECK_OBJECTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
チェックするオブジェクトのスキーマ名。 |
|
チェックする表または索引の名前。 |
|
チェックするパーティションまたはサブパーティションの名前。 パーティション・オブジェクトで、 |
|
処理するオブジェクトのタイプ。 定数を参照してください。 |
|
情報を移入する修復表の名前。 この表は、 |
|
将来の使用のために予約されています。 |
|
相対ファイル番号。ブロック範囲の指定時に使用します。 |
|
ブロック範囲を指定する場合に、最初に処理するブロックを指定します。オブジェクトが単一表、パーティションまたはサブパーティションの場合のみ指定できます。 |
|
ブロック範囲を指定する場合に、最後に処理するブロックを指定します。オブジェクトが単一表、パーティションまたはサブパーティションの場合のみ指定できます。 |
|
レポートされた破損数。 |
使用上のノート
オブジェクトの一部をチェック対象とする場合は、オプションで、DBA範囲、パーティション名またはサブパーティション名を指定することもできます。
131.7.3 DUMP_ORPHAN_KEYSプロシージャ
このプロシージャは、破損データ・ブロック内の行を指す索引エントリをレポートします。検出された該当索引エントリごとに、指定した孤立した表に行が挿入されます。
修復表が指定されている場合は、ソフトウェア破損のマークがあるすべてのデータ・ブロックの他に、元表に関連付けられている破損ブロックが処理されます。修復表が指定されていない場合は、破損マークのあるブロックのみ処理されます。
この情報は、表内で失われた行を再構築する場合や診断の目的に使用されます。
構文
DBMS_REPAIR.DUMP_ORPHAN_KEYS ( schema_name IN VARCHAR2, object_name IN VARCHAR2, partition_name IN VARCHAR2 DEFAULT NULL, object_type IN BINARY_INTEGER DEFAULT INDEX_OBJECT, repair_table_name IN VARCHAR2 DEFAULT 'REPAIR_TABLE', orphan_table_name IN VARCHAR2 DEFAULT 'ORPHAN_KEYS_TABLE', flags IN BINARY_INTEGER DEFAULT NULL, key_count OUT BINARY_INTEGER);
パラメータ
表131-6 DUMP_ORPHAN_KEYSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマ名。 |
|
オブジェクト名。 |
|
処理するパーティションまたはサブパーティションの名前。 パーティション・オブジェクトで、 |
|
処理するオブジェクトのタイプ。デフォルトは 定数を参照してください。 |
|
元表の破損ブロックに関する情報を含んだ修復表の名前。 指定した表は、 |
|
破損データ・ブロック内の行を参照する各索引エントリに関する情報を移入する孤立したキー表の名前。 指定した表は、 |
|
将来の使用のために予約されています。 |
|
処理された索引エントリ数。 |
131.7.4 FIX_CORRUPT_BLOCKSプロシージャ
このプロシージャは、CHECK_OBJECTプロシージャによって事前に生成された修復表の情報に基づいて、指定したオブジェクト内の破損ブロックを修正します。
ブロックに変更を加える前に、そのブロックがまだ破損状態であることを確認するチェックが行われます。破損ブロックは、そのブロックにソフトウェア破損のマークを付けることによって修復されます。修復が有効になると、修復表内の関連行が修正タイムスタンプで更新されます。
構文
DBMS_REPAIR.FIX_CORRUPT_BLOCKS ( schema_name IN VARCHAR2, object_name IN VARCHAR2, partition_name IN VARCHAR2 DEFAULT NULL, object_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT, repair_table_name IN VARCHAR2 DEFAULT 'REPAIR_TABLE', flags IN BINARY_INTEGER DEFAULT NULL, fix_count OUT BINARY_INTEGER);
パラメータ
表131-7 FIX_CORRUPT_BLOCKSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマ名。 |
|
修正対象の破損ブロックがあるオブジェクトの名前。 |
|
処理するパーティションまたはサブパーティションの名前。 パーティション・オブジェクトで、 |
|
処理するオブジェクトのタイプ。 定数を参照してください。 |
|
修復指示を含んだ修復表の名前。
|
|
将来の使用のために予約されています。 |
|
修正されたブロック数。 |
関連項目
131.7.5 ONLINE_INDEX_CLEANファンクション
このファンクションは、失敗または中断したオンラインでの索引の作成または再作成を手動でクリーンアップします。
また、このアクションは、ユーザーが開始したクリーンアップに関係なく、SMONによって定期的に実行されます。
このファンクションは、指定したすべての索引がクリーンアップされるとTRUE
を戻し、クリーンアップできない索引が1つ以上あるとFALSE
を戻します。
構文
DBMS_REPAIR.ONLINE_INDEX_CLEAN ( object_id IN BINARY_INTEGER DEFAULT ALL_INDEX_ID, wait_for_lock IN BINARY_INTEGER DEFAULT LOCK_WAIT) RETURN BOOLEAN;
パラメータ
表131-8 ONLINE_INDEX_CLEANファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
クリーンアップする索引のオブジェクトID。デフォルトでは、修飾するすべてのオブジェクトをクリーンアップします。 |
|
このパラメータは、基礎となる表の((サブ)パーティション)オブジェクトで、DMLロックを取得するかどうかを指定します。デフォルトでは、内部の再試行制限回数まで再試行した後、ロックの取得を中止します。 |
131.7.6 REBUILD_FREELISTSプロシージャ
このプロシージャは、指定したオブジェクトの空きリストを再作成します。
すべての空きブロックは、マスター空きリストに格納されます。その他の空きリストはすべて0(ゼロ)になります。
オブジェクトに複数の空きリスト・グループがある場合、空きブロックは、ラウンドロビン方式で異なるグループに割り当てられ、すべての空きリスト間に配分されます。
構文
DBMS_REPAIR.REBUILD_FREELISTS ( schema_name IN VARCHAR2, object_name IN VARCHAR2, partition_name IN VARCHAR2 DEFAULT NULL, object_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT);
パラメータ
表131-9 REBUILD_FREELISTSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマ名。 |
|
空きリストを再作成するオブジェクトの名前。 |
|
空きリストを再作成するパーティションまたはサブパーティションの名前。 パーティション・オブジェクトで、partition_nameが指定されていない場合は、すべてのパーティションおよびサブパーティションが処理されます。パーティション・オブジェクトで、指定したパーティションにサブパーティションが含まれている場合は、すべてのサブパーティションが処理されます。 |
|
処理するオブジェクトのタイプ。 「定数」を参照してください。 |
131.7.7 SEGMENT_FIX_STATUSプロシージャ
このプロシージャで、ビットマップ・エントリの破損状態を修正します。このプロシージャでは、状態が対応ブロックの現行の内容に基づいて再計算されるか、特定の値に設定されます。
構文
DBMS_REPAIR.SEGMENT_FIX_STATUS ( segment_owner IN VARCHAR2, segment_name IN VARCHAR2, segment_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT, file_number IN BINARY_INTEGER DEFAULT NULL, block_number IN BINARY_INTEGER DEFAULT NULL, status_value IN BINARY_INTEGER DEFAULT NULL, partition_name IN VARCHAR2 DEFAULT NULL,);
パラメータ
表131-10 SEGMENT_FIX_STATUSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
セグメントのスキーマ名。 |
|
セグメント名。 |
|
オプション。個々のパーティション名。 |
|
セグメントのオプション・タイプ( |
|
(オプション)ステータスを固定する必要のあるデータ・ブロックの、相対表領域ファイル番号。省略した場合、セグメント内の全ブロックで、状態が正しいかどうかチェックされ修正が行われます。 |
|
(オプション)ステータスを固定する必要のあるデータ・ブロックの、相対ファイル・ブロック番号。省略した場合、セグメント内の全ブロックで、状態が正しいかどうかチェックされ修正が行われます。 |
|
(オプション)
ビットマップ・ブロック、セグメント・ヘッダーおよびエクステント・マップ・ブロックのステータスは変更できません。固定ハッシュ領域のブロックのステータスは変更できません。索引ブロックのステータスは「1 = ブロックがいっぱいです」および「3 = ブロックに空きがあります」の2つのみです。 |
131.7.8 SKIP_CORRUPT_BLOCKSプロシージャ
このプロシージャは、指定したオブジェクトの索引および表のスキャン時に、破損ブロックのスキップを使用可能または使用禁止にします。
オブジェクトが表のときは、スキップが表およびその索引に適用されます。オブジェクトがクラスタのときは、クラスタ内のすべての表およびその各索引に適用されます。
ノート:
元表に対してDBMS_REPAIR.SKIP_CORRUPT_BLOCKSを設定した後、破損している索引で索引レンジ・スキャンを実行すると、破損ブランチ・ブロックおよび破損ルート・ブロックはスキップされません。ルート以外の破損しているリーフ・ブロックのみがスキップされます。
構文
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS ( schema_name IN VARCHAR2, object_name IN VARCHAR2, object_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT, flags IN BINARY_INTEGER DEFAULT SKIP_FLAG);
パラメータ
表131-11 SKIP_CORRUPT_BLOCKSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
処理するオブジェクトのスキーマ名。 |
|
オブジェクト名。 |
|
処理するオブジェクトのタイプ。 定数を参照してください。 |
|
定数を参照してください。 |