Oracleデータベースの運用において、データブロックの破損はデータの整合性を損なうだけでなく、業務停止などの重大な障害に直結します。本記事では、物理的・論理的な破損を検出する主要ツール(DBVERIFY, DBMS_REPAIR, ANALYZE)と、RMANを用いたブロック単位の修復手順について解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. データブロック破損の検出ツール
破損の検出には、用途に応じた3つの主要なツールを使い分けます。
| ツール名 | 特徴 | 用途 |
| DBVERIFY | OS上のコマンドラインツール | データファイルの物理的破損チェック |
| DBMS_REPAIR | PL/SQLパッケージ | 破損ブロックの特定・スキップ・管理 |
| ANALYZE | SQLコマンド | オブジェクト(表・索引)構造の検証 |
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専門のエージェントで非公開求人をチェックしてみませんか?



コメント