oracleのDBが SQLを実行した時にエラーを吐いて動かなくなってしまった時の対応方法のメモです。

SQL例外が発生しました。
理由:ORA-00376:ファイル4を読み込むことはできません。
ORA-01110:データファイル4:'/oracle/ORADATA/‥/DATAFILE/users.DBF

ディスクでもおかしくなったのかと、alert.logを確認。

KCF: write/open error block=0xe375 online=1
file=4 /oracle/ORADATA/‥/DATAFILE/O1_MF_UNDOTBS1_hoge_.DBF
error=27072 txt: 'OSD-04008: WriteFile() failure, unable to write to file
O/S-Error: (OS 33) プロセスはファイルにアクセスできません。
別のプロセスがファイルの一部をロックしています。'
Automatic datafile offline due to write error on
file 4: /oracle/ORADATA/・・/DATAFILE/O1_MF_UNDOTBS1_hoge_.DBF

datafile がどうやら悪さをしてくれているらしい・・・

では、確認・復旧をしてみる。

- SQL*Plusでログインする
$ sqlplus / as sysdba
- 表領域のステータスを確認します。
SQL> select tablespace_name, status from dba_tablespaces;
FILE_NAME    STATUS
------------ ---------
system.DBF   ONLINE
・・(省略)・・
users.DBF    ONLINE

どうやら正常そうなので、

- データファイルのステータスを確認します。
SQL> select name, status from v$datafile;
NAME                                      STATUS
-------------------------------           ---------
/ORACLE/ORADATA/‥/DATAFILE/system.DBF  ONLINE
・・(省略)・・
/ORACLE/ORADATA/‥/DATAFILE/users.DBF   RECOVERY

なぜに、リカバリになっているんだ。

- データファイルを が RECOVERY になっているのでリカバリをする。
SQL> recover datafile '/ORACLE/ORADATA/・・/DATAFILE/users.DBF';

- データファイルをオンラインに更新する。
SQL> alter database datafile /ORACLE/ORADATA/・・/DATAFILE/users.DBF online;

※復旧後のalertログ

ALTER DATABASE RECOVER  datafile '/ORACLE/ORADATA/‥/DATAFILE/users.DBF'
Media Recovery Datafile: '/ORACLE/ORADATA/‥/DATAFILE/users.DBF'
Media Recovery Start
Starting datafile 4 with incarnation depth 0 in thread 1 sequence 1122
Datafile 4: '/ORACLE/ORADATA/‥/DATAFILE/users.DBF'
Media Recovery Log
ORA-279 signalled during: ALTER DATABASE RECOVER  datafile '/ORACLE/ORADATA/‥...
ALTER DATABASE RECOVER    CONTINUE DEFAULT
Media Recovery Log F:/ARCHIVE/ARC01122_0719227292.001
Completed: ALTER DATABASE RECOVER    CONTINUE DEFAULT
alter database datafile '/ORACLE/ORADATA/‥/DATAFILE/users.DBF' online
Completed: alter database datafile '/ORACLE/ORADATA/‥/DATAFILE/users.DBF'

これで復旧終了!

Oracleバックアップ・リカバリ実践テクニック

Oracleデータベース バックアップリカバリテクニック

関連記事:

  1. OracleのDATA PUMP(expdp/impdp) でバックアップ
  2. ORACLE UTL_FILE パッケージの使い方
  3. シェル 制御文 その1(if文)