Oracleデータブロック破損の検出と修復方法

Oracle Master Gold

Oracleデータベースの運用において、データブロックの破損はデータの整合性を損なうだけでなく、業務停止などの重大な障害に直結します。本記事では、物理的・論理的な破損を検出する主要ツール(DBVERIFY, DBMS_REPAIR, ANALYZE)と、RMANを用いたブロック単位の修復手順について解説します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

1. データブロック破損の検出ツール

破損の検出には、用途に応じた3つの主要なツールを使い分けます。

ツール名特徴用途
DBVERIFYOS上のコマンドラインツールデータファイルの物理的破損チェック
DBMS_REPAIRPL/SQLパッケージ破損ブロックの特定・スキップ・管理
ANALYZESQLコマンドオブジェクト(表・索引)構造の検証

1.1 DBVERIFYによる物理整合性チェック

dbvコマンドはデータベースの起動を問わず、データファイルに対して直接物理的な整合性チェックを行います。

$ dbv file=/u01/oradata/ORCL/users01.dbf

破損が検出された場合、Page X is marked corrupt のようにエラーが出力されます。

1.2 DBMS_REPAIRによる管理・修復

破損したブロックをテーブルとして管理したり、SQL実行時に破損ブロックを無視する設定が可能です。

破損ブロックの特定用テーブル作成:

BEGIN
  DBMS_REPAIR.ADMIN_TABLES (
    TABLE_NAME   => 'REPAIR_TABLE',
    TABLE_TYPE   => DBMS_REPAIR.REPAIR_TABLE,
    ACTION       => DBMS_REPAIR.CREATE_ACTION
  );
END;
/

オブジェクトの破損チェック実行:

DECLARE
  v_corrupt_count NUMBER;
BEGIN
  DBMS_REPAIR.CHECK_OBJECT (
    SCHEMA_NAME  => 'SCOTT',
    OBJECT_NAME  => 'EMP',
    OBJECT_TYPE  => DBMS_REPAIR.TABLE_OBJECT,
    REPAIR_TABLE_NAME => 'REPAIR_TABLE',
    CORRUPT_COUNT => v_corrupt_count
  );
END;
/

SQL実行時に破損ブロックをスキップする設定:

BEGIN
  DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
    SCHEMA_NAME  => 'SCOTT',
    OBJECT_NAME  => 'EMP',
    OBJECT_TYPE  => DBMS_REPAIR.TABLE_OBJECT,
    FLAGS        => DBMS_REPAIR.SKIP_FLAG
  );
END;
/

1.3 ANALYZE VALIDATE STRUCTURE の活用

特定のオブジェクトの整合性を検証します。

ANALYZE TABLE SCOTT.EMP VALIDATE STRUCTURE;

検証結果は DBA_TAB_CORRUPTIONS ビューで確認できます。

SELECT * FROM DBA_TAB_CORRUPTIONS;

2. データブロック破損の修復方法

破損が確認された場合、データの重要度に応じて適切なリカバリ手法を選択します。

2.1 RMANを用いたブロック・リカバリ(推奨)

データファイル全体をリストアすることなく、破損したブロックのみをバックアップから修復できるため、サービス停止時間を最小化できます。

破損ブロックの修復コマンド:

RMAN> BLOCKRECOVER DATAFILE 5 BLOCK 100,101;

現状の破損箇所の確認と修復:

RMAN> SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;

リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO CON_ID
---------- ---------- ---------- ------------------ --------- ----------
5 140 1 0 ALL ZERO 0

RMAN> BLOCKRECOVER DATAFILE 5 BLOCK 140;

recoverを25-03-10で開始しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=101 デバイス・タイプ=DISK

チャネルORA_DISK_1: ブロックをリストアしています
チャネルORA_DISK_1: バックアップ・セットからリストアするブロックを指定しています
データファイル00005のブロックをリストアしています
チャネルORA_DISK_1: バックアップ・ピース/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013k0ttf_1_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013k0ttf_1_1_1 タグ=TAG20250310T173439
チャネルORA_DISK_1: バックアップ・ピース1からブロックをリストアしました
チャネルORA_DISK_1: ブロックのリストアが完了しました。経過時間: 00:00:01

メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:03

recoverを25-03-10で終了しました

RMAN> VALIDATE DATAFILE 5;

validateを25-03-10で開始しています
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: データファイルの検証を開始しています
チャネルORA_DISK_1: 検証のためのデータファイルを指定しています
入力データファイル ファイル番号=00005 名前=/u01/app/oracle/oradata/V19/tbs24.dbf
チャネルORA_DISK_1: 検証が完了しました。経過時間: 00:00:01
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
5 OK 0 4609 12800 2273917
ファイル名: /u01/app/oracle/oradata/V19/tbs24.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 7936
Index 0 0
Other 0 255

validateを25-03-10で終了しました

2.2 エクスポート・インポートによるオブジェクト再作成

論理的な破損の場合や、上記手法が適用できない場合は、データを論理抽出して再構築します。

データ抽出:

$ expdp scott/password tables=emp directory=DATA_PUMP_DIR dumpfile=emp.dmp

データをエクスポート後、対象テーブルをDROPして再作成し、impdp でインポートしてください。


3. よくある質問(FAQ)

Q1. DBVERIFYはデータベース稼働中でも実行できますか?

A. はい。DBVERIFYはデータファイルに対してオフラインで実行するツールですが、整合性のチェックはオンラインのデータベースファイルに対しても可能です。

Q2. DBMS_REPAIRでスキップ設定したブロックは削除されますか?

A. いいえ。破損したままスキップされるだけですので、物理的な修復には必ずRMAN等によるリカバリが必要です。

Q3. 複数のツールで破損が検出される場合、どれを優先すべきですか?

A. 物理破損はRMANの BLOCKRECOVER での修復を最優先してください。論理破損であれば DBMS_REPAIR やオブジェクトの再作成を検討します。


まとめ

  • DBVERIFY は物理破損の早期発見に最適。
  • DBMS_REPAIR は障害調査と運用回避(スキップ)に有効。
  • RMANのBLOCKRECOVER はデータファイル単位の修復より高速で推奨される。
  • 定期的なバックアップと検証(VALIDATE)を組み合わせた運用を徹底しましょう。

本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。


[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました