Oracle 不完全リカバリで ORA-1194 が発生します

[質問]
until cancelを利用して不完全リカバリを実行すると下記のように ORA-01194 が発生し
OPENすることができません。

    SQL> recover database until cancel
    ORA-00279: 変更 42140(10/30/2001 10:36:58で生成)にはスレッド番号 1が必要です。
    ORA-00289: 検討すべきログ・ファイル:
    /home2/ora816/app/oracle/admin/s816/arch/s816_3.arc
    ORA-00280: 変更 42140(スレッド 1)は順序番号 3に存在します。


    ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
    
    ORA-00279: 変更 42150(10/30/2001 10:40:33で生成)にはスレッド番号 1が必要です。
    ORA-00289: 検討すべきログ・ファイル:
    /home2/ora816/app/oracle/admin/s816/arch/s816_4.arc
    ORA-00280: 変更 42150(スレッド 1)は順序番号 4に存在します。
    ORA-00278: ログ・ファイル
    /home2/ora816/app/oracle/admin/s816/arch/s816_3.arcはこのリカバリでは必要なくな
    りました。


    ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
    cancel
    ORA-01547: 警告: RECOVERは成功しましたがOPEN
    RESETLOGSが次のエラーを受け取りました。
    ORA-01194: ファイル 4は一貫した状態にするためにさらにリカバリが必要です。
    ORA-01110: データ・ファイル 4 :
    /home2/ora816/app/oracle/oradata/s816/users01.dbf
    

    ORA-01112: メディアのリカバリ処理が開始されていません。


    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    エラー行: 1: エラーが発生しました。
    ORA-01194: ファイル 4は一貫した状態にするためにさらにリカバリが必要です。
    ORA-01110: データ・ファイル 4 :
    /home2/ora816/app/oracle/oradata/s816/users01.dbf


[回答]
v$datafile_headerのfuzzy列を確認してください。

    SQL> select file#,status,format,recover,fuzzy,checkpoint_change# from v$datafile_header;

         FILE# STATUS      FORMAT REC FUZ CHECKPOINT_CHANGE#
    ---------- ------- ---------- --- --- ------------------
             1 ONLINE           8 YES NO               42150
             2 ONLINE           8 YES NO               42150
             3 ONLINE           8 YES NO               42150
             4 ONLINE           8 NO                   42220
             5 ONLINE           8 YES NO               42150


FUZZY列に値が入っていないファイルが存在していませんでしょうか。
データベースは、FUZZY列がすべてNOとなり、かつ全てのCHECKPOINT_CHANGE#が一致した状態で
OPENが可能となります。

shutdown abort時のデータファイルや、データベースの運用中にbegin backupを実行せずに取得
したバックアップを利用されている場合にはこのようにFUZZY列に値が入っていません。

  ※ データベースの運用中にbegin backupを実行せずに取得されたバックアップはOracleのリカバリ
     にはご利用になれませんのでご注意くださいませ。

通常、不完全回復を行うためには全てのデータファイルを以前のバックアップに戻した状態から
アーカイブREDOログを適用していく必要がございます。
この時、一部のデータファイルをバックアップに戻さず、shutdown abort時のファイルを使用されて
いるような場合に本現象が発生いたします。


[対処]
不完全リカバリを実行される場合には必ず全てのデータファイルをバックアップに戻した状態で
行ってください。また、全てのデータファイルのCHECKPOINT_CHANGE#が一致するまでアーカイブ
REDOログを適用してください。