こんにちは!土門大貴(daikidomon)です。
データベースを起動しようとしてら「ORA-01157: データファイル5を識別/ロックできません」とエラーになりました。
以下、エラーの全文になります。
行1でエラーが発生しました。:
ORA-01157: データファイル5を識別/ロックできません -
DBWRトレース・ファイルを参照してください ORA-01110:
データファイル5: '/u01/app/oracle/oradata/ORCL18C/test001.dbf'
今回は「ORA-01157」が発生した時の対処方法を紹介したいと思います。
目次
エラー原因:データファイルが参照できない
原因は「制御ファイルに記録されているデータファイルに参照できない」とのことです。
ファイルが参照できない原因の多くは、
- データファイルをOSコマンドで削除した
- データファイル格納領域のマウントが外れてしまった
でしょう。
私の環境では誤ってOS上からファイルを消してしまいました。。。
しっかりとデータベースのバックアップを取得していれば
格納先にデータファイルをリストアすれば事象は解決します。
以下「ORA-01157」の全文になります。
SQL > startup
ORACLEインスタンスが起動しました。
Total System Global Area 1073740616 bytes
Fixed Size 8665928 bytes
Variable Size 373293056 bytes
Database Buffers 683671552 bytes
Redo Buffers 8110080 bytes
データベースがマウントされました。
ORA-01157: データファイル5を識別/ロックできません -
DBWRトレース・ファイルを参照してください ORA-01110:
データファイル5: '/u01/app/oracle/oradata/ORCL18C/test001.dbf'
ちなみにマウント時には制御ファイルの物理情報はローディングされているだけで
実際にオープンできるかまでは検証しません。
なのでマウントが完了してオープンのステータスのところでORAエラーが発生するわけです。
エラーの対象方法:データファイルをdrop offlineさせる
データベースのバックアップを取得していない場合は
- データベースをマウントモードで起動
- 「alter database datafile ~ drop offline」を実行
- データベースをオープン状態に変更
- 表領域を削除
することで解消することが出来ます。
以下解消方法です。
まずマウントモードで起動します。
SQL> shutdown immediate
SQL> startup mount;
次に対象の表領域を「drop offline」します。
alter database datafile '<対象データファイル>' offline drop ;
そしてデータベースの状態をオープンに変更します。
alter database open;
最後に対象の表領域を削除します。
drop tablespace '<対象表領域>' including contents;
これで正常にデータベースを起動できます。
念のため実行ログを残しておきます。
17:47:19 SQL> STARTUP MOUNT;
ORACLEインスタンスが起動しました。
Total System Global Area 1073740616 bytes
Fixed Size 8665928 bytes
Variable Size 373293056 bytes
Database Buffers 683671552 bytes
Redo Buffers 8110080 bytes
データベースがマウントされました。
17:47:35 SQL> ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL18C/test001.dbf' OFFLINE DROP ;
データベースが変更されました。
17:48:27 SQL> ALTER DATABASE OPEN;
データベースが変更されました。
17:49:29 SQL> drop tablespace test001 including contents;
表領域が削除されました。
今回の教訓はしっかりとデータベースのバックアップは取得しておきましょう。