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 が発生した場合には、バックアップを使ってデータ・ブロックの修復を行いましょう。
また、いざという時に失われてしまうデータが出ないよう、バックアップの運用管理を事前にきちんと整えることも大切です。