[Oracle]ORA-00444 , ORA-00604

Oracle

ORA-00444: background process “QMN0” failed while starting

ORA-00604: error occurred at recursive SQL level

バックグラウンドプロセスが何らかの理由でエラーとなっている。トレースファイルを参照してみる。ファイルは Errors in file xxxxxxxxxxxxxxxxx
特定のデータベースファイルのブロックが破損しているという記録であるなら,
ファイルNO とブロックNO を控え,以下のSQLを実行する

select segment_type,owner||'.'||segment_name from dba_extents
where file_id=ファイルNO
and ブロック番号 between block_id and block_id+blocks-1;

実行すると,破損の影響を受けているテーブル名が出力される

復旧方法

ひとまず Oracleサービスを再起動させてみる。これでなおる場合もある。
それでも (SELECT * FROM xxxxx でチェックしてみて)ブロック破損のエラーがでるのなら , もうそのテーブルを諦めてバックアップからテーブルとデータの復旧を試みる

該当テーブルを削除しインポートするなど。 DDLで作成してデータだけコピーするか。。

バックアップがなければ・・・・どうしようもないのあかなぁ。。 日頃からバックアップが必要なんでしょうね・・・・

取り出せるデータだけなんとか復旧してみる方法 (以下はネット上からかき集た情報)

SQLPlus xxxxxx / xxxxxxx as sysdba
SQL> ALTER SESSION SET events '10231 trace name context forever,level 10'
SQL> CREATE TABLE テーブル名_TMP AS SELECT * FROM テーブル名;
SQL>
select * from
テーブル名_TMP
;
取り出せたデータが表示されるはず。(表示されないデーターは残念ながら破損している)
SQL> drop table
テーブル名;
SQL> CREATE TABLE
テーブル名
AS SELECT * FROM
テーブル名_TMP
;

後は,索引やら制約やら定義してあげればよいかと。

コメント

スポンサーリンク
タイトルとURLをコピーしました