Oracleデータベースでは、データブロックの破損が発生することがあります。データブロックの破損が発生すると、データの整合性が損なわれ、SQLの実行エラーやデータの損失につながる可能性があります。本記事では、データブロック破損の検出および修復方法について解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. データブロック破損の検出方法
データブロックの破損を検出するための主要なツールには、以下の3つがあります。
DBVERIFY(物理ブロックの整合性チェック)DBMS_REPAIR(破損ブロックの管理・修復)ANALYZE VALIDATE STRUCTURE(破損ブロックの検出)
1.1 DBVERIFY を使用した物理ブロックの整合性チェック
DBVERIFY は、Oracleが提供するコマンドラインツールであり、データファイルの物理的な破損を検出するために使用されます。
使い方
$ dbv file=/u01/oradata/ORCL/users01.dbf
このコマンドを実行すると、指定したデータファイル (users01.dbf) に対してブロック破損のチェックが行われ、破損が検出されると報告されます。
出力例
DBVERIFY - Verification starting
Page 100 is marked corrupt
Page 101 is marked corrupt
DBVERIFY - Verification complete
このように、破損したページがある場合は報告されます。
1.2 DBMS_REPAIR を使用した破損ブロックの管理・修復
DBMS_REPAIR パッケージは、破損したブロックを特定し、適切な対処を行うために使用されます。
破損ブロックの特定
BEGIN
DBMS_REPAIR.ADMIN_TABLES (
TABLE_NAME => 'REPAIR_TABLE',
TABLE_TYPE => DBMS_REPAIR.REPAIR_TABLE,
ACTION => DBMS_REPAIR.CREATE_ACTION
);
END;
/
上記のPL/SQLブロックを実行すると、破損ブロックを記録するための REPAIR_TABLE が作成されます。
次に、テーブルの破損ブロックを検出します。
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;
/
REPAIR_TABLE に破損ブロックの情報が格納されます。
破損ブロックをスキップする設定
破損ブロックをスキップするための DBMS_REPAIR.SKIP_CORRUPT_BLOCKS を有効にします。
BEGIN
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
SCHEMA_NAME => 'SCOTT',
OBJECT_NAME => 'EMP',
OBJECT_TYPE => DBMS_REPAIR.TABLE_OBJECT,
FLAGS => DBMS_REPAIR.SKIP_FLAG
);
END;
/
この設定を行うと、SQL 実行時に破損ブロックを自動的にスキップするようになります。
1.3 ANALYZE VALIDATE STRUCTURE を使用した破損ブロックの検出
Oracle では ANALYZE VALIDATE STRUCTURE コマンドを使用して、オブジェクト内の破損ブロックを特定することができます。
使い方
ANALYZE TABLE SCOTT.EMP VALIDATE STRUCTURE;
このコマンドを実行すると、DBA_TABLES や DBA_OBJECTS に破損情報が記録されます。
破損がある場合、DBA_TAB_CORRUPTIONS ビューを確認できます。
SELECT * FROM DBA_TAB_CORRUPTIONS;
このビューに破損ブロックの情報が格納されている場合は、適切な修復措置を取る必要があります。
2. データブロック破損の修復方法
データブロックの破損が発見された場合、以下の方法で対応することができます。
DBMS_REPAIRを使用して破損ブロックをスキップする- RMAN(Recovery Manager)を使用してデータファイルをリカバリする
- 破損したオブジェクトをエクスポート・インポートして再作成する
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
2.1 RMAN を使用した修復
RMAN を使用して破損したブロックを修復することも可能です。
RMAN> BLOCKRECOVER DATAFILE 5 BLOCK 100,101;
このコマンドにより、データファイル 5 のブロック 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
データをエクスポート後、破損したテーブルを削除し、新しいテーブルを作成してデータをインポートします。
$ impdp scott/password tables=emp directory=DATA_PUMP_DIR dumpfile=emp.dmp
3. まとめ
DBVERIFYはデータファイルの物理破損を検出するツールDBMS_REPAIRは破損ブロックを検出し、スキップ設定が可能ANALYZE VALIDATE STRUCTUREはオブジェクトレベルで破損を検出する- RMAN やエクスポート・インポートを使用して修復可能
Oracleデータベースの運用では、定期的にデータブロックの整合性をチェックし、早期に問題を検出することが重要です。ぜひ、本記事の方法を活用し、データの整合性を維持してください。
[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント