不完全リカバリの方式において、時間ベース(指定した時間までリカバリを実施)と変更ベース(特定のSCN:システム変更番号までリカバリを実施)については、OSコマンドを使用した場合と同様にRMANでも指定可能です。取り消しベースについてはRMANで行うことはできませんが、ログ順序番号を指定することで不完全リカバリを行うことは可能です(リスト10)。
  
          set until time= 'YYYY/MM/DD HH24:MI:SS'   ←(1) 
      set until scn=数字                        ←(2) 
      set until sequence=数字 thread=数字        ←(3) | 
  
  
    リスト10 RMANで不完全リカバリ時のリカバリポイントの指定方法 
  (1)時間ベースで指定 
  (2)変更ベースで指定 
  (3)ログ順序番号で指定 | 
  
 また、不完全リカバリからの復旧方法についても「OSコマンド」と同様に、一部のデータファイルのみが古い/新しいなどの状態は認められません。そのため、データベースを過去の状態に戻したい場合には、障害の発生していないデータファイルも含め、全データファイルをバックアップファイルからリストアを行い、必要な時点までのアーカイブREDOログファイルをすべて適用することになります。
 今回も、アーカイブREDOログファイルの一部が消失してしまった場合を例に挙げて、RMANでの復旧方法を説明していきます。
 不完全リカバリを実施するためには、ターゲット・データベースはマウントモードで起動し直す必要があります。ターゲット・データベースが起動している場合は一度停止してからマウントモードに変更します。
 RMANで不完全リカバリを行う場合は、リスト11の(1)のように、「RUN{ }」内で「RESOTRE」「RECOVER」コマンドよりも先にリカバリポイントを指定します。今回のように、順序番号「379」のアーカイブREDOログファイルが破損している場合は、「sequence=379」と記述することにより、「RECOVER」コマンド時に、それより1つ前の順序番号「378」までRMANがアーカイブREDOログの適用を自動的に行います。
 ターゲット・データベースをマウントモードにして障害の発生していないファイルを含むすべてのデータファイルを、既存のデータファイルと置き換えます。今回は正常なファイルも古いファイルに置き換えるため、リスト11の(2)のように「RESTORE DATABASE」コマンドに「force」句を付け加えることにより、正常なものを強制的に古い状態とさせています。
 今回は、すべてのデータファイルが古い状態でリストアされているので、リスト11の(3)のように「RECOVER」コマンドについてもデータベース指定となります。
 最後に、データベースはリスト11の(4)のように「RESETLOGS」モードでオープンさせます。ここもOSコマンド時と同じく、不完全リカバリを実行した場合には、必ず「RESETLOGS」オプションを指定してデータベースを起動する必要があります。これにより、オンラインREDOログファイルが初期化されます。
  
          RMAN> run{ 
      2> set until sequence = 379 thread = 1;    ←(1) 
      3> restore database force;                 ←(2) 
      4> recover database;                       ←(3) 
      5> alter database open resetlogs;          ←(4) 
      6>    } 
      実行コマンド: SET until clause 
      restoreが開始されました(開始時間: 2007/03/04 20:26:30) 
      チャネル: ORA_DISK_1が割り当てられました 
      チャネルORA_DISK_1: sid=157 devtype=DISK 
      チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています。 
      チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています 
      データファイル00001を/opt/app/oracle/oradata/system01.dbfへリストア 
      データファイル00002を/opt/app/oracle/oradata/undotbs01.dbfへリストア 
      データファイル00003を/opt/app/oracle/oradata/sysaux01.dbfへリストア 
      データファイル00004を/opt/app/oracle/oradata/users01.dbfへリストア 
      データファイル00005を/opt/app/oracle/oradata/example01.dbfへリストア 
      チャネルORA_DISK_1: バックアップ・ピース/opt/app/oracle/oraback/full_db_1gibprn4_1_1から読取り中です 
      チャネルORA_DISK_1: バックアップ・ピース1がリストアされました 
      ピース・ハンドル=/opt/app/oracle/oraback/full_db_1gibprn4_1_1 タグ=TAG20070304T193500 
      チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:04:07 
      restoreが完了しました(完了時間: 2007/03/04 20:30:41) 
      recoverが開始されました(開始時間: 2007/03/04 20:30:42) 
      チャネルORA_DISK_1の使用 
      メディア・リカバリを開始しています 
      アーカイブ・ログ・スレッド: 1、順序: 263は、ファイル: /opt/app/oracle/archive/1_263_616340345.dbfとしてディスクに存在します 
       
      ……省略…… 
       
      チャネルORA_DISK_1: デフォルトの宛先へのアーカイブ・ログのリストアを開始しています 
      チャネルORA_DISK_1: アーカイブ・ログをリストアしています 
      アーカイブ・ログ・スレッド=1 順序=262 
      チャネルORA_DISK_1: バックアップ・ピース/opt/app/oracle/oraback/full_db_1iibps3o_1_1から読取り中です 
      チャネルORA_DISK_1: バックアップ・ピース1がリストアされました 
      ピース・ハンドル=/opt/app/oracle/oraback/full_db_1iibps3o_1_1 タグ=TAG20070304T194143 
      チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:02 
       
      ……省略…… 
       
      アーカイブ・ログ・ファイル名=/opt/app/oracle/archive/1_378_616340345.dbf スレッド=1 順序=378 
      メディア・リカバリが完了しました。経過時間: 00:08:30 
      recoverが完了しました(完了時間: 2007/03/04 20:39:23) 
      データベースがオープンしました。 | 
  
  
    | リスト11 不完全リカバリ時のRMANコマンド例 | 
  
 今回はデータファイルに対して発生した障害からのリストア、リカバリ方法を説明しました。次回は、ノーアーカイブログ運用でのリカバリ方法、および制御ファイルのリストアについて説明します。(次回へ続く)