Oracleをキレイにするために、使っていない表領域を整理しました。すると、Oracleのログに以下のエラーが出力されました。
行1でエラーが発生しました。:
ORA-01157: データファイル5を識別/ロックできません –
DBWRトレース・ファイルを参照してください ORA-01110:
データファイル5: ‘/u01/app/oracle/oradata/TS/TS001.dbf’
原因
これはデータファイルがOS的に見えなくなっている場合に発生します。データファイルがOS上から削除されてしまったか、NAS領域なのであればmountが外れてしまっている場合などが考えられます。私は表領域を整理する中で、誤って必要な表領域のデータファイルを物理削除してしまったようです。
ステップ① MOUNTモードで起動
データベースをシャットダウンして、MOUNTモードで起動します。
SQL> shutdown immediate
SQL> startup mount;
ORACLEインスタンスが起動しました。
Total System Global Area 1173240615 bytes
Fixed Size 8635922 bytes
Variable Size 373223054 bytes
Database Buffers 681671552 bytes
Redo Buffers 8120081 bytes
データベースがマウントされました。
MOUNTモードとは、制御ファイルの読み込みまでで、データベースファイルは読み込みません。
MOUNTモードの説明はこちらがわかりやすかったです。
https://sql-oracle.com/?p=56
ステップ② 表領域をdrop offlineする
エラーが発生した表領域を「drop offline」します。「drop offline」することで、指定したデータファイルをオフライン化して、削除対象としてマークします。
SQL> alter database datafile ‘<対象データファイルパス>’ offline drop ;
データベースが変更されました。
(例)alter database datafile ‘/u01/app/oracle/oradata/TS/ts001.dbf’ offline drop ;
ステップ③ データベースをopenする
SQL> alter database open;
データベースが変更されました。
ステップ④ 表領域を削除する
SQL> drop tablespace ‘<対象表領域名>’ including contents;
表領域が削除されました。
(例)drop tablespace ts001 including contents;
この後は、念のため再起動して完了です。
開発環境だからといって派手(雑に)に表領域を整理したせいで、いやー焦った焦った (;´∀`)