Oracleエラー対応(ORA-01578):ORA-01578発生時の対処方法について

現役DBAが解説 ~Oracleエラー対応~

テーブルにアクセスした際に、データ・ブロックに問題があるとORA-01578エラー「Oracleデータ・ブロックに障害が発生しました」が発生します。

本記事では、ORA-01578発生時の対処方法をご紹介します。

1. エラーメッセージ

ORA-01578: ORACLE data block corrupted (file # string, block # string)
ORA-01578: Oracleデータ・ブロックに障害が発生しました(ファイル番号string、ブロック番号string)

2. 原因

破損したデータ・ブロックを参照しようとした際などに、ORA-01578が発生します。

SQL> SELECT * FROM TESTTABLE ;

*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 4, block # 1000)
ORA-01110: data file 4: '/u01/app/oracle/oradata/TESTDB/users01.dbf'

3. 対処方法

ORA-01578について、RMANを使った解消方法を紹介します。
RMANが使えない場合は、オブジェクトの再作成やデータインポートでの修復も可能ですが、バックアップの状況によって一部のデータが失われる可能性があります。

3-1 破損が記録されていることを確認する

以下のOSコマンドで、前回のバックアップの後に破損したデータ・ブロックの情報を確認できます。

SQL> SELECT * FROM V$DATABASE_BLOCK_CORRUPTION ;

記録されていなかった場合は、破損したデータ・ファイルの番号と、データ・ブロックの番号を確認してください。

3-2 RMANで修復する

以下のコマンドで、破損が記録されたデータ・ブロック全てを修復できます。

RMAN> RECOVER CORRUPTION LIST;

記録になかった場合など、特定のデータ・ファイルのデータ・ブロックを修復する場合は、以下のコマンドを使ってください。

RECOVER DATAFILE 4 BLOCK 1000 ;

4. 最後に

ORA-01578 が発生した場合には、バックアップを使ってデータ・ブロックの修復を行いましょう。

また、いざという時に失われてしまうデータが出ないよう、バックアップの運用管理を事前にきちんと整えることも大切です。