131 DBMS_REPAIR

DBMS_REPAIRパッケージには、データ破損修復プロシージャが含まれており、表および索引にある破損ブロックを検出して修復できます。可能な場合は破損をつき止め、再構築中または修復中にオブジェクトの使用を続行できます。

この章のトピックは、次のとおりです:

参照:

DBMS_REPAIRパッケージの使用方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

131.1 DBMS_REPAIRの概要

DBMS_REPAIRパッケージは、データベース管理者による使用のみを対象としています。アプリケーション開発者による使用は対象としていません。

131.2 DBMS_REPAIRのセキュリティ・モデル

このパッケージの所有者はSYSです。他のユーザーに実行権限は付与されていません。

131.3 DBMS_REPAIRの定数

DBMS_REPAIRパッケージは、パラメータ値の指定に使用するいくつかの列挙定数を定義します。列挙定数にはパッケージ名を接頭辞として付加する必要があります。たとえば、DBMS_REPAIR.TABLE_OBJECTと記述します。

次の表に、パラメータおよび列挙定数の一覧を示します。

表131-1 DBMS_REPAIRパラメータおよび列挙定数

パラメータ オプション タイプ 説明

object_type

  • TABLE_OBJECT

  • INDEX_OBJECT

  • CLUSTER_OBJECT

BINARY_INTEGER

-

action

  • CREATE_ACTION

  • DROP_ACTION

  • PURGE_ACTION

BINARY_INTEGER

-

table_type

  • REPAIR_TABLE

  • ORPHAN_TABLE

BINARY_INTEGER

-

flags

  • SKIP_FLAG

  • NOSKIP_FLAG

BINARY_INTEGER

-

object_id

  • ALL_INDEX_ID := 0

BINARY_INTEGER

修飾するすべてのオブジェクトをクリーンアップします。

wait_for_lock

  • LOCK_WAIT := 1

  • LOCK_NOWAIT := 0

BINARY_INTEGER

基礎となる表の((サブ)パーティション)オブジェクトで、DMLロックを取得するかどうかを指定します。

ノート:

デフォルトのtable_nameは、table_typeREPAIR_TABLEのときはREPAIR_TABLEで、table_typeORPHAN_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の例外

例外 説明 処置

942

指定した表が存在していないと、DROP_ACTION時にDBMS_REPAIR.ADMIN_TABLESによって戻されます。

-

955

指定した表がすでに存在していると、DBMS_REPAIR.CREATE_ACTIONによって戻されます。

-

24120

指定したDBMS_REPAIRプロシージャに無効なパラメータが渡されました。

有効なパラメータ値を指定するか、またはパラメータのデフォルトを使用してください。

24122

ブロック範囲の指定に誤りがあります。

BLOCK_STARTパラメータおよびBLOCK_ENDパラメータに正しい値を指定してください。

24123

指定した機能を使用しようとしましたが、その機能はまだ実装されていません。

この機能は使用しないでください。

24124

ACTIONパラメータに無効な値が指定されました。

ACTIONパラメータにはCREATE_ACTIONPURGE_ACTIONまたはDROP_ACTIONのいずれかを指定してください。

24125

DBMS_REPAIR.CHECK_OBJECTの実行後に削除または切り捨てられたオブジェクトの破損ブロックを修正しようとしました。

DBMS_REPAIR.ADMIN_TABLESで修復表をパージし、DBMS_REPAIR.CHECK_OBJECTを実行して、修正対象の破損ブロックがあるかどうかを確認してください。

24127

CREATE_ACTION以外のACTIONTABLESPACEパラメータが指定されました。

CREATE_ACTION以外のアクションの実行時には、TABLESPACEは指定しないでください。

24128

パーティション化されていないオブジェクトに対して、パーティション名が指定されました。

パーティション名は、オブジェクトがパーティション化されているときのみ指定してください。

24129

接頭辞を指定しないで、table_nameパラメータを渡そうとしました。

有効なtable_nameパラメータを渡してください。

24130

存在しない修復表または孤立した表を指定しようとしました。

table_nameパラメータに有効な値を指定してください。

24131

誤った定義内容の修復表または孤立した表を指定しようとしました。

正しく作成された表を参照する表名を指定してください。

24132

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パッケージのサブプログラム

サブプログラム 説明

ADMIN_TABLESプロシージャ

DBMS_REPAIRパッケージの修復表および孤立したキー表に対して、作成、パージおよび削除処理を実行する管理ファンクションを提供します。

CHECK_OBJECTプロシージャ

表または索引の破損を検出し、レポートします。

DUMP_ORPHAN_KEYSプロシージャ

破損データ・ブロック内の行を指す索引エントリをレポートします。

FIX_CORRUPT_BLOCKSプロシージャ

CHECK_OBJECTによって破損が検出されたブロックにソフトウェア破損のマークを付けます。

ONLINE_INDEX_CLEANファンクション

失敗または中断したオンラインでの索引の作成または再作成を手動でクリーンアップします。

REBUILD_FREELISTSプロシージャ

オブジェクトの空きリストを再作成します。

SEGMENT_FIX_STATUSプロシージャ

ビットマップ・エントリの破損状態を修正します。

SKIP_CORRUPT_BLOCKSプロシージャ

表および索引のスキャン時に破損マークのあるブロックを無視するか、または破損マークのあるブロックが検出された場合にORA-1578をレポートするかを設定します。

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プロシージャのパラメータ

パラメータ 説明

table_name

処理する表の名前。指定したtable_typeに基づいて、ORPHAN_KEY_TABLEまたはREPAIR_TABLEをデフォルト設定します。指定する場合は、表名に接頭辞ORPHAN_またはREPAIR_を付ける必要があります。

table_type

表のタイプ。ORPHAN_TABLEまたはREPAIR_TABLEのいずれかです。

「定数」を参照してください。

action

実行する管理アクションを示します。

CREATE_ACTIONPURGE_ACTIONまたはDROP_ACTIONのいずれかである必要があります。CREATE_ACTIONの指定時に、表がすでに存在しているとエラーが戻されます。PURGE_ACTIONを指定すると、存在しないオブジェクトに関連付けられている表内の行はすべて削除されます。DROP_ACTIONの指定時に、表が存在していないとエラーが戻されます。

CREATE_ACTIONを指定すると、DBA_<table_name>という名前の関連ビューが作成され、DROP_ACTIONを指定すると削除されます。このビューは、存在しないオブジェクトに関連付けられている行を排除するように定義されています。

SYSスキーマ内に作成されます。

定数を参照してください。

tablespace

表の作成時に使用する表領域を示します。

デフォルトでは、SYSのデフォルト表領域が使用されます。アクションがCREATE_ACTION以外のときに表領域を指定すると、エラーが戻されます。

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プロシージャのパラメータ

パラメータ 説明

schema_name

チェックするオブジェクトのスキーマ名。

object_name

チェックする表または索引の名前。

partition_name

チェックするパーティションまたはサブパーティションの名前。

パーティション・オブジェクトで、partition_nameを指定しない場合は、すべてのパーティションおよびサブパーティションがチェックされます。パーティション・オブジェクトで、指定したパーティションにサブパーティションが含まれている場合は、すべてのサブパーティションがチェックされます。

object_type

処理するオブジェクトのタイプ。TABLE_OBJECT(デフォルト)またはINDEX_OBJECTのいずれかです。

定数を参照してください。

repair_table_name

情報を移入する修復表の名前。

この表は、SYSスキーマに存在している必要があります。修復表を作成するには、ADMIN_TABLESプロシージャを使用します。デフォルト名は、REPAIR_TABLEです。

flags

将来の使用のために予約されています。

relative_fno

相対ファイル番号。ブロック範囲の指定時に使用します。

block_start

ブロック範囲を指定する場合に、最初に処理するブロックを指定します。オブジェクトが単一表、パーティションまたはサブパーティションの場合のみ指定できます。

block_end

ブロック範囲を指定する場合に、最後に処理するブロックを指定します。オブジェクトが単一表、パーティションまたはサブパーティションの場合のみ指定できます。block_startまたはblock_endのいずれか一方のみ指定した場合、他方の値は、ファイル内の第1ブロックまたは最終ブロックにそれぞれデフォルト設定されます。

corrupt_count

レポートされた破損数。

使用上のノート

オブジェクトの一部をチェック対象とする場合は、オプションで、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プロシージャのパラメータ

パラメータ 説明

schema_name

スキーマ名。

object_name

オブジェクト名。

partition_name

処理するパーティションまたはサブパーティションの名前。

パーティション・オブジェクトで、partition_nameが指定されていない場合は、すべてのパーティションおよびサブパーティションが処理されます。パーティション・オブジェクトで、指定したパーティションにサブパーティションが含まれている場合は、すべてのサブパーティションが処理されます。

object_type

処理するオブジェクトのタイプ。デフォルトはINDEX_OBJECTです。

定数を参照してください。

repair_table_name

元表の破損ブロックに関する情報を含んだ修復表の名前。

指定した表は、SYSスキーマに存在している必要があります。表を作成するには、ADMIN_TABLESプロシージャを使用します。

orphan_table_name

破損データ・ブロック内の行を参照する各索引エントリに関する情報を移入する孤立したキー表の名前。

指定した表は、SYSスキーマに存在している必要があります。表を作成するには、ADMIN_TABLESプロシージャを使用します。

flags

将来の使用のために予約されています。

key_count

処理された索引エントリ数。

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プロシージャのパラメータ

パラメータ 説明

schema_name

スキーマ名。

object_name

修正対象の破損ブロックがあるオブジェクトの名前。

partition_name

処理するパーティションまたはサブパーティションの名前。

パーティション・オブジェクトで、partition_nameが指定されていない場合は、すべてのパーティションおよびサブパーティションが処理されます。パーティション・オブジェクトで、指定したパーティションにサブパーティションが含まれている場合は、すべてのサブパーティションが処理されます。

object_type

処理するオブジェクトのタイプ。TABLE_OBJECT(デフォルト)またはINDEX_OBJECTのいずれかです。

定数を参照してください。

repair_table_name

修復指示を含んだ修復表の名前。

SYSスキーマに存在している必要があります。

flags

将来の使用のために予約されています。

fix_count

修正されたブロック数。

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ファンクションのパラメータ

パラメータ 説明

object_id

クリーンアップする索引のオブジェクトID。デフォルトでは、修飾するすべてのオブジェクトをクリーンアップします。

wait_for_lock

このパラメータは、基礎となる表の((サブ)パーティション)オブジェクトで、DMLロックを取得するかどうかを指定します。デフォルトでは、内部の再試行制限回数まで再試行した後、ロックの取得を中止します。LOCK_NOWAITを指定した場合、ロックの取得は再試行されません。

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プロシージャのパラメータ

パラメータ 説明

schema_name

スキーマ名。

object_name

空きリストを再作成するオブジェクトの名前。

partition_name

空きリストを再作成するパーティションまたはサブパーティションの名前。

パーティション・オブジェクトで、partition_nameが指定されていない場合は、すべてのパーティションおよびサブパーティションが処理されます。パーティション・オブジェクトで、指定したパーティションにサブパーティションが含まれている場合は、すべてのサブパーティションが処理されます。

object_type

処理するオブジェクトのタイプ。TABLE_OBJECT(デフォルト)またはINDEX_OBJECTのいずれかです。

「定数」を参照してください。

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プロシージャのパラメータ

パラメータ 説明

schema_owner

セグメントのスキーマ名。

segment_name

セグメント名。

partition_name

オプション。個々のパーティション名。NULLは非パーティション化オブジェクトを示します。デフォルトはNULLです。

segment_type

セグメントのオプション・タイプ(TABLE_OBJECTINDEX_OBJECTなど)。デフォルトはNULLです。

file_number

(オプション)ステータスを固定する必要のあるデータ・ブロックの、相対表領域ファイル番号。省略した場合、セグメント内の全ブロックで、状態が正しいかどうかチェックされ修正が行われます。

block_number

(オプション)ステータスを固定する必要のあるデータ・ブロックの、相対ファイル・ブロック番号。省略した場合、セグメント内の全ブロックで、状態が正しいかどうかチェックされ修正が行われます。

status_value

(オプション)file_numberおよびblock_numberで示したブロック・ステータスが設定される値。省略すると、ブロックの現在の状態に基づいてステータスが設定されます。ほとんどの場合がこれに該当しますが、計算アルゴリズムにバグがある場合は手動で値を設定します。ステータス値は次のとおりです。

  • 1 = ブロックがいっぱいです。

  • 2 = ブロックに0から25%の空きがあります。

  • 3 = ブロックに25から50%の空きがあります。

  • 4 = ブロックに50から75%の空きがあります。

  • 5 = ブロックに75から100%の空きがあります。

ビットマップ・ブロック、セグメント・ヘッダーおよびエクステント・マップ・ブロックのステータスは変更できません。固定ハッシュ領域のブロックのステータスは変更できません。索引ブロックのステータスは「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プロシージャのパラメータ

パラメータ 説明

schema_name

処理するオブジェクトのスキーマ名。

object_name

オブジェクト名。

object_type

処理するオブジェクトのタイプ。TABLE_OBJECT(デフォルト)またはCLUSTER_OBJECTのいずれかです。

定数を参照してください。

flags

SKIP_FLAGを指定すると、索引および表のスキャン時に、そのオブジェクトのソフトウェア破損ブロックのスキップがオンになります。NOSKIP_FLAGを指定すると、ソフトウェア破損ブロックが検出されたときに、ORA-1578エラーが戻されます。

定数を参照してください。