ORACLEデータベース によくあるエラ の解決策
プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com
適用範囲
Oracle データベース – エンタプライズバーション – 9.0.1.0 及びその以上
このファイルの内容はどんなプラットフォームにも適用できる
目的
このファイルはORA-1113エラの原因とその解決策を探るものである
解決ステップ
データファイルをリカバリするときにORA-1113エラがよく現れる。
ORA-01113エラの定義:
ORA-01113, 00000, “file %s needs media recovery”
Cause: An attempt was made to online or open a database with a file that
is in need of media recovery.
Action: First apply media recovery to the file.
ORA-01113エラが起こったら、常にORA-01110も付き添っている。
ORA-01113: file 28 needs media recovery
ORA-01110: data file 28: ‘/h04/usupport/app/oracle/oradata/index02.dbf’
このエラが現れたとはデータファイルも制御ファイルも、およびほかのデータファイルも最新バーションではない。
Oracle のデータ構造は密結合である。つまり、すべてのデータファイル、redoファイル及び制御ファイルがデータベースを起動した状態で、あるいはチェックポイントが終わった場合に同期的に保持する必要がある。
これはすべてのファイルSCN番号を同じように保持する必要がある。異なったSCN番号のデータファイルが現れたら、ORA-1113になる。
例えば、あるテーブルスペースがホットバックアップモードにあるなら、そのすべてのデータファイルのチェックポイントはバックアップが完了するまで、今の数値となる。もしホットバックアップの間に、データベースがシャットダウンして、リカバリをしなければ、ORA-1113になる。では、テーブルスペースにはせめて一つのデータファイルがバックアップし始めた。このデータファイルのSCNはほかの制御ファイルとテーブルスペースと比べて低くなるかもしれない。
データファイルをofflineに変更し、SCNを変わらないようにする。
もしデータファイルを先にリカバリせず、データファイルをonlineと変更していれば、そのSCNはほかの(online)データより古くなって、ORA-1113になる
まずはこれらのオペレーションを見てください:
v$LOGとv$LOGFILEの動的パフォーマンスビュ。
1.データベースが起動していなければ、データベースをmountしてください
SQL> STARTUP MOUNT;
2. データベースにリンクして、検索する:
SQL> connect / as sysdba
SQL> SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE#
FROM V$LOG V1, V$LOGFILE V2
WHERE V1.GROUP# = V2.GROUP# ;
これで、すべてのオンラインログファイル、該当するシーケンスをリストする。
次のステップはORA-1113の解決策を検討する。
可能な原因と解決策:
I.テーブルスペースをホットバックアップして、データベースを起動する
**********************************************************
1、データベースをmountする
SQL> STARTUP MOUNT;
2、データベースがシャットダウンするときに、どこのデータファイルがホットバックアップしているか見つけ出して、以下のようなクエリを実行してください:
SQL> SELECT V1.FILE#, NAME
FROM V$BACKUP V1, V$DATAFILE V2
WHERE V1.STATUS = ‘ACTIVE’ AND V1.FILE# = V2.FILE# ;
3、検索できた各データファイルに対して、以下のようなコマンドを実行する:
SQL> ALTER DATABASE DATAFILE ‘</path/filename>’ END BACKUP;
4、データベースを起動する
SQL> ALTER DATABASE OPEN;
II.バックアップからデータファイルをリカバリする。********************************************************************
- データベースはアーカイブモードである
1.データベースをmountする
SQL> STARTUP MOUNT;
2.データファイルをリカバリする
SQL> RECOVER DATAFILE ‘</path/filename>’ ;
テーブルスペースに複数のデータファイルをリカバリするときに、以下のようなコマンドを実行してください:
SQL> RECOVER TABLESPACE <tablespacename> ;
複数のテーブルスペースをリカバリする場合に以下のようなコマンドを実行してください:
SQL> RECOVER DATABASE;
- メディアリカバリ完了という知らせをもらうまで各アーカイブログを確認し続ける。オンラインログシーケンスとORA-280メッセージに使ったシーケンスを比べて、そのシーケンスにふさわしいredoの絶対パスを入力する。
- データベースを起動する
SQL> ALTER DATABASE OPEN;
B. データベースは非アーカイブモードの場合:
以下のようなクエリを実行する:
SQL> SELECT FILE#, CHANGE# FROM V$RECOVER_FILE;
CHANGE#がFIRST_CHANGE#の最小値より大きいの場合に、データファイルがリカバリできる。この場合はヒントによって、有効なオンラインログを提供してください。
CHANGE#がFIRST_CHANGE#の最小値より小さいの場合に、データファイルをリカバリ出来ないから、以下のような方法を選んでください:
-もし、データファイルが一時的なテーブルスペースあるいはインディクステーブルスペースに属していれば、ALTER DATABASE DATAFILE ” OFFLINE DROP文でデータファイルを削除してデータベースを起動する。起動出来たら、そのテーブルスペースを削除し、再構造してください。
-もし、データファイルがsystemテーブルあるいはundoテーブルスペースにあるなら、近頃のコピあるいはバックアップからデータファイルをリカバリする。この二つもなければ、データベースを完全にリカバリ出来ない。
III. データファイルあるいはテーブルスペースをオンラインに変更する
**********************************************
- データファイルをリカバリする:
SQL> RECOVER DATAFILE ‘</path/filename>’ ;
テーブルスペースをリカバリするときに、以下のようなコマンドを実行する:
SQL> RECOVER TABLESPACE <tablespacename> ;
データベースをリカバリするときに、以下のようなコマンドを実行する:
SQL> RECOVER DATABASE;
–注意:データベースをリカバリするときに、offlineのデータファイルがリカバリ出来ない。
2.各アーカイブログを確認して、メディアリカバリ完了という知らせをもらうまで各アーカイブログを確認し続ける。オンラインログシーケンスとORA-280メッセージに使ったシーケンスを比べて、そのシーケンスにふさわしいredoの絶対パスを入力する。
- データベースを起動する.
SQL> ALTER DATABASE OPEN; - リカバリするときに ‘USING BACKUP CONTROLFILE’オプションで不完全なリカバリを実行する
*******************************************************************************
もし、データベースをリカバリするときに”RECOVER DATABASE USING BACKUP CONTROLFILE;”オプションを指定したが、”UNTIL CANCEL”オプションを指定していない。”ALTER DATABASE OPEN RESETLOGS;”の時にORA-1113になる。
このトラブルを解決するステップ
1、以下のようなコマンドでリカバリする:
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
2、「cancle」コマンドでリカバリをキャンセルする;.
3、以下のようなコマンドでデータベースを起動する:
SQL> ALTER DATABASE OPEN RESETLOGS;
Comment