[Oracle] コピーして作成したデータベースの起動時にORA-00368エラーが発生 | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

オフラインバックアップをコピーして作成したあるデータベースを起動しようとするとORA-00368エラーが発生しました。

ORA-00368: REDOログ・ブロックでチェックサム・エラーが発生しました


どうやらREDOログファイルが壊れてしまったようです...

詳細なエラーメッセージは以下の通り。

ORA-00368: REDOログ・ブロックでチェックサム・エラーが発生しました
ORA-00353: ブロック1576(変更258365040、時間09/12/2005
11:25:32)付近のログが破損しています
ORA-00312: オンライン・ログ3 スレッド1: 'D:\ORACLE\ORADATA\ORCL\REDO03B.LOG'
ORA-00312: オンライン・ログ3 スレッド1: 'D:\ORACLE\ORADATA\ORCL\REDO03A.LOG'

グループ3がのログファイルが壊れているようです。


しかもv$logで確認したところ、このログファイルはアクティブなREDOログファイルのようです。


ということで、データベースがオープンできない限りは、ログファイルのスイッチも、クリアもできません。

そこで、リカバリを試みることにしました。


まず、データベースをmountモードで起動し、

startup mount
そしてRECOVERコマンドを取り消しベースで実行しました。

recover database until cancel;
すると、以下のようにログファイルを要求されました。

ORA-00279: 変更258365040(09/12/2005 11:43:25で生成)にはスレッド1が必要です
ORA-00289:
検討すべきログ・ファイル:D:\ORACLE\ORADATA\ORCL\ARCHIVE\1_4026.DBF
ORA-00280: 変更258365040(スレッド1)は順序番号4026に存在します。

ここで表示されているログファイルを指定してやればいいのですが、このログファイルはコピー元のデータベースでもまだアーカイブされていません。


仕方なくキャンセルしてみると、以下のエラーが発生しました。

ログの指定: {=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547: 警告: RECOVERは成功しましたがOPEN
RESETLOGSが次のエラーを受け取りました。
ORA-01194: ファイル1は一貫した状態にするためにさらにリカバリが必要です。
ORA-01110: データ・ファイル1: 'D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'


ORA-01112: メディア・リカバリが開始されていません
どうしても上記のログファイルによるリカバリが必要なようです。

当然、無理矢理データベースをオープンしてみてもエラーになります。

alter database open resetlogs;

ORA-01194: ファイル1は一貫した状態にするためにさらにリカバリが必要です。
ORA-01110: データ・ファイル1: 'D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'
そこで、コピー元のデータベースの方で、ログファイルをスイッチしてアーカイブさせ、

ALTER SYSTEM SWITCH LOGFILE;
アーカイブされたログファイルをコピーし、再びリカバリを試みました。

recover database until cancel;

ORA-00279: 変更258365040(09/12/2005 11:43:25で生成)にはスレッド1が必要です
ORA-00289:
検討すべきログ・ファイル:D:\ORACLE\ORADATA\ORCL\ARCHIVE\1_4026.DBF
ORA-00280: 変更258365040(スレッド1)は順序番号4026に存在します。
当然同じログファイルを要求されるわけですが、ここでこのログファイル名を指定すると、

ログの指定: {=suggested | filename | AUTO | CANCEL}
D:\ORACLE\ORADATA\ORCL\ARCHIVE\1_4026.DBF
今度は以下のようなメッセージが出ました。

ORA-00279: 変更258365338(09/12/2005 13:06:57で生成)にはスレッド1が必要です
ORA-00289:
検討すべきログ・ファイル:D:\ORACLE\ORADATA\ORCL\ARCHIVE\1_4027.DBF
ORA-00280: 変更258365338(スレッド1)は順序番号4027に存在します。
ORA-00278:
ログ・ファイル'D:\ORACLE\ORADATA\ORCL\ARCHIVE\1_4026.DBF'はこのリカバリでは必
要なくなりました
次のログファイル名が出ていますが、前のログファイルが必要なくなったというメッセージが出ているため、ここでキャンセルをしました。

ログの指定: {=suggested | filename | AUTO | CANCEL}
cancel
メディア・リカバリが取り消されました。
すると、リカバリが取り消されたというメッセージが出てきました。

ここでデータベースをRESETLOGSオプションを付けてオープンすると、

alter database open resetlogs;

無事オープンすることができました。

しかし、これで一件落着と言いたいところなのですが、このままにしておくとまた同じエラーが発生しました。

ここで少し気になったのはこのREDOログファイルを外付けHDDに配置していること。


REDOログファイルはオラクルの構成ファイルの中でも最も過酷にアクセスされるファイルの1つです。


外付けHDDに保存するのは結構危険なことなのかもしれません。

ということで、もう一度コピー元からすべてのデータファイルをコピーし、データベースを起動する前にREDOログファイルを内蔵HDDに移しました。

そして、データベースをmountモードで起動し、

startup mount
すべてのREDOログファイルの位置を変更し、

ALTER DATABASE RENAME FILE 'D:\ORACLE\ORADATA\ORCL\REDO01A.LOG' 
  TO 'C:\ORACLE\ORADATA\ORCL\REDO1A.LOG';
データベースをオープンすると、

ALTER DATABASE OPEN;

何の問題もなく起動しました。


その後しばらく使っていても、再起動してみてもまったく問題ありません。

やはり外付けHDDにREDOログファイルを配置するのがまずいのでしょうか?


よくわかりませんが、同じような問題が起こった場合には、REDOログファイルの配置場所についても疑ってみたほうがよさそうです。