ヘッダーをスキップ
Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド
11g リリース2(11.2)
B56269-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

17 データベースの完全リカバリの実行

この章では、1つ以上のデータファイルが消失した後、RMANを使用してデータベースを通常の稼働状態に戻す方法について説明します。この章の内容は次のとおりです。

データベースの完全リカバリの概要

この項では、データベースの完全リストアおよびリカバリの目的およびこの章の概要について説明します。

データベースの完全リカバリの目的

この章では、データファイルの一部またはすべてが消失または破損したと想定しています。通常、この状況は、メディア障害または誤った削除によって発生します。破損したファイルをRMANバックアップからリストアし、すべてのデータベース変更をリカバリすることによって、データベースを通常の稼働状態に戻す必要があります。

この章の概要

この章では、完全リカバリを使用して最も一般的なデータベースの問題を解決する方法について説明します。この章では、次のことを想定しています。

  • 一部またはすべてが消失したデータファイルがあり、すべての変更をリカバリすることが目標です。ただし、現行のすべての制御ファイルまたはオンラインREDOログ・グループ全体は消失していません。

    すべてのデータベースの変更ではなく、一部の変更をリカバリする方法については、第18章「フラッシュバックおよびデータベースのPoint-in-Timeリカバリの実行」を参照してください。第30章「ユーザー管理のリカバリの実行: 高度な例」では、現行のすべての制御ファイルではなく一部の制御ファイルを消失したとき、またはオンラインREDOログ・グループのメンバーを消失したときに対応する方法について説明します。「バックアップ制御ファイルを使用したリカバリの実行」では、すべての制御ファイルを消失したときにデータベースをリカバリする方法について説明します。

  • データベースでは、現行のサーバー・パラメータ・ファイルが使用されています。

    バックアップ・サーバー・パラメータ・ファイルをリストアするには、「サーバー・パラメータ・ファイルのリストア」を参照してください。

  • データファイルのバックアップのリカバリに必要なすべてのアーカイブREDOログおよび増分バックアップが存在します。すべてのデータファイルには、バックアップ、またはバックアップなしでデータファイルを作成した時点からのすべてのオンラインおよびアーカイブREDOログが存在します。

    RMANは、リストアおよびリカバリ時に、消失したデータファイルを処理できます。ユーザーが手動で操作を行う必要はありません。データファイルが消失している場合、次のような状況が考えられます。

    • 制御ファイルにデータファイルのレコードが含まれている(データファイルの作成後に制御ファイルをバックアップしているが、データファイル自体はバックアップしていない)。データファイルのレコードが制御ファイルに含まれている場合、RESTOREを実行すると、元の場所またはユーザーが指定する場所にデータファイルが作成されます。その後、RECOVERコマンドを実行すると、必要なログをデータファイルに適用できます。

    • 制御ファイルにデータファイルのレコードが含まれていない(データファイルの作成後に制御ファイルをバックアップしていない)。 リカバリ時に、データベースは、欠落しているデータファイルを検出してRMANに報告し、RMANは、新しいデータファイルを作成し、残りのログを適用してリカバリを続行します。データファイルが親インカネーション内に作成されている場合は、必要に応じて、リストアまたはリカバリ・フェーズ中にデータファイルが作成されます。

  • 暗号化された表領域は、リストアおよびリカバリしません。

    暗号化された表領域でメディア・リカバリを実行する場合は、この表領域のメディア・リカバリの実行時に、Oracleウォレットをオープンする必要があります。暗号化された表領域については、『Oracle Database管理者ガイド』を参照してください。

  • データベースは、シングル・インスタンス構成で実行されています。

    RMANは、Oracle RACおよびData Guard構成でデータベースをリストアおよびリカバリできますが、このマニュアルではこれらの例については説明しません。

  • Oracle Enterprise ManagerではなくRMANクライアントを使用しています。

    Enterprise Managerでは、一連のウィザードによってRMANにアクセスできます。これらのウィザードは、データベース、使用可能なバックアップおよびデータ・リカバリの目的の分析に基づいて、様々なリカバリ手順を提供します。

    Enterprise Managerを使用することによって、この章で説明する簡単なリストアおよびリカバリの例を実行できます。また、Point-in-Timeリカバリやデータベースのフラッシュバックなどのより高度なリストアおよびリカバリ方法を使用して、メディア障害およびユーザー・エラーを効率的に修復することもできます。通常、Enterprise ManagerのほうがRMANコマンドライン・クライアントを直接使用するより簡単です。


関連項目:

  • Oracle RACでのRMANの使用の詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

  • Data GuardでのRMANの使用の詳細は、『Oracle Data Guard概要および管理』を参照してください。

  • Enterprise Managerのリストアおよびリカバリ機能の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。


データベースの完全リカバリの準備

RMANによってデータベースのほとんどのリストアおよびリカバリ・タスクは簡単になりますが、データベースのリストアおよびリカバリ計画は、消失したデータベース・ファイルおよびリカバリの目標に基づいて作成する必要があります。この項の内容は、次のとおりです。

リストアまたはリカバリするデータファイルの識別

リストアまたはリカバリが必要なファイルを判別する方法は、消失したファイルのタイプによって異なります。

消失した制御ファイルの識別

通常、データベースの制御ファイルが消失した日時は明らかです。多重制御ファイルのいずれかがアクセス不可能になると、データベースは即時に停止します。また、CONTROL_FILES初期化パラメータに指定された有効な制御ファイルがそれぞれの場所に存在しない状態でデータベースを起動しようとした場合も、データベースによってエラーがレポートされます。

制御ファイルのコピーのすべてではなく一部が消失した場合は、バックアップから制御ファイルをリストアする必要はありません。影響を受けていない制御ファイルが1つ以上存在する場合は、影響を受けていない制御ファイルを破損または消失した制御ファイルにコピーするか、または破損または消失した制御ファイルを参照しないように初期化パラメータ・ファイルを更新することができます。存在し、影響を受けていない制御ファイルのコピーのみをCONTROL_FILESパラメータが参照するようにした後で、データベースを再起動できます。

制御ファイルをバックアップからリストアする場合は、データファイルをリストアする必要がない場合でも、データベース全体のメディア・リカバリを実行してから、OPEN RESETLOGSオプションを使用してデータベースをオープンする必要があります。この方法については、「バックアップ制御ファイルを使用したリカバリの実行」を参照してください。

メディア・リカバリが必要なデータファイルの識別

リカバリを実行するタイミングと方法は、データベースの状態とデータファイルの場所によって異なります。

RMANを使用したデータファイルの識別

欠落しているデータファイルを判別する簡単な方法は、指定したすべてのデータファイルの読取りを試行するVALIDATE DATABASEコマンドを実行することです。たとえば、RMANクライアントを起動し、次のコマンドを実行してデータベースを検証します(出力例も示します)。

例17-1 BACKUP VALIDATE DATABASE

RMAN> VALIDATE DATABASE;

Starting validate at 20-OCT-06
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=90 device type=DISK
could not read file header for datafile 7 error reason 4
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 10/20/2007 13:05:43
RMAN-06056: could not access datafile 7

例17-1の出力は、データファイル7がアクセス不可能であることを示しています。この場合は、REPORT SCHEMAコマンドを次のように実行して、データファイル7の表領域名およびファイル名を取得できます(出力例も示します)。

RMAN> REPORT SCHEMA;
 
Report of database schema for database with db_unique_name RDBMS
 
List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    450      SYSTEM               ***     +DATAFILE/tbs_01.f
2    86       SYSAUX               ***     +DATAFILE/tbs_ax1.f
3    15       UD1                  ***     +DATAFILE/tbs_undo1.f
4    2        SYSTEM               ***     +DATAFILE/tbs_02.f
5    2        TBS_1                ***     +DATAFILE/tbs_11.f
6    2        TBS_1                ***     +DATAFILE/tbs_12.f
7    2        TBS_2                ***     +DATAFILE/tbs_21.f
 
List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    40       TEMP                 32767       +DATAFILE/tbs_tmp1.f
SQLを使用したデータファイルの識別

VALIDATE DATABASEはファイルがアクセス不可能かどうかを確認する場合の最適な方法ですが、SQL問合せを使用してより詳細な情報を取得する必要がある場合があります。

データファイルにメディア・リカバリが必要かどうかを確認する手順

  1. SQL*Plusを起動し、管理者権限でターゲット・データベース・インスタンスに接続します。

  2. 次のSQL問合せを実行して、データベースのステータスを確認します。

    SELECT STATUS FROM V$INSTANCE;
    

    状態がOPENの場合、データベースはオープン状態です。ただし、一部のデータファイルにメディア・リカバリが必要な場合があります。

  3. V$DATAFILE_HEADERを問い合せて、データファイルのステータスを確認します。次のSQL文を実行して、データファイルのヘッダーを確認します。

    SELECT FILE#, STATUS, ERROR, RECOVER, TABLESPACE_NAME, NAME 
    FROM   V$DATAFILE_HEADER 
    WHERE  RECOVER = 'YES' 
    OR     (RECOVER IS NULL AND ERROR IS NOT NULL);
    

    戻される各行は、メディア・リカバリが必要なデータファイルまたはリストアが必要なエラー発生しているデータファイルを表します。RECOVERおよびERROR列を確認します。RECOVERには、ファイルにメディア・リカバリが必要かどうかが示され、ERRORには、データファイルのヘッダーの読取り時および検証時にエラーが発生したかどうかが示されます。

    ERRORNULLでない場合は、データファイルのヘッダーの読取りおよび検証は実行できません。エラーの原因となるハードウェアまたはオペレーティング・システムの一時的な問題がないかどうかを確認します。問題がない場合は、ファイルをリストアしてコピーに切り替える必要があります。

    ERROR列がNULLで、RECOVER列がYESの場合、ファイルにはメディア・リカバリが必要です(バックアップからリストアする必要がある場合もあります)。


    注意:

    V$DATAFILE_HEADERは各データファイルのヘッダー・ブロックのみを読み取るため、データファイルのリストアが必要となるすべての問題を検出するわけではありません。たとえば、このビューではデータファイルに破損したデータ・ブロックが含まれているかどうかは確認できません。

  4. 必要に応じて、V$RECOVER_FILEを問い合せて、リカバリが必要なデータファイルをそのステータス情報およびエラー情報とともにデータファイル番号で表示します。たとえば、次の問合せを実行します。

    SELECT FILE#, ERROR, ONLINE_STATUS, CHANGE#, TIME 
    FROM   V$RECOVER_FILE;
    

    注意:

    V$RECOVER_FILEは、バックアップからリストアされた制御ファイル、またはデータファイルに影響を及ぼすメディア障害の発生後に再作成された制御ファイルには使用できません。リストアされた制御ファイルまたは再作成された制御ファイルには、V$RECOVER_FILEを正確に更新するために必要な情報が含まれていません。

    データファイルおよび表領域の名前を取得するために、データファイル番号、V$DATAFILEおよびV$TABLESPACEビューを使用して、有効な結合を実行することもできます。次に例を示します。

    SELECT r.FILE# AS df#, d.NAME AS df_name, t.NAME AS tbsp_name, 
           d.STATUS, r.ERROR, r.CHANGE#, r.TIME
    FROM V$RECOVER_FILE r, V$DATAFILE d, V$TABLESPACE t
    WHERE t.TS# = d.TS#
    AND d.FILE# = r.FILE#;
    

    ERROR列で、リカバリが必要な各ファイルに関する問題を識別します。


関連項目:

V$ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

データベースのDBIDの確認

自動バックアップからのサーバー・パラメータ・ファイルまたは制御ファイルのリカバリが必要な状況では、DBIDがわかっている必要があります。DBIDは、データベースに関する他の基本情報とともに記録する必要があります。

データベースのDBIDの記録がない場合は、データベースをオープンせずに次の場所で参照することができます。

  • DBIDは、制御ファイルの自動バックアップのファイル名の一部に使用されています。制御ファイルを検索した後、「制御ファイルの自動バックアップ書式の構成」を参照して、ファイル名のどこにDBIDが表示されるかを確認します。

  • RMANセッションからの出力を保持するテキスト・ファイルがある場合、DBIDは、RMANクライアントが起動してデータベースに接続する際に表示されます。通常の出力を次に示します。

    % rman TARGET /
    
    Recovery Manager: Release 11.1.0.6.0 - Production on Wed Jul 11 17:51:30 2007
     
    Copyright (c) 1982, 2007, Oracle.  All rights reserved.
     
    connected to target database: PROD (DBID=36508508)
    

リストア操作で使用されるバックアップのプレビュー

RESTORE ... PREVIEWを任意のRESTORE操作に適用すると、要求されたRESTORE操作で使用されるすべてのバックアップ、およびRESTORE操作完了後のリカバリに必要な目的のSCNの詳細なリストを作成できます。このコマンドは、RMANリポジトリにアクセスしてバックアップ・メタデータを問い合せますが、実際にバックアップ・ファイルを読み取ってリストア可能であることは確認しません。

RESTORE ... PREVIEWの代替として、RESTORE ... VALIDATE HEADERコマンドを使用できます。RESTORE ... VALIDATE HEADERコマンドは、リストアおよびリカバリに必要なファイルを一覧表示する以外に、バックアップ・ファイル・ヘッダーを検証して、ディスク上またはメディア管理カタログ内のファイルが、RMANリポジトリのメタデータに対応しているかどうかを確認します。

リストアおよびリカバリ操作を計画する場合は、RESTORE ... PREVIEWまたはRESTORE ... VALIDATE HEADERを使用して、必要なすべてのバックアップが使用可能であることを確認するか、または特定のバックアップの使用または回避をRMANに指示する必要がある状況を識別します。

リストア操作で使用されるバックアップをプレビューする手順

  1. PREVIEWオプションを指定してRESTOREコマンドを実行します。

    たとえば、次のいずれかのコマンドを実行します。

    RESTORE DATABASE PREVIEW;
    RESTORE ARCHIVELOG FROM TIME 'SYSDATE-7' PREVIEW;
    

    RESTORE ... PREVIEWによって生成されるレポートの情報が多すぎる場合は、次の例に示すようにSUMMARYオプションを指定します。

    RESTORE DATABASE PREVIEW SUMMARY;
    

    出力が適切である場合は、ここで停止します。一時的に使用できないことがわかっているテープからのバックアップをRMANが要求することが出力に示された場合は、この手順を続行します。バックアップがオフサイトに格納されていることが出力に示された場合は、「オフサイト・バックアップのリコール」に進みます。

  2. 必要に応じて、CHANGEコマンドを使用して、一時的に使用できないバックアップのバックアップ・ステータスをUNAVAILABLEに設定します。

    このタスクの実行方法については、「AVAILABLEまたはUNAVAILABLEへのバックアップのステータスの更新」を参照してください。

  3. 必要に応じて、RESTORE ... PREVIEWを再度実行して、使用できないバックアップがリストアで使用されないことを確認します。


関連項目:

RESTORE ... PREVIEWの出力(LISTコマンドの出力と同じ書式)の解釈の詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

オフサイト・バックアップのリコール

一部のメディア・マネージャは、オフサイトにあるバックアップに関するステータス情報をRMANに提供します。オフサイト・バックアップは、安全なストレージ設備などのリモートの場所に格納され、メディア・マネージャがメディアを取り込まないかぎりリストアできません。

バックアップをリストアする前にストレージからメディアを取り込む必要がある場合でも、オフサイト・バックアップは、RMANリポジトリでAVAILABLEとマークが付けられます。RMANがオフサイト・バックアップのリストアを試みると、リストア・ジョブに失敗します。

RESTORE ... PREVIEWを使用すると、オフサイト・バックアップを確認できます。例17-2のサンプル出力の最後にあるテキストに示すように、コマンドの出力には、バックアップがオフサイトに格納されたかどうかが示されます。

例17-2 RESTORE ... PREVIEWの出力

List of Backup Sets
===================


BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
9       2.25M      SBT_TAPE    00:00:00     21-MAY-07
        BP Key: 9   Status: AVAILABLE  Compressed: NO  Tag: TAG20070521T144258
        Handle: 0aii9k7i_1_1   Media: 0aii9k7i_1_1
 
  List of Archived Logs in backup set 9
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    1       392314     21-MAY-07 392541     21-MAY-07
  1    2       392541     21-MAY-07 392545     21-MAY-07
  1    3       392545     21-MAY-07 392548     21-MAY-07
  1    4       392548     21-MAY-07 395066     21-MAY-07
  1    5       395066     21-MAY-07 395095     21-MAY-07
  1    6       395095     21-MAY-07 395355     21-MAY-07
 
List of remote backup files
============================
        Handle: aii9k7i_1_1   Media: 0aii9k7i_1_1
validation succeeded for backup piece
Finished restore at 21-MAY-07
released channel: dev1

RESTORE ... PREVIEW RECALLを使用すると、オフサイト・バックアップを使用可能にするようにメディア・マネージャに指示できます。

オフサイト・バックアップをリコールする手順

  1. バックアップがオフサイトに格納されている場合、RECALLオプションを指定してRESTORE ... PREVIEWコマンドを実行します。

    次の例では、例17-2に示されているオフサイト・アーカイブ・ログのバックアップのリコールを開始します(出力例も示します)。

    RESTORE ARCHIVELOG ALL PREVIEW RECALL;
    

    次のサンプル出力は、RMANがリコールを開始したことを示しています。

    List of Backup Sets
    ===================
     
     
    BS Key  Size       Device Type Elapsed Time Completion Time
    ------- ---------- ----------- ------------ ---------------
    9       2.25M      SBT_TAPE    00:00:00     21-MAY-07
            BP Key: 9   Status: AVAILABLE  Compressed: NO  Tag: TAG20070521T144258
            Handle: VAULT0aii9k7i_1_1   Media: /tmp,VAULT0aii9k7i_1_1
     
      List of Archived Logs in backup set 9
      Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
      ---- ------- ---------- --------- ---------- ---------
      1    1       392314     21-MAY-07 392541     21-MAY-07
      1    2       392541     21-MAY-07 392545     21-MAY-07
      1    3       392545     21-MAY-07 392548     21-MAY-07
      1    4       392548     21-MAY-07 395066     21-MAY-07
      1    5       395066     21-MAY-07 395095     21-MAY-07
      1    6       395095     21-MAY-07 395355     21-MAY-07
     
    Initiated recall for the following list of remote backup files
    ==========================================================
            Handle: VAULT0aii9k7i_1_1   Media: /tmp,VAULT0aii9k7i_1_1
    validation succeeded for backup piece
    Finished restore at 21-MAY-07
    released channel: dev1
    
  2. RESTORE ... PREVIEWコマンドを実行します。必要に応じて、リストアに必要なバックアップがオフサイトとしてレポートされなくなるまで、前の手順に戻ります。

リストアする前のバックアップの検証

「リストア操作で使用されるバックアップのプレビュー」の手順では、リストアされるバックアップは示されますが、それらのバックアップが実際に使用可能であることは検証されません。RMANコマンドを実行して、RESTORE操作で使用可能なバックアップの可用性またはRESTORE操作で使用される特定のバックアップの内容をテストできます。バックアップの内容が実際に読み取られ、破損が確認されます。次の検証オプションがあります。

  • RESTORE ... VALIDATEを実行すると、RMANで特定のオブジェクトをバックアップからリストアできるかどうかがテストされます。RMANによって、使用するバックアップが選択されます。

  • VALIDATE BACKUPSETは、指定するバックアップ・セットの妥当性をテストします。

リカバリに必要なアーカイブREDOログのリストア

RMANは、リカバリを実行するために、必要に応じてアーカイブREDOログ・ファイルをバックアップから自動的にリストアします。また、後でRECOVERコマンド中にこれらのファイルのリストアに必要となる時間を節約するために、またはリストアされたアーカイブREDOログ・ファイルを新しい場所に格納する場合に、アーカイブREDOログを手動でリストアすることもできます。RMANでは、すべてのアーカイブREDOログ・ファイル、現行のREDOログ・ファイルまたは指定されたデータベースの以前のインカネーションからのアーカイブREDOログ・ファイルをリストアすることができます。

デフォルトでは、RMANは、ターゲット・データベースのLOG_ARCHIVE_FORMATおよび最大のLOG_ARCHIVE_DEST_nパラメータを使用して構成された名前でアーカイブREDOログをリストアします。これらのパラメータがプラットフォーム固有の形式で組み合され、リストアされたアーカイブ・ログの名前が構成されます。

新しい場所へのアーカイブREDOログのリストア

SET ARCHIVELOG DESTINATIONコマンドを使用すると、リストアしたアーカイブREDOログのデフォルトの名前を上書きできます。このコマンドによって、アーカイブ・ログは、データベースのリストア中に別の場所に手動でステージングされます。リカバリ中、RMANは新しくリストアされたアーカイブ・ログを検索する場所を認識するため、初期化パラメータ・ファイルで指定された場所にアーカイブ・ログが存在している必要はありません。

アーカイブREDOログを新しい場所へリストアする手順

  1. RMANを起動し、ターゲット・データベースに接続します。

  2. データベースがマウントまたはオープンされていることを確認します。

  3. RUNコマンド内で、次の操作を実行します。

    1. SET ARCHIVELOG DESTINATIONを使用して、リストアするアーカイブREDOログの新しい場所を指定します。

    2. アーカイブREDOログを明示的にリストアするか、またはログを自動的にリストアするコマンドを実行します。

    次の例のRUNコマンドは、すべてのバックアップ・アーカイブ・ログを新しい場所に明示的にリストアします。

    RUN
    { 
      SET ARCHIVELOG DESTINATION TO '/oracle/temp_restore';
      RESTORE ARCHIVELOG ALL;
      # restore and recover datafiles as needed
      .
      .
      .
    }
    

    次の例では、アーカイブ・ログの宛先を設定し、RECOVER DATABASEを使用してアーカイブ・ログをこの宛先から自動的にリストアします。

    RUN
    { 
      SET ARCHIVELOG DESTINATION TO '/oracle/temp_restore';
      RESTORE DATABASE;
      RECOVER DATABASE; # restores and recovers logs automatically
    }
    

複数の場所へのアーカイブREDOログのリストア

アーカイブ・ログのリストア先を1つのRUNブロックに複数回指定して、リストアしたログを複数のリストア先に分散できます。(ただし、同時に複数のリストア先を指定して、リストア操作時に同じログの複数のコピーを生成することはできません。)この機能を使用して、リストアしたログを格納するために使用するディスク領域を管理できます。

次の例では、バックアップから300のアーカイブREDOログをリストアし、ディレクトリ/fs1/tmp/fs2/tmpおよび/fs3/tmpに分散します。

RUN 
{ 
  # Set a new location for logs 1 through 100.
  SET ARCHIVELOG DESTINATION TO '/fs1/tmp';
  RESTORE ARCHIVELOG FROM SEQUENCE 1 UNTIL SEQUENCE 100;
  # Set a new location for logs 101 through 200.
  SET ARCHIVELOG DESTINATION TO '/fs2/tmp';
  RESTORE ARCHIVELOG FROM SEQUENCE 101 UNTIL SEQUENCE 200;
  # Set a new location for logs 201 through 300.
  SET ARCHIVELOG DESTINATION TO '/fs3/tmp';
  RESTORE ARCHIVELOG FROM SEQUENCE 201 UNTIL SEQUENCE 300;
  # restore and recover datafiles as needed
  .
  .
  .
}

RECOVERコマンドを発行すると、リストアした必要なアーカイブ・ログがリストア先で自動的に検出され、データファイルに適用されます。

データベースの完全リカバリの実行

この項では、「データベースの完全リカバリの準備」のタスクをすでに実行していると想定しています。この項では、広範囲の様々な例に対応することを目的としているデータベースの完全リカバリの概要について説明します。

データベースの完全リカバリ

データベースをリストアおよびリカバリするには、RESTOREおよびRECOVERコマンドを使用します。リカバリ中、RMANは、必要なアーカイブREDOログのバックアップを自動的にリストアします。バックアップがメディア・マネージャに格納されている場合は、チャネルを事前に構成しておくか、またはALLOCATE CHANNELコマンドを含むRUNブロックを使用して、そこに格納されているバックアップへのアクセスを有効にする必要があります。

RMANは、リカバリ中にアーカイブREDOログを高速リカバリ領域にリストアする場合、リストアしたログを、データファイルに適用した後で自動的に削除します。そうでない場合は、リストアしたアーカイブREDOログがリカバリに必要でなくなった後、DELETE ARCHIVELOGコマンドを使用して、それらのアーカイブREDOログをディスクから削除できます。たとえば、次のコマンドを入力できます。

RECOVER DATABASE DELETE ARCHIVELOG;

デフォルト以外の場所へのデータファイルのリストア

データファイルをデフォルトの場所にリストアできない場合は、データファイルの新しい場所が反映されるように、制御ファイルを更新する必要があります。RMANのSET NEWNAMEコマンドをRUNコマンド内で使用して、新しいファイル名を指定します。その後、SQL文ALTER DATABASE RENAME FILEと同じ動作をするSWITCHコマンドを使用し、制御ファイル内のデータファイルの名前を更新します。SWITCH DATAFILE ALLを実行すると、制御ファイルに、RUNコマンドでSET NEWNAMEが発行されているすべてのデータファイルの新しい名前が反映されます。


関連項目:

SWITCHの構文については、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

バックアップの復号化

RMANは、暗号化バックアップをリストアする場合、バックアップ・セットの内容をリストアする際にバックアップ・セットを自動的に復号化します。透過的に暗号化されたバックアップは、Oracleウォレットがオープンしていて使用可能な場合にかぎり、ユーザーが介入せずにリストアできます。

パスワード暗号化バックアップをリストアするには、正しいパスワードを入力する必要があります。SET DECRYPTIONコマンドを使用して、暗号化パスワードを入力する必要があります。異なるパスワードを使用して作成されたバックアップのグループからリストアを行う場合は、SET DECRYPTIONコマンドで、必要なすべてのパスワードを指定する必要があります。各バックアップ・セットで正しいパスワードが自動的に使用されます。


関連項目:


データベース全体の完全リカバリの実行

この例では、データベースtrgtのほとんどまたはすべてのデータファイルが消失したと想定しています。また、データベースで高速リカバリ領域が使用されているとも想定しています。

データベース全体のリストアおよびリカバリの後で、データベースがオープンされると、制御ファイルに記録された欠落している一時表領域は、以前の作成サイズ、AUTOEXTENDおよびMAXSIZE属性で再作成されます。欠落している一時表領域のみが再作成されます。RMANリポジトリに記録された場所に存在する一時ファイルのヘッダーが無効な場合、RMANは一時ファイルを再作成しません。

一時ファイルがOracle Managed Filesとして作成されていた場合は、現在のDB_CREATE_FILE_DESTの場所に再作成されます。そうでない場合は、以前の場所で再作成されます。RMANがI/Oエラーまたは他の原因でファイルを再作成できない場合、エラーがアラート・ログにレポートされ、データベースのオープン操作が続行されます。

データベース全体をリストアおよびリカバリする手順

  1. RMANを起動し、ターゲット・データベースに接続します。

    たとえば、次のコマンドを入力します。

    % rman
    RMAN> CONNECT TARGET /
    

    RMANは、接続時にnot startednot mountednot open(データベースはマウントされているがオープンされていない場合)またはnone(データベースがオープンされている場合)のいずれかのデータベース・ステータスを表示します。

  2. データベースがマウントされていない場合は、データベースをマウントします。ただし、オープンはしません。

    たとえば、次のコマンドを入力します。

    STARTUP MOUNT;
    
  3. SHOWコマンドを使用して、事前構成済のチャネルを確認します。

    たとえば、次のコマンドを入力します(出力例も示します)。

    SHOW ALL;
    
     
    RMAN configuration parameters for database with db_unique_name PROD1 are:
    .
    .
    .
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS "SBT_LIBRARY=/usr/local/oracle/backup/lib/libobk.so";
    

    必要なデバイスおよびチャネルがすでに構成されている場合、操作は必要ありません。そうでない場合は、CONFIGUREコマンドを使用して自動チャネルを構成するか、またはRUNブロック内にALLOCATE CHANNELコマンドを含めます。

  4. パスワード保護された暗号化バックアップをリストアする場合は、パスワードを指定します。

    次の例に示すように、SET DECRYPTION IDENTIFIED BYコマンドを使用して、パスワード保護されたバックアップのパスワードを指定します(passwordは実際に入力するパスワードを表します)。

    SET DECRYPTION IDENTIFIED BY password;
    

    異なるパスワードでバックアップを作成した場合は、バックアップのリストアに必要となる可能性のあるすべてのパスワードを指定してSET DECRYPTION IDENTIFIED BY passwordコマンドを複数回実行できます。

  5. データベースをリストアおよびリカバリします。次のいずれかを実行します。

    • すべてのデータファイルを元の場所にリストアする場合は、RMANプロンプトでRESTORE DATABASERECOVER DATABASEを順に実行します。

      たとえば、自動チャネルが構成されている場合は、次のコマンドを入力します(出力例も示します)。

      RMAN> RESTORE DATABASE;
      
      Starting restore at 20-JUN-06
      allocated channel: ORA_DISK_1
      channel ORA_DISK_1: SID=35 device type=DISK
      allocated channel: ORA_SBT_TAPE_1
      channel ORA_SBT_TAPE_1: SID=34 device type=SBT_TAPE
      channel ORA_SBT_TAPE_1: Oracle Secure Backup
       
      channel ORA_DISK_1: starting datafile backup set restore
      channel ORA_DISK_1: specifying datafile(s) to restore from backup set
      channel ORA_DISK_1: restoring datafile 00001 to /disk1/oracle/dbs/tbs_01.f
      channel ORA_DISK_1: restoring datafile 00002 to /disk1/oracle/dbs/tbs_ax1.f
      .
      .
      .
      Finished restore at 20-JUN-06
      
      RMAN> RECOVER DATABASE;
      
      Starting recover at 20-JUN-06
      using channel ORA_DISK_1
      allocated channel: ORA_SBT_TAPE_1
      channel ORA_SBT_TAPE_1: SID=34 device type=SBT_TAPE
      channel ORA_SBT_TAPE_1: Oracle Secure Backup
       
      starting media recovery
       
      channel ORA_DISK_1: starting archived log restore to default destination
      channel ORA_DISK_1: restoring archived log
      archived log thread=1 sequence=5
      channel ORA_DISK_1: restoring archived log
      archived log thread=1 sequence=6
      .
      .
      .
      channel ORA_DISK_1: reading from backup piece /disk1/oracle/work/orcva/TKRM/backupset/2007_06_20/o1_mf_annnn_TAG20070620T113128_29jhr197_.bkp
      channel ORA_DISK_1: piece handle=/disk1/oracle/work/orcva/TKRM/backupset/2007_06_20/o1_mf_annnn_TAG20070620T113128_29jhr197_.bkp tag=TAG20070620T113128
      channel ORA_DISK_1: restored backup piece 1
      channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
      archived log file name=/disk1/oracle/work/orcva/TKRM/archivelog/2007_06_20/o1_mf_1_5_29jhv47k_.arc thread=1 sequence=5
      channel default: deleting archived log(s)
      .
      .
      .
      media recovery complete, elapsed time: 00:00:15
      Finished recover at 20-JUN-06
       
      

      チャネルを手動で割り当てる場合は、RESTOREおよびRECOVERコマンドをRUNブロック内で同時に発行する必要があります。次に例を示します。

      RUN
      {
        ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
        RESTORE DATABASE;
        RECOVER DATABASE;
      }
      
    • 一部のデータファイルを新しい場所にリストアする場合は、RUNコマンドでRESTORE DATABASERECOVER DATABASEを順に実行します。「デフォルト以外の場所へのデータファイルのリストア」で説明するように、SET NEWNAMEを使用して、データファイルの名前を変更します。

      次の例では、データベースをリストアし、3つのデータファイルに新しい名前を指定してから、データベースをリカバリします。

      RUN
      {  
        SET NEWNAME FOR DATAFILE 2 TO '/disk2/df2.dbf';
        SET NEWNAME FOR DATAFILE 3 TO '/disk2/df3.dbf';
        SET NEWNAME FOR DATAFILE 4 TO '/disk2/df4.dbf';
        RESTORE DATABASE;
        SWITCH DATAFILE ALL;
        RECOVER DATABASE;
      }
      
  6. 出力を調べて、メディア・リカバリが正常に実行されたかどうかを確認します。正常に実行された場合は、データベースをオープンします。

    たとえば、次のコマンドを入力します。

    ALTER DATABASE OPEN;
    

表領域の完全リカバリの実行

基本的な例では、データベースはオープンされており、データファイルのすべてではなく一部が破損しています。データベースの残りの部分を使用可能にしておくために、データベースはオープンしたままで、破損した表領域をリストアおよびリカバリします。この例では、データベースtrgtの表領域usersが消失したと想定しています。

表領域をリストアおよびリカバリする手順

  1. RMANを起動し、ターゲット・データベースに接続します。

  2. データベースがオープンされている場合は、リカバリが必要なデータファイルをオフラインにします。

    たとえば、次のコマンドを入力してusersをオフラインにします。

    SQL "ALTER TABLESPACE users OFFLINE IMMEDIATE";
    
  3. SHOWコマンドを使用して、事前構成済のチャネルを確認します。

    たとえば、次のコマンドを入力します(出力例も示します)。

    SHOW ALL;
    
    RMAN configuration parameters for database with db_unique_name PROD1 are:
    .
    .
    .
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS  "SBT_LIBRARY=/usr/local/oracle/backup/lib/libobk.so";
    

    必要なデバイスおよびチャネルがすでに構成されている場合、操作は必要ありません。そうでない場合は、CONFIGUREコマンドを使用して自動チャネルを構成するか、またはRUNブロック内にALLOCATE CHANNELコマンドを含めます。

  4. パスワード保護された暗号化バックアップをリストアする場合は、パスワードを指定します。

    次の例に示すように、SET DECRYPTION IDENTIFIED BYコマンドを使用して、パスワード保護されたバックアップのパスワードを指定します(passwordは実際に入力するパスワードを表します)。

    SET DECRYPTION IDENTIFIED BY password;
    
  5. 表領域をリストアおよびリカバリします。次のいずれかを実行します。

    • データファイルを元の場所にリストアする場合は、RMANプロンプトでRESTORE TABLESPACERECOVER TABLESPACEコマンドを実行します。

      たとえば、自動チャネルが構成されている場合は、次のコマンドを入力します(出力例も示します)。

      RMAN> RESTORE TABLESPACE users;
       
      Starting restore at 20-JUN-06
      allocated channel: ORA_DISK_1
      channel ORA_DISK_1: SID=37 device type=DISK
      allocated channel: ORA_SBT_TAPE_1
      channel ORA_SBT_TAPE_1: SID=38 device type=SBT_TAPE
      channel ORA_SBT_TAPE_1: Oracle Secure Backup
       
      channel ORA_DISK_1: starting datafile backup set restore
      channel ORA_DISK_1: specifying datafile(s) to restore from backup set
      channel ORA_DISK_1: restoring datafile 00012 to /disk1/oracle/dbs/users01.f
      channel ORA_DISK_1: restoring datafile 00013 to /disk1/oracle/dbs/users02.f
      channel ORA_DISK_1: restoring datafile 00021 to /disk1/oracle/dbs/users03.f
      channel ORA_DISK_1: reading from backup piece /disk1/oracle/work/orcva/TKRM/backupset/2007_06_20/o1_mf_nnndf_TAG20070620T105435_29jflwor_.bkp
      channel ORA_DISK_1: piece handle=/disk1/oracle/work/orcva/TKRM/backupset/2007_06_20/o1_mf_nnndf_TAG20070620T105435_29jflwor_.bkp tag=TAG20070620T105435
      channel ORA_DISK_1: restored backup piece 1
      channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
      Finished restore at 20-JUN-06
      
      RMAN> RECOVER TABLESPACE users;
       
      Starting recover at 20-JUN-06
      using channel ORA_DISK_1
      using channel ORA_SBT_TAPE_1
       
      starting media recovery
       
      archived log for thread 1 with sequence 27 is already on disk as file /disk1/oracle/work/orcva/TKRM/archivelog/2007_06_20/o1_mf_1_27_29jjmtc9_.arc
      archived log for thread 1 with sequence 28 is already on disk as file /disk1/oracle/work/orcva/TKRM/archivelog/2007_06_20/o1_mf_1_28_29jjnc5x_.arc
      .
      .
      .
      channel ORA_DISK_1: starting archived log restore to default destination
      channel ORA_DISK_1: restoring archived log
      archived log thread=1 sequence=5
      channel ORA_DISK_1: restoring archived log
      archived log thread=1 sequence=6
      channel ORA_DISK_1: restoring archived log
      archived log thread=1 sequence=7
      .
      .
      .
      channel ORA_DISK_1: reading from backup piece /disk1/oracle/work/orcva/TKRM/backupset/2007_06_20/o1_mf_annnn_TAG20070620T113128_29jhr197_.bkp
      channel ORA_DISK_1: piece handle=/disk1/oracle/work/orcva/TKRM/backupset/2007_06_20/o1_mf_annnn_TAG20070620T113128_29jhr197_.bkp tag=TAG20070620T113128
      channel ORA_DISK_1: restored backup piece 1
      channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
      archived log file name=/disk1/oracle/work/orcva/TKRM/archivelog/2007_06_20/o1_mf_1_5_29jkdvjq_.arc thread=1 sequence=5
      channel default: deleting archived log(s)
      archived log file name=/disk1/oracle/work/orcva/TKRM/archivelog/2007_06_20/o1_mf_1_5_29jkdvjq_.arc RECID=91 STAMP=593611179
      archived log file name=/disk1/oracle/work/orcva/TKRM/archivelog/2007_06_20/o1_mf_1_6_29jkdvbz_.arc thread=1 sequence=6
      channel default: deleting archived log(s)
      .
      .
      .
      media recovery complete, elapsed time: 00:00:01
      Finished recover at 20-JUN-06
      
    • 一部のデータファイルを新しい場所にリストアする場合は、RUNコマンドでRESTORE TABLESPACERECOVER TABLESPACEを実行します。「デフォルト以外の場所へのデータファイルのリストア」で説明するように、SET NEWNAMEを使用して、データファイルの名前を変更します。

      次の例では、表領域users内のデータファイルを新しい場所にリストアした後、リカバリを実行します。古いデータファイルは/disk1パスに格納されており、新しいデータファイルは/disk2パスに格納されると想定しています。

      RUN
      {
        # specify the new location for each datafile
        SET NEWNAME FOR DATAFILE '/disk1/oracle/dbs/users01.f' TO 
                                 '/disk2/users01.f';
        SET NEWNAME FOR DATAFILE '/disk1/oracle/dbs/users02.f' TO 
                                 '/disk2/users02.f';
        SET NEWNAME FOR DATAFILE '/disk1/oracle/dbs/users03.f' TO 
                                 '/disk2/users03.f';
        RESTORE TABLESPACE users;
        SWITCH DATAFILE ALL;   # update control file with new file names
        RECOVER TABLESPACE users;
      }
      
  6. 出力を調べて、リカバリが正常に実行されたことを確認します。正常に実行された場合は、リカバリした表領域をオンラインに戻します。

    たとえば、次のコマンドを入力します。

    SQL "ALTER TABLESPACE users ONLINE";
    

コピーへの切替え後の完全リカバリの実行

アクセスできないデータファイルのイメージ・コピーが高速リカバリ領域に存在する場合、SWITCH DATAFILE ... TO COPYコマンドを使用して制御ファイルをデータファイルのコピーにポイントしてからRECOVERを使用すると、消失した変更をリカバリできます。SWITCH DATABASE TO COPYコマンドを使用して、制御ファイルをデータベース全体のコピーにポイントすることもできます。バックアップをリストアする必要がないため、このリカバリ方法は従来のリストアおよびリカバリより時間がかかりません。


注意:

SWITCH TABLESPACE ... TO COPYコマンドは、表領域のすべてのデータファイルが消失し、すべてのデータファイルのコピーが存在する場合でもサポートされます。SWITCH DATABASE TO COPYについても同じ制限があります。

データファイルのコピーへの切替え

基本的な例では、データベースはオープンされており、データファイルのすべてではなく一部が破損しています。1日の中で、あるデータファイルがストレージ障害によって欠落します。このファイルを修復する必要がありますが、バックアップからリストアおよびリカバリする時間はありません。最新のイメージ・コピー・バックアップを新しいファイルとして使用して、リストア時間をなくします。この例では、データベースtrgtのデータファイル4が消失したと想定しています。

データファイルのコピーに切り替えてリカバリを実行する手順

  1. RMANを起動し、ターゲット・データベースに接続します。

  2. データベースがオープンされている場合は、リカバリが必要な表領域をオフラインにします。

    次のコマンドを入力してデータファイル4をオフラインにします。

    SQL "ALTER DATABASE DATAFILE 4 OFFLINE";
    
  3. オフラインのデータファイルを最新のコピーに切り替えます。

    次のコマンドを入力して、制御ファイルをデータファイル4の最新のイメージ・コピーにポイントします。

    SWITCH DATAFILE 4 TO COPY;
    
  4. RECOVER DATAFILEコマンドで、データファイルをリカバリします。

    次のコマンドを入力します。

    RECOVER DATAFILE 4;
     
    

    RMANは、アーカイブREDOログおよび増分バックアップを自動的にリストアします。データベースでは高速リカバリ領域が使用されるため、RMANは、これらを、適用した後に自動的に削除します。

  5. 出力を調べて、リカバリが正常に実行されたことを確認します。正常に実行された場合は、リカバリしたデータファイルをオンラインに戻します。

    次のコマンドを入力してデータファイル4をオンラインにします。

    SQL "ALTER DATABASE DATAFILE 4 ONLINE";
    

データベースのコピーへの切替え

この例では、データベースは停止しており、すべてのデータファイルが破損しています。破損したすべてのデータファイルには、イメージ・コピーがあります。既存のイメージ・コピーを新しいデータファイルとして使用して、リストア時間をなくします。

データベースのコピーに切り替えてリカバリを実行する手順

  1. RMANを起動し、ターゲット・データベースに接続します。

  2. データベースをマウントします。

  3. データベースを最新のコピーに切り替えます。

    次のコマンドを入力して、制御ファイルをデータベースの最新のイメージ・コピーにポイントします。

    SWITCH DATABASE TO COPY;
    
  4. RECOVER DATABASEコマンドで、データベースをリカバリします。

    次のコマンドを入力します。

    RECOVER DATABASE;
     
    

    RMANは、アーカイブREDOログおよび増分バックアップを自動的にリストアします。データベースでは高速リカバリ領域が使用されるため、RMANは、これらを、適用した後に自動的に削除します。

  5. 出力を調べて、リカバリが正常に実行されたことを確認します。正常に実行された場合は、データベースをオープンします。

    データベースをオープンするには、次のコマンドを入力します。

    ALTER DATABASE OPEN;