ヘッダーをスキップ

Oracle Data Guard 概要および管理
11gリリース1(11.1)

E05755-03
目次
目次
索引
索引

戻る 次へ

13 Data Guardの使用例

この章では、Data Guard構成の管理中に遭遇する可能性がある例を説明します。使用例はそれぞれ、ユーザー固有の環境に適応できます。表13-1に、この章で説明する使用例を示します。

表13-1    Data Guardの使用例 
参照先  使用例 

13.1項 

フェイルオーバー後のロジカル・スタンバイ・データベースの構成 

13.2項 

フラッシュバック・データベースを使用した障害が発生したプライマリのスタンバイ・データベースへの変換 

13.3項 

Open Resetlogs文の発行後のフラッシュバック・データベースの使用 

13.4項 

NOLOGGING句を指定した後のリカバリ 

13.5項 

OMFまたはASMを使用するスタンバイ・データベースの作成 

13.6項 

プライマリ・データベースでの書込みの欠落エラーからのリカバリ 

13.7項 

Recovery Managerバックアップを使用した障害が発生したプライマリのスタンバイ・データベースへの変換 

13.1 フェイルオーバー後のロジカル・スタンバイ・データベースの構成

この項では、プライマリ・データベースを別のスタンバイ・データベースにフェイルオーバーした後に、ロジカル・スタンバイ・データベースで実行する必要のある手順について説明します。フェイルオーバーの発生後、ロジカル・スタンバイ・データベースは、元のプライマリ・データベースからの最後のREDOが適用されるまで、新規プライマリ・データベースのスタンバイ・データベースとして機能できません。これは、フェイルオーバー中に新規のプライマリ・データベースで最後のREDOが適用される場合と同じです。実行する必要のある手順は、新規プライマリ・データベースがフェイルオーバー前にフィジカル・スタンバイ・データベースであったかロジカル・スタンバイ・データベースであったかに応じて異なります。

13.1.1 新規プライマリ・データベースがフィジカル・スタンバイ・データベースだった場合

この使用例では、プライマリ・ロールを担う前はフィジカル・スタンバイ・データベースだった新規プライマリ・データベースをサポートするように、ロジカル・スタンバイ・データベースを構成する方法について説明します。この使用例では、SATはロジカル・スタンバイ・データベース、NYCはプライマリ・データベースです。

手順1    プライマリ・データベースからのアーカイブを使用不可にする。

NYCデータベースで、次の文を発行します(LOG_ARCHIVE_DEST_4がSATデータベースにアーカイブするように構成されているとします)。

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_4=DEFER;
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
手順2    ロジカル・スタンバイ・データベースが新規プライマリ・データベースのスタンバイ・データベースとして機能できることを確認する。

SATデータベースで、次の文を発行します。

SQL> EXECUTE DBMS_LOGSTDBY.PREPARE_FOR_NEW_PRIMARY(-
     former_standby_type => 'PHYSICAL' -
     dblink => 'nyc_link');


注意

ORA-16109メッセージが戻され、alert.logに「LOGSTDBY: prepare_for_new_primary failure -- applied too far, flashback required.」という警告が書き込まれる場合は、次の手順を実行します。

  1. データベースを警告に示されたSCNまでフラッシュバックします。

  2. 続行する前に、この手順を繰り返します。

ロジカル・スタンバイ・データベースをApply SCNまでフラッシュバックする方法の例は、13.2.3項を参照してください。 


手順3    プライマリ・データベースでアーカイブを使用可能にする。

NYCデータベースで、次の文を発行します(LOG_ARCHIVE_DEST_4がSATデータベースにアーカイブするように構成されているとします)。

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_4=ENABLE;
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
手順4    新規プライマリ・データベースを問い合せ、ロジカル・スタンバイ・データベースでリアルタイム適用を有効化できるSCNを判断する。

NYCデータベースで、次の問合せを発行して必要なSCNを判断します。

SQL> SELECT MAX(NEXT_CHANGE#) -1 AS WAIT_FOR_SCN FROM V$ARCHIVED_LOG;
手順5    SQL Applyを開始する。

SATデータベースで、次の文を発行します。

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;

この文は、常にリアルタイム適用オプションを指定せずに発行する必要があることに注意してください。手順4  で戻された過去のWAIT_FOR_SCNがSQL Applyにより適用されるまで待機した後で、リアルタイム適用を有効化する必要があります。ロジカル・スタンバイ・データベースでリアルタイム適用を安全に再開できる時点を判断するには、V$LOGSTDBY_PROGRESSビューを監視します。

SQL> SELECT APPLIED_SCN FROM V$LOGSTDBY_PROGRESS;

戻される値が手順4で戻されたWAIT_FOR_SCN値以上の場合は、SQL Applyを停止し、リアルタイム適用オプションを指定して再開できます。

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

13.1.2 新規プライマリ・データベースがロジカル・スタンバイ・データベースだった場合

この使用例では、プライマリ・ロールを担う前はロジカル・スタンバイ・データベースだった新規プライマリ・データベースをサポートするように、ロジカル・スタンバイ・データベースを構成する方法について説明します。この使用例では、SATはロジカル・スタンバイ・データベース、NYCはプライマリ・データベースです。

手順1    新規プライマリ・データベースで、ロジカル・スタンバイ・データベースのサポート準備が完了していることを確認する。

NYCデータベースで、次の問合せにより値READYが戻されることを確認します。それ以外の場合、LSP1バックグラウンド・プロセスの処理が完了しておらず、このロジカル・スタンバイ・データベースの構成は待機する必要があります。次に例を示します。

SQL> SELECT VALUE FROM SYSTEM.LOGSTDBY$PARAMETERS 
2>   WHERE NAME = 'REINSTATEMENT_STATUS';


注意

VALUE列にNOT POSSIBLEが含まれている場合は、新規プライマリ・データベースでロジカル・スタンバイ・データベースを構成できず、データベースを元に戻す必要があることを意味します。  


手順2    プライマリ・データベースからのアーカイブを使用不可にする。

NYCデータベースで、次の文を発行します(LOG_ARCHIVE_DEST_4がSATデータベースにアーカイブするように構成されているとします)。

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_4=DEFER;
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

手順3    ロジカル・スタンバイ・データベースが新規プライマリ・データベースのスタンバイ・データベースとして機能できることを確認する。

SATデータベースで、次の文を発行します。

SQL> EXECUTE DBMS_LOGSTDBY.PREPARE_FOR_NEW_PRIMARY(-
     former_standby_type => 'LOGICAL' -
     dblink => 'nyc_link');


注意

ORA-16109メッセージが戻され、alert.logファイルに「LOGSTDBY: prepare_for_new_primary failure -- applied too far, flashback required.」という警告が書き込まれる場合は、次の手順を実行します。

  1. データベースを警告に示されたSCNまでフラッシュバックします。

  2. 続行する前に、この手順を繰り返します。

ロジカル・スタンバイ・データベースをApply SCNまでフラッシュバックする方法の例は、13.2.3項を参照してください。 


手順4    ローカル・システムにコピーする必要のあるログ・ファイルを判別する。

SATデータベースで、DBMS_LOGSTDBY.PREPARE_FOR_NEW_PRIMARYプロシージャの出力を調べます。このプロシージャでは、ローカル・システムにコピーする必要のあるログ・ファイルが識別されます。手順3でフェイルオーバーを非データ消失フェイルオーバーとして識別した場合は、表示されたログ・ファイルを新規プライマリ・データベースからコピーする必要があります。他のロジカル・スタンバイ・データベースまたは前のプライマリ・データベースからは取得しないでください。たとえば、Linuxシステムでは、grepコマンドを入力します。

%grep 'LOGSTDBY: Terminal log' alert_sat.log
LOGSTDBY: Terminal log: [/oracle/dbs/hq_nyc_13.log]


注意

前の手順を複数回実行した場合、関連があるのは最後の試行で得られた出力のみです。ファイル・パスは新規プライマリ・データベースとの相対パスであり、ローカル・ファイル・システムでは解決できない場合があります。 


手順5    ログ・ファイルをローカル・システムにコピーする。

SATデータベースで、端末のログ・ファイルをローカル・システムにコピーします。次の例に、この操作にLinuxコマンドを使用する方法を示します。

%cp /net/nyc/oracle/dbs/hq_nyc_13.log 
/net/sat/oracle/dbs/hq_sat_13.log
手順6    端末のログをロジカル・スタンバイ・データベースに登録する。

SATデータベースで、次の文を発行します。

SQL> ALTER DATABASE REGISTER OR REPLACE LOGICAL LOGFILE -
     '/net/sat/oracle/dbs/hq_sat_13.log';
手順7    SQL Applyを開始する。

SATデータベースで、次の文を発行します。

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY nyc_link;

この文は、常にリアルタイム適用オプションを指定せずに発行する必要があることに注意してください。ロジカル・スタンバイ・データベースでリアルタイム適用を使用可能にする必要がある場合は、前述の文が正常終了するまで待機してから、次の文を発行します。

SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
手順8    プライマリ・データベースでロジカル・スタンバイ・データベースへのアーカイブを使用可能にする。

NYCデータベースで、次の文を発行します(LOG_ARCHIVE_DEST_4がSATデータベースにアーカイブするように構成されているとします)。

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_4=ENABLE;
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

13.2 フラッシュバック・データベースを使用した障害が発生したプライマリのスタンバイ・データベースへの変換

フェイルオーバーの発生後、元のプライマリ・データベースは、修正され、新しい構成のスタンバイ・データベースとして確立されるまで、Data Guard構成に含められません。これを行うには、フラッシュバック・データベース機能を使用して、障害の発生したプライマリ・データベースを障害発生前の時点にフラッシュバックし、その後新しい構成内のフィジカルまたはロジカル・スタンバイ・データベースに変換します。次の各項で、次の内容を説明します。

13.2.1 障害が発生したプライマリ・データベースのフィジカル・スタンバイ・データベースへのフラッシュバック

次の手順では、フィジカル・スタンバイ・データベースに対してフェイルオーバーが実行され、ファイルオーバーの際に古いプライマリ・データベースでフラッシュバック・データベースが使用可能にされていることを前提としています。この手順では、古いプライマリ・データベースをフィジカル・スタンバイ・データベースとしてData Guard構成に戻します。

手順1    古いスタンバイ・データベースがプライマリ・データベースになったSCNを判別する。

新しいプライマリ・データベース上で次の問合せを発行し、古いスタンバイ・データベースが新しいプライマリ・データベースになったSCNを判別します。

SQL> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;
手順2    障害の発生したプライマリ・データベースをフラッシュバックする。

必要に応じて古いプライマリ・データベースを停止し、マウントして、手順1  で判別したSTANDBY_BECAME_PRIMARY_SCNの値にフラッシュバックします。

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> FLASHBACK DATABASE TO SCN standby_became_primary_scn;
手順3    データベースからフィジカル・スタンバイ・データベースに変換する。

古いプライマリ・データベースで次の手順を実行します。

  1. 古いプライマリ・データベースで次の文を発行します。

    SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
    
    

    制御ファイルからスタンバイ制御ファイルへ正常に変換後、この文はデータベースをマウントしません。

  2. データベースを停止して、再開します。

    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP MOUNT;
    
手順4    新しいフィジカル・スタンバイ・データベースへのREDO転送を開始する。

新しいプライマリ・データベースで次の手順を実行します。

  1. 次の問合せを発行し、アーカイブ宛先の現在の状態を調べます。

    SQL> SELECT DEST_ID, DEST_NAME, STATUS, PROTECTION_MODE, DESTINATION, ERROR,SRL
      2> FROM V$ARCHIVE_DEST_STATUS;
    
    
  2. 必要に応じて、宛先を使用可能にします。

    SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_n=ENABLE;
    
    
  3. スタンバイ・データベースが新しいプライマリ・データベースからのREDOデータの受信を確実に開始するよう、ログ・スイッチを実行し、これが成功したことを確認します。次のSQL文を新しいプライマリ・データベースで発行します。

    SQL> ALTER SYSTEM SWITCH LOGFILE;
    SQL> SELECT DEST_ID, DEST_NAME, STATUS, PROTECTION_MODE, DESTINATION, ERROR,SRL
      2> FROM V$ARCHIVE_DEST_STATUS;
    
    

    新しいスタンバイ・データベースで、REDO転送サービスがREDOデータを別のデータベースに転送しないよう、LOG_ARCHIVE_DEST_n初期化パラメータも変更する必要があります。

手順5    新しいフィジカル・スタンバイ・データベースでREDO Applyを開始する。

次のSQL文を新しいフィジカル・スタンバイ・データベースで発行します。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE 
 2> USING CURRENT LOGFILE DISCONNECT;

REDO Applyは、ロールの推移により生成されるREDOレコードが検出されるたびに自動的に停止するため、新しいプライマリ・データベースがプライマリ・データベースとなったSCNを超えて適用されるまで、1回以上再起動する必要があります。障害が発生したプライマリ・データベースがリストアされてスタンバイ・ロールで稼働し始めた後、オプションでスイッチオーバーを実行し、それぞれのデータベースを元の(障害発生前の)ロールに推移できます。詳細は、8.2.1項「フィジカル・スタンバイ・データベースへのスイッチオーバーの実行」を参照してください。

13.2.2 障害が発生したプライマリ・データベースのロジカル・スタンバイ・データベースへのフラッシュバック

次の手順では、Data Guard構成ですでにロジカル・スタンバイ・データベースを使用したフェイルオーバーが実行済で、古いプライマリ・データベースでフラッシュバック・データベースが使用可能にされていることを前提としています。この手順は、新しいプライマリ・データベースから古いプライマリ・データベースを正式にインスタンス化せずに、古いプライマリ・データベースを新しいロジカル・スタンバイ・データベースとしてData Guard構成に戻します。

手順1    フラッシュバックSCNおよびリカバリSCNを判別する。

フラッシュバックSCNは、障害が発生したプライマリ・データベースのフラッシュバック先となるSCNです。リカバリSCNは、障害が発生したプライマリ・データベースのリカバリ先となるSCNです。新しいプライマリで次の問合せを発行し、これらのSCNを特定します。

SQL> SELECT merge_change# AS FLASHBACK_SCN, processed_change# AS RECOVERY_SCN
 2> FROM DBA_LOGSTDBY_HISTORY
 3> WHERE stream_sequence# = (SELECT MAX(stream_sequence#)-1
 4> FROM DBA_LOGSTDBY_HISTORY);
手順2    障害が発生したプライマリ・データベースを手順1で特定したフラッシュバックSCNまでフラッシュバックする。
SQL> FLASHBACK DATABASE TO SCN flashback_scn;
手順3    障害が発生したプライマリをフィジカル・スタンバイに変換し、リカバリの準備としてスタンバイ・データベースを再度マウントする。
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
手順4    新しいプライマリで範囲[フラッシュバックSCN, リカバリSCN]内のREDOを含むログ・ファイルを特定する。

次の問合せによって特定されるログ・ファイルのみが、障害が発生したプライマリ・データベースを安全にリカバリできるアーカイブ・ログ・ファイルであるため、これらのファイルは非常に重要です。次の問合せから戻されるログ・ファイルが手順5で登録できない場合、障害が発生したプライマリをロジカル・スタンバイとして回復することはできません。そのような場合は、ロジカル・スタンバイを新しいプライマリから作成する必要があります。

SQL> SELECT file_name FROM DBA_LOGSTDBY_LOG
  2> WHERE first_change# <= recovery_scn
  3> AND next_change#  > flashback_scn;
手順5    手順4から戻されたすべてのログ・ファイルをフィジカル・スタンバイ(障害が発生したプライマリ)に登録する。
SQL> ALTER DATABASE REGISTER LOGFILE 'files_from_step _4';
手順6    手順1で特定したリカバリSCNまでリカバリする。
SQL> RECOVER MANAGED STANDBY DATABASE UNTIL CHANGE recovery_scn;
手順7    データベース・ガードを有効にする。
SQL> ALTER DATABASE GUARD ALL;
手順8    フィジカル・スタンバイをアクティブにしてプライマリ・データベースにする。
SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;
手順9    データベースをオープンする。
SQL> ALTER DATABASE OPEN;
手順10    新しいプライマリへのデータベース・リンクを作成してSQL Applyを開始する。
SQL> CREATE PUBLIC DATABASE LINK mylink
  2> CONNECT TO system IDENTIFIED BY password
  3> USING 'service_name_of_new_primary_database';

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY mylink;

これで、ロールの可逆的な推移が完了しました。

13.2.3 特定の適用済SCNへのロジカル・スタンバイ・データベースのフラッシュバック

スタンバイ・データベースのメリットの1つは、プライマリ・データベース・サービスに影響を与えずに、スタンバイ・データベースでフラッシュバック・データベースを実行できることです。データベースを特定の時点までフラッシュバックするタスクは簡単ですが、ロジカル・スタンバイ・データベースでは、既知のトランザクションがコミットされる直前の時点までフラッシュバックする操作が必要になる場合があります。このような必要が生じるのは、フェイルオーバー後に新しいプライマリ・データベースを使用してロジカル・スタンバイ・データベースを構成する場合です。

次の手順では、フラッシュバック・データベースとSQL Applyを使用して既知の適用済SCNまでリカバリする方法について説明します。

手順1    プライマリでの既知のSCN(APPLIED_SCN)の特定後に、フラッシュバック操作に使用するためにロジカル・スタンバイ・データベースで次の問合せを発行して対応するSCNを判別する。
SQL> SELECT DBMS_LOGSTDBY.MAP_PRIMARY_SCN (PRIMARY_SCN => APPLIED_SCN) 
  2> AS TARGET_SCN FROM DUAL;
手順2    戻されたTARGET_SCNまでロジカル・スタンバイをフラッシュバックする。

次のSQL文を発行し、ロジカル・スタンバイ・データベースを指定したSCNまでフラッシュバックし、RESETLOGSオプションを指定してロジカル・スタンバイ・データベースをオープンします。

SQL> SHUTDOWN;
SQL> STARTUP MOUNT EXCLUSIVE;
SQL> FLASHBACK DATABASE TO SCN <TARGET_SCN>;
SQL> ALTER DATABASE OPEN RESETLOGS;
手順3    SQL ApplyがAPPLIED_SCNまで適用されたことを確認する。

次の問合せを発行します。

SQL> SELECT APPLIED_SCN FROM V$LOGSTDBY_PROGRESS;

13.3 Open Resetlogs文の発行後のフラッシュバック・データベースの使用

スタンバイ・データベースがリアルタイム適用を使用しているData Guard構成で、プライマリ・データベースでエラーが発生したとします。この場合、同じエラーがスタンバイ・データベースにも適用されます。

ただし、フラッシュバック・データベースが使用可能になっている場合、プライマリおよびスタンバイ・データベースをエラー前の状態に戻せます。これには、適用サービスを再開する前に、プライマリ・データベースでFLASHBACK DATABASEおよびOPEN RESETLOGS文を発行し、次に同様のFLASHBACK STANDBY DATABASE文をスタンバイ・データベースで発行します。(フラッシュバック・データベースが使用可能でない場合、第3章および第4章で説明されているように、プライマリ・データベースでPoint-in-Timeリカバリが実行された後、スタンバイ・データベースを再作成する必要があります。)

13.3.1 特定時点へのフィジカル・スタンバイ・データベースのフラッシュバック

次の手順では、プライマリ・データベースでOPEN RESETLOGS文を発行した後、フィジカル・スタンバイ・データベースの再作成を回避する方法を説明します。

手順1    RESETLOGS操作が発生した前のSCNを判別する。

プライマリ・データベースで、次の問合せを使用してRESETLOGS操作がプライマリ・データベースで発生したよりも2つ前のシステム変更番号(SCN)の値を取得します。

SQL> SELECT TO_CHAR(RESETLOGS_CHANGE# - 2) FROM V$DATABASE;
手順2    スタンバイ・データベースの現行のSCNを取得する。

スタンバイ・データベースで、次の問合せを使用して現行のSCNを取得します。

SQL> SELECT TO_CHAR(CURRENT_SCN) FROM V$DATABASE;
手順3    データベースをフラッシュバックする必要があるかどうかを判別する。

CURRENT_SCNの値がresetlogs_change# - 2の値より大きい場合、次の文を発行してスタンバイ・データベースをフラッシュバックします。

SQL> FLASHBACK STANDBY DATABASE TO SCN resetlogs_change# -2;

手順4    REDO Applyを再開する。

フィジカル・スタンバイ・データベースでREDO Applyを開始するには、次の文を発行します。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE 
  2> USING CURRENT LOGFILE DISCONNECT;

スタンバイ・データベースはプライマリ・データベースからREDOを受信し、適用できます。

13.3.2 特定時点へのロジカル・スタンバイ・データベースのフラッシュバック

次の手順では、プライマリ・データベースをフラッシュバックし、OPEN RESETLOGS文を発行してオープンした後、ロジカル・スタンバイ・データベースの再作成を回避する方法を説明します。


注意

SQL Applyは、プライマリ・データベースでリセットログ操作の発生を検出すると、ロジカル・スタンバイ・データベースをフラッシュバックしなくてもマイニングできる場合は、REDOの正しいブランチを自動的にマイニングします。それ以外の場合、SQL Applyは「ORA-1346: 指定されたリセット・ログscnを超えてLogMinerがREDOを処理しました」エラーで停止します。この項では、SQL Applyはこのエラーですでに停止していると仮定しています。 


手順1    プライマリ・データベースのSCNを判別する。

プライマリ・データベースで、次の問合せを使用してRESETLOGS操作がプライマリ・データベースで発生したよりも2つ前のシステム変更番号(SCN)の値を取得します。

SQL> SELECT TO_CHAR(RESETLOGS_CHANGE# - 2) AS FLASHBACK_SCN FROM V$DATABASE;
手順2    ロジカル・スタンバイでのフラッシュバック操作のターゲットSCNを判別する。
SQL> SELECT DBMS_LOGSTDBY.MAP_PRIMARY_SCN (PRIMARY_SCN => FLASHBACK_SCN) 
  2> AS TARGET_SCN FROM DUAL;
手順3    戻されたTARGET_SCNまでロジカル・スタンバイをフラッシュバックする。

次のSQL文を発行し、ロジカル・スタンバイ・データベースを指定したSCNまでフラッシュバックし、RESETLOGSオプションを指定してロジカル・スタンバイ・データベースをオープンします。

SQL> SHUTDOWN;
SQL> STARTUP MOUNT EXCLUSIVE;
SQL> FLASHBACK DATABASE TO SCN <TARGET_SCN>;
SQL> ALTER DATABASE OPEN RESETLOGS;
手順4    SQL Applyを開始する。
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

13.4 NOLOGGING句を指定した後のリカバリ

一部のSQL文には、NOLOGGING句を指定するオプションがあります。このオプションによって、データベースに関する操作をオンラインREDOログ・ファイルに記録しないように指定できます。ユーザーがこの句を指定しても、REDOレコードはオンラインREDOログ・ファイルに書き込まれます。ただし、このレコードに関連したデータはありません。これが結果的に、スタンバイ・サイトでのログ適用エラーやデータ・アクセス・エラーの原因となり、ログ・ファイルの適用の再開で、手動によるリカバリが必要となります。


注意

この問題を回避するには、CREATE DATABASEまたはALTER DATABASE文にFORCE LOGGING句を常に指定することをお薦めします。『Oracle Database管理者ガイド』を参照してください。 


13.4.1 ロジカル・スタンバイ・データベースのリカバリ手順

ロジカル・スタンバイ・データベースの場合は、SQL ApplyでNOLOGGING句を使用して対象の表で実行された操作のREDOレコードが検出されると、「ORA-16211 サポートされていないレコードが、アーカイブREDOログで見つかりました。」エラーで停止します。

NOLOGGING句を指定した後のリカバリには、10.5.5項に説明されているように、プライマリ・データベースから1つ以上の表を再作成します。


注意

通常、NOLOGGING句の使用はお薦めしません。また、プライマリ・データベース内の特定の表でNOLOGGING句を使用する操作が実行されることが事前にわかっている場合は、DBMS_LOGSTDBY.SKIPプロシージャを使用して、これらの表に関連付けられているSQL文をロジカル・スタンバイ・データベースに適用しないようにできます。 


13.4.2 フィジカル・スタンバイ・データベースのリカバリ手順

スタンバイ・サイトにコピーされたアーカイブREDOログ・ファイルがフィジカル・スタンバイ・データベースに適用されると、データファイルの一部が使用不可能となり、リカバリ不能のマークが付けられます。フィジカル・スタンバイ・データベースにフェイルオーバーするか、読取り専用アクセスでスタンバイ・データベースをオープンし、UNRECOVERABLEのマークが付けられたブロックの範囲を読み取ろうとすると、次のようなエラー・メッセージが表示されます。

ORA-01578: ORACLE data block corrupted (file # 1, block # 2521)
ORA-01110: data file 1: '/oracle/dbs/stdby/tbs_1.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option

NOLOGGING句が指定された後でリカバリするには、欠落しているREDOデータが含まれているデータファイルをプライマリ・サイトからフィジカル・スタンバイ・サイトにコピーする必要があります。次の手順に従ってください。

手順1    コピーするデータファイルを判別する。

次の手順に従います。

  1. プライマリ・データベースを問い合せます。

    SQL> SELECT NAME, UNRECOVERABLE_CHANGE# FROM V$DATAFILE;
    NAME                                                  UNRECOVERABLE
    ----------------------------------------------------- -------------
    /oracle/dbs/tbs_1.dbf                                       5216
    /oracle/dbs/tbs_2.dbf                                          0
    /oracle/dbs/tbs_3.dbf                                          0
    /oracle/dbs/tbs_4.dbf                                          0
    4 rows selected.
    
    
  2. スタンバイ・データベースを問い合せます。

    SQL> SELECT NAME, UNRECOVERABLE_CHANGE# FROM V$DATAFILE;
    NAME                                                  UNRECOVERABLE
    ----------------------------------------------------- -------------
    /oracle/dbs/stdby/tbs_1.dbf                                 5186
    /oracle/dbs/stdby/tbs_2.dbf                                    0
    /oracle/dbs/stdby/tbs_3.dbf                                    0
    /oracle/dbs/stdby/tbs_4.dbf                                    0
    4 rows selected.
    
    
  3. プライマリ・データベースの問合せ結果とスタンバイ・データベースの問合せ結果を比較します。

    両方の問合せ結果のUNRECOVERABLE_CHANGE#列の値を比較します。プライマリ・データベースのUNRECOVERABLE_CHANGE#列の値の方が、スタンバイ・データベースの同じ列の値より大きい場合は、データファイルをプライマリ・サイトからスタンバイ・サイトへコピーする必要があります。

    この例では、tbs_1.dbfデータファイルのプライマリ・データベースにあるUNRECOVERABLE_CHANGE#の値の方が大きいため、tbs_1.dbfデータファイルをスタンバイ・サイトへコピーする必要があります。

手順2    プライマリ・サイトで、スタンバイ・サイトにコピーする必要があるデータファイルのバックアップを作成する。

次のSQL文を発行します。

SQL> ALTER TABLESPACE system BEGIN BACKUP;
SQL> EXIT;
% cp tbs_1.dbf /backup
SQL> ALTER TABLESPACE system END BACKUP;
手順3    データファイルをスタンバイ・データベースにコピーする。

欠落しているREDOデータが含まれているデータファイルを、プライマリ・サイトからリカバリ関連のファイルが格納されているフィジカル・スタンバイ・サイトにコピーします。

手順4    スタンバイ・データベースで、REDO Applyを再開する。

次のSQL文を発行します。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

REDO Applyを再開しようとすると、次のエラー・メッセージが(通常アラート・ログに)表示されることがあります。

ORA-00308: cannot open archived log 'standby1'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/oracle/dbs/stdby/tbs_1.dbf'

ORA-00308エラーが表示され、REDO Applyが自動的に終了しない場合は、別の端末のウィンドウから次の文を発行して、リカバリを取り消すことができます。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

これらのエラー・メッセージは、アーカイブ・ギャップ内にある1つ以上のログ・ファイルが正常に適用されなかった場合に戻されます。これらのエラーを受け取った場合は、ギャップを手動で解決し、手順4を繰り返します。アーカイブ・ギャップの手動による解決方法の詳細は、6.3.3.1項を参照してください。

13.4.3 リカバリ不能処理後にバックアップが必要かどうかの判断

プライマリ・データベースでリカバリ不能な操作を実行した場合は、次の手順に従って新しいバックアップ操作が必要かどうかを判断します。

  1. プライマリ・データベースでV$DATAFILEビューを問い合せ、システム変更番号(SCN)、またはOracleデータベースが無効なREDOデータを生成した最新の時刻を判別します。

  2. プライマリ・データベースで次のSQL文を発行して、新たにバックアップを実行する必要があるかどうかを判断します。

    SELECT UNRECOVERABLE_CHANGE#, 
           TO_CHAR(UNRECOVERABLE_TIME, 'mm-dd-yyyy hh:mi:ss') 
    FROM   V$DATAFILE;
    
    
  3. 前の手順での問合せで、データファイルが最後にバックアップされた時刻より後のデータファイル・リカバリ不能時刻が報告された場合は、問題となっているデータファイルのバックアップを新たに作成します。

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

13.5 OMFまたはASMを使用するスタンバイ・データベースの作成

第3章および第4章では、フィジカル・スタンバイ・データベースおよびロジカル・スタンバイ・データベースの作成方法を説明しました。この項では、プライマリ・データベースでOracle Managed Files(OMF)または自動ストレージ管理(ASM)を使用する場合に実行する必要のある追加手順を説明し、これらの章を補完します。


注意

この項の説明は、読者がすでにフィジカル・スタンバイ・データベースの作成方法を理解しており、Recovery Manager、OMFおよびASM機能に習熟していることを前提としています。詳細は、次の資料を参照してください。

  • フィジカル・スタンバイ・データベースおよびロジカル・スタンバイ・データベースの作成方法の詳細は、第3章第4章および付録Fを参照してください。

  • OMFおよびASMの詳細は、『Oracle Database管理者ガイド』を参照してください。

  • Recovery Managerの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』および『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

 

スタンバイ・データベースを作成する前に、次の準備作業を実行します。

  1. プライマリ・データベースで強制ロギングを使用可能にします。

  2. プライマリ・データベースでアーカイブを使用可能にします。

  3. プライマリ・データベースで必要な初期化パラメータをすべて設定します。

  4. スタンバイ・データベース用に初期化パラメータ・ファイルを作成します。

  5. プライマリ・データベースがOMFを使用するよう構成されている場合、スタンバイ・データベースもOMFを使用するよう構成することをお薦めします。これを行うには、DB_CREATE_FILE_DESTおよびDB_CREATE_ONLINE_LOG_DEST_n初期化パラメータに適切な値を設定します。プライマリおよびスタンバイ・データベースの両方で同じディスク・グループ名が使用されている場合、メンテナンスや後のロールの推移が簡易化されます。

  6. STANDBY_FILE_MANAGEMENT初期化パラメータにAUTOを設定します。

  7. スタンバイ・データベースに接続するために、必要に応じてOracle Netを構成します。

  8. REDO転送の認証を構成します。詳細は、3.1.2項「REDO転送の認証の構成」を参照してください。

  9. 制御ファイルをマウントせずにスタンバイ・データベース・インスタンスを起動します。

スタンバイ・データベースを作成するには、次の作業を実行します。

  1. スタンバイ・データベースでASMを使用する場合、スタンバイ・データベース・システムにASMインスタンスが存在していなければ、インスタンスを作成します。

  2. Recovery ManagerのBACKUPコマンドを使用して、プライマリ・データベースのデータファイル、アーカイブ・ログ・ファイルおよびスタンバイ制御ファイルのコピーが含まれているバックアップ・セットを作成します。

  3. Recovery ManagerのDUPLICATE FOR STANDBYコマンドを使用して、バックアップ・セットのデータファイル、アーカイブREDOログ・ファイルおよびスタンバイ制御ファイルをスタンバイ・データベースの格納場所にコピーします。

    DUPLICATE FOR STANDBYコマンドは、スタンバイ・インスタンスでの実際のデータ移動を実行します。バックアップ・セットがテープ上に存在する場合、スタンバイ・インスタンスがバックアップ・セットを読み取れるよう、メディア・マネージャを構成する必要があります。バックアップ・セットがディスク上に存在する場合、バックアップ・ピースはスタンバイ・インスタンスによって読み取ることができる必要があります。これには、プライマリ・パス名をNFSを介して取得可能にするか、これらをスタンバイ・システムにコピーし、Recovery ManagerのCATALOG BACKUPPIECEコマンドを使用してバックアップ・ピースをリストア前にカタログに追加します。

これらの手順を完了した後、3.2.7項の手順を実行してフィジカル・スタンバイ・データベースの構成を確認します。

ロジカル・スタンバイ・データベースを作成するには、第4章で説明されているスタンバイ・データベースの作成プロセスを実行しますが、次の点を変更します。

  1. ロジカル・スタンバイ・データベースの場合、DB_CREATE_FILE_DESTパラメータを設定しても、OMFファイル名を強制的に作成しません。ただし、このパラメータをプライマリ・データベースで設定する場合、スタンバイ・データベースでも設定する必要があります。

  2. プライマリ・システムでロジカル・スタンバイ制御ファイルを作成した後、このファイルをスタンバイ・システムにコピーするために、オペレーティング・システムのコマンドを使用しないでください。かわりにRecovery ManagerのRESTORE CONTROLFILEコマンドを使用して、ロジカル・スタンバイ制御ファイルのコピーをスタンバイ・システムにリストアします。

  3. プライマリ・データベースでOMFファイルを使用する場合、スタンバイ・データベースに作成された新しいOMFファイルをスタンバイ・データベース制御ファイルが使用するよう、Recovery Managerを使用してスタンバイ・データベース制御ファイルを更新します。この操作を実行するには、次の例に示すように、スタンバイ・データベースにのみ接続します。

    > RMAN TARGET sys@lstdby
    
    target database Password: password
    
    RMAN> CATALOG START WITH '+stby_diskgroup';
    RMAN> SWITCH DATABASE TO COPY;
    
    

これらの手順を完了した後、4.2.5項の手順を実行してロジカル・スタンバイ・データベースの起動、リカバリおよび検証を行います。

13.6 プライマリ・データベースでの書込みの欠落エラーからのリカバリ

Data Guard構成でのメディア・リカバリの実行中に、フィジカル・スタンバイ・データベースを使用してプライマリ・データベースで書込みの欠落によるデータ破損エラーを検出できます。これは、プライマリ・データベースのREDOログに格納されているブロックのSCNをフィジカル・スタンバイ・データベースのブロックのSCNと比較して行います。プライマリ・データベースのブロックのSCNがスタンバイ・データベースのSCNよりも小さい場合は、プライマリ・データベースで書込みの欠落が発生しています。


注意

書込みの欠落エラーが検出されるのは、プライマリによってブロックがキャッシュに読み込まれ、その後対応するREDOがスタンバイのブロックと比較されるときのみのため、読取りおよび検証が行われていないプライマリとスタンバイの両方に未検出の失効したブロックが存在する可能性があります。これらの失効したブロックは現行のデータベースの動作に影響しません。これは、これらのブロックが読み取られるまでに、スタンバイで現在適用されているREDOのSCNまでの、問合せまたは更新の実行に使用されたブロックはすべて、スタンバイによる検証が済んでいるためです。 


プライマリの書込みの欠落エラーがスタンバイで検出されると、失効したブロックごとに次のようなブロック・エラー・メッセージが1つ以上スタンバイ・データベースのアラート・ファイルに出力されます。

Tue Dec 12 19:09:48 2006
STANDBY REDO APPLICATION HAS DETECTED THAT THE PRIMARY DATABASE
LOST A DISK WRITE OF BLOCK 26, FILE 7
NO REDO AT OR AFTER SCN 389667 CAN BE USED FOR RECOVERY.
.
.
.

次に、アラート・ファイルは、ORA-00752エラーがスタンバイ・データベースに発生し、管理リカバリが取り消されたことを示します。

Slave exiting with ORA-752 exception
Errors in file /oracle/log/diag/rdbms/dgstwrite2/stwrite2/trace/
stwrite2_pr00_23532.trc: ORA-00752: recovery detected a lost write of a data block ORA-10567: Redo is inconsistent with data block (file# 7, block# 26) ORA-10564: tablespace TBS_2 ORA-01110: data file 7: '/oracle/dbs/btbs_21.f' ORA-10561: block type 'TRANSACTION MANAGED DATA BLOCK', data object# 57503 . . .

次に、スタンバイ・データベースは、アラート・ファイルに出力されたSCN時点で、このエラーによるデータファイルの破損がない、一貫した状態にリカバリされます。

Recovery interrupted!
Recovered data files to a consistent state at change 389569

この最後のメッセージは、アラート・ファイルのかなり後の方に表示されることがあり、ブロック・エラー・メッセージより小さいSCNの場合もあります。また、プライマリ・データベースは、すでにデータファイルに破損があってもエラーが表示されずに動作している場合があります。

このようなエラーからリカバリするための推奨手順は、次の手順に示すように、フィジカル・スタンバイにフェイルオーバーします。

プライマリで書込みの欠落が検出された後のフィジカル・スタンバイへのフェイルオーバーの手順

  1. プライマリ・データベースを停止します。ブロック・エラー・メッセージに出力されたSCN以降のデータがすべて消失します。

  2. スタンバイ・データベースで次のSQL文を発行してプライマリに変換します。

    SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;
     
    Database altered.
     
    Tue Dec 12 19:15:23 2006
    alter database activate standby database
    ALTER DATABASE ACTIVATE [PHYSICAL] STANDBY DATABASE (stwrite2)
    RESETLOGS after incomplete recovery UNTIL CHANGE 389569
    Resetting resetlogs activation ID 612657558 (0x24846996)
    Online log /oracle/dbs/bt_log1.f: Thread 1 Group 1 was previously cleared
    Online log /oracle/dbs/bt_log2.f: Thread 1 Group 2 was previously cleared
    Standby became primary SCN: 389567
    Tue Dec 12 19:15:23 2006
    Setting recovery target incarnation to 3
    Converting standby mount to primary mount.
    ACTIVATE STANDBY: Complete - Database mounted as primary (stwrite2)
    Completed: alter database activate standby database
    
    
  3. 新しいプライマリをバックアップします。バックアップを即時に実行することは、必要な安全策です。これは、データベースの完全なバックアップ・コピーを作成せずにフェイルオーバーを行うと、変更をリカバリできないためです。フェイルオーバーの結果、元のプライマリ・データベースはData Guard構成に含まれなくなり、他のすべてのスタンバイ・データベースは新しいプライマリ・データベースからREDOデータを受信して適用します。

  4. 新しいプライマリ・データベースをオープンします。

  5. 必要に応じて、障害が発生したプライマリをフィジカル・スタンバイとして再作成します。これは、手順3で新しいプライマリで作成したデータベース・バックアップを使用して行います(この状況では、フラッシュバック・データベースまたはData Guard Brokerを使用して古いプライマリ・データベースを再インスタンス化することはできません)。

    新しいプライマリから作成したバックアップを使用して作成したフィジカル・スタンバイは、古いスタンバイと同じデータファイルを保持することに注意してください。そのため、新しいスタンバイでは同じブロックを比較するので、古いスタンバイがアクティブ化される前に存在していた未検出の書込みの欠落は、新しいスタンバイによって検出されません。プライマリまたはスタンバイで発生した新しい書込みの欠落はすべての検出されます。

    関連項目

    書込みの欠落の検出を有効にする方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 

13.7 Recovery Managerバックアップを使用した障害が発生したプライマリのスタンバイ・データベースへの変換

障害が発生したプライマリ・データベースを変換するには、プライマリでフラッシュバック・データベース機能を有効にし、13.2.1項または13.2.2項で説明した手順に従うことをお薦めします。これらの項の手順では、障害が発生したプライマリをフィジカル・スタンバイまたはロジカル・スタンバイに変換する最も速い方法を説明しています。しかし、障害が発生したプライマリでフラッシュバック・データベースが無効になっている場合でも、次の項で説明するように、障害が発生したプライマリのローカル・バックアップを使用して、障害が発生したプライマリをフィジカル・スタンバイまたはロジカル・スタンバイに変換できます。

13.7.1 Recovery Managerバックアップを使用した、障害が発生したプライマリのフィジカル・スタンバイへの変換

この項の手順では、Recovery Managerバックアップを使用して障害が発生したプライマリをフィジカル・スタンバイに変換する方法を説明します。この手順には、古いプライマリのCOMPATIBLE初期化パラメータが11.0.0以上に設定されている必要があります。

手順1    古いスタンバイ・データベースがプライマリ・データベースになったSCNを判別する。

新しいプライマリ・データベース上で次の問合せを発行し、古いスタンバイ・データベースが新しいプライマリ・データベースになったSCNを判別します。

SQL> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;
手順2    データベース全体をリストアおよびリカバリする。

スタンバイが新しいプライマリになったSCN(standby_became_primary_scn)に古いプライマリが到達する前に作成したバックアップを使用して、データベースをリストアします。次に、Point-in-Timeリカバリを実行して、古いプライマリをそれと同じ時点までリカバリします。

次のRecovery Managerコマンドを発行します。

RMAN> RUN
    {
      SET UNTIL SCN <standby_became_primary_scn + 1>;
      RESTORE DATABASE;
      RECOVER DATABASE;
     }

ユーザー管理リカバリでは、先にデータベースを手動でリストアできます。通常、フェイルオーバー前の、数時間を要したバックアップは古くなっています。そのため、障害が発生したプライマリは次のコマンドを使用してリカバリできます。

SQL> RECOVER DATABASE USIING BACKUP CONTROLFILE UNTIL CHANGE 
<standby_became_primary_scn + 1>;

フラッシュバック・データベースを使用する再インスタンス化とは異なり、この手順ではstandby_became_primary_scnに1を加算します。データファイルの場合、SCNまでフラッシュバックすることは、そのSCNに1を加算するまでリカバリすることと同義です。

手順3    データベースからフィジカル・スタンバイ・データベースに変換する。

古いプライマリ・データベースで次の手順を実行します。

  1. 古いプライマリ・データベースで次の文を発行します。

    SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
    
    

    制御ファイルからスタンバイ制御ファイルへ正常に変換後、この文はデータベースをマウントしません。

  2. データベースを停止して、再開します。

    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP MOUNT;
    
手順4    データベースを読取り専用でオープンする。

次のコマンドを発行します。

SQL> ALTER DATABASE OPEN READ ONLY;

この手順の目的は、ディクショナリ・チェックを使用して制御ファイルをデータベースと同期させることです。このコマンドの後に、ディクショナリ・チェックで示されたアクションがないかアラート・ログをチェックします。通常、フェイルオーバー中に古いプライマリがデータファイルを追加または削除している途中でなければ、ユーザー・アクションは必要ありません。

手順5    (オプション)必要に応じて、スタンバイを再度マウントする。

フィジカル・スタンバイは、読取り専用でオープンされている間、REDOを適用できます。しかし、読取り専用でオープンせずにフィジカル・スタンバイをリカバリする場合、次のように、必要に応じてフィジカル・スタンバイを停止し、再度マウントしてもかまいません。

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
手順6    新しいフィジカル・スタンバイ・データベースへのREDO転送を再開する。

新しいスタンバイ・データベースの作成前に、新しいプライマリ・データベースは、リモート宛先へのREDOの転送を停止しているはずです。REDO転送サービスを再開するには、新しいプライマリ・データベースで次の手順を実行します。

  1. 次の問合せを発行し、アーカイブ宛先の現在の状態を調べます。

    SQL> SELECT DEST_ID, DEST_NAME, STATUS, PROTECTION_MODE, DESTINATION, ERROR,SRL
      2> FROM V$ARCHIVE_DEST_STATUS;
    
    
  2. 必要に応じて、宛先を使用可能にします。

    SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_n=ENABLE;
    
    
  3. スタンバイ・データベースが新しいプライマリ・データベースからのREDOデータの受信を確実に開始するよう、ログ・スイッチを実行し、これが成功したことを確認します。


    注意

    これは、新しいプライマリに続いて、古いプライマリが新しいスタンバイになるために重要な手順です。この手順が実行されないと、古いプライマリは誤ったデータベース・ブランチにリカバリされます。問題を修正する唯一の方法は、古いプライマリを再度変換することです。 


    SQLプロンプトで次の文を入力します。

    SQL> ALTER SYSTEM SWITCH LOGFILE;
    SQL> SELECT DEST_ID, DEST_NAME, STATUS, PROTECTION_MODE, DESTINATION, ERROR,SRL
      2> FROM V$ARCHIVE_DEST_STATUS;
    
    

    新しいスタンバイ・データベースで、REDO転送サービスがREDOデータを別のデータベースに転送しないよう、LOG_ARCHIVE_DEST_n初期化パラメータも変更する必要があります。1つのサーバー・パラメータ・ファイル(SPFILE)でプライマリおよびスタンバイ・データベース・ロールの両方がVALID_FOR属性で設定されている場合、この手順を実行する必要はありません。これにより、Data Guard構成は、ロールの推移後も正しく動作します。

手順7    REDO Applyを開始する。

次のようにして、新しいフィジカル・スタンバイ・データベースでREDO Applyを開始します。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE 
  2> USING CURRENT LOGFILE DISCONNECT;

障害が発生したプライマリ・データベースがリストアされてスタンバイ・ロールで稼働し始めた後、オプションでスイッチオーバーを実行し、それぞれのデータベースを元の(障害発生前の)ロールに推移できます。詳細は、8.2.1項「フィジカル・スタンバイ・データベースへのスイッチオーバーの実行」を参照してください。

13.7.2 Recovery Managerバックアップを使用した障害が発生したプライマリのロジカル・スタンバイへの変換

この項の手順では、Recovery Managerバックアップを使用して障害が発生したプライマリをロジカル・スタンバイに変換する方法を説明します。

手順1    障害が発生したプライマリ・データベースのリカバリ先SCNを判別する。

新しいプライマリ・データベースで次の問合せを発行し、障害が発生したプライマリ・データベースをリカバリするSCNを判別します。

SQL> SELECT APPLIED_SCN RECOVERY_SCN FROM V$LOGSTDBY_PROGRESS;

また、新しいプライマリ・データベースで、次のようにして、アーカイブ・ログの処理に使用するSCNを判別します。

  1. すべてのスタンバイREDOログを必ずアーカイブしておきます。次の問合せを発行し、戻されるREADYの値を検索します。データベースのサイズおよびアーカイブする必要があるログの数によって、READYのステータスが戻されるまでしばらく時間がかかることがあります。

    SQL> SELECT VALUE FROM SYSTEM.LOGSTDBY$PARAMETERS WHERE 
    NAME='REINSTATEMENT_STATUS';
  2. READYのステータスが戻されたら、次の問合せを実行し、このリカバリの一環としてアーカイブ・ログの処理のためのSCNを取得します。

    SQL> SELECT VALUE ARCHIVE_SCN FROM SYSTEM.LOGSTDBY$PARAMETERS
      2> WHERE NAME='STANDBY_BECAME_PRIMARY_SCN';
    
手順2    不一致のアーカイブ・ログを障害が発生したプライマリ・データベースから削除する。

フェイルオーバー操作以後に作成されたアーカイブ・ログをすべて、障害が発生したプライマリ・データベースから削除します。障害が発生したプライマリ・データベースがスタンバイから分離されていた場合は、現行のプライマリ・データベースと一貫性がない不一致のアーカイブ・ログが存在する可能性があります。これらの不一致のアーカイブ・ログを適用しないようにするには、バックアップおよびフラッシュ・リカバリ領域から削除する必要があります。次のRecovery Managerコマンドを使用すると、関連アーカイブ・ログをフラッシュ・リカバリ領域から削除できます。

RMAN> DELETE ARCHIVELOG FROM SCN ARCHIVE_SCN;

削除されると、これらの不一致のログおよび後続のトランザクションはリカバリできなくなります。

手順3    障害が発生したプライマリ・データベースにコピーするログ・ファイルを判別する。

新しいプライマリ・データベースで、次の問合せを発行し、バックアップからリカバリする前に、障害が発生したプライマリ・データベースにコピーする必要があるログ・ファイルの最小セットを判別します。

SQL> SELECT file_name FROM DBA_LOGSTDBY_LOG WHERE next_change# > ARCHIVE_SCN;

必要なスタンバイ・ログを取得し、バックアップ・セットを新しいスタンバイにコピーして新しいスタンバイ・フラッシュ・リカバリ領域にリストアします。これらのログはスタンバイREDOログから得られるため、スタンバイの標準アーカイブの一部ではありません。Recovery Managerユーティリティでは、部分的なファイル名を使用して正しい場所からファイルを取得できます。

次に、Recovery ManagerのBACKUPコマンドの使用例を示します。

RMAN> BACKUP AS COPY DEVICE TYPE DISK FORMAT '/tmp/test/%U'
> ARCHIVELOG LIKE '<partial file names from above>%';

次に、Recovery ManagerのRESTOREコマンドの使用例を示します。

RMAN> CATALOG START WITH '/tmp/test';
RMAN> RESTORE ARCHIVELOG FROM SEQUENCE 33 UNTIL SEQUENCE 35;
手順4    バックアップをリストアしてデータベースをリカバリする。

元のプライマリの全データファイルのバックアップをリストアし、RECOVERY_SCN + 1までリカバリします。現行の制御ファイルを利用することをお薦めします。

  1. データベースを制限モードで起動して、データベースのオープン後にGUARD ALLコマンドが発行されるまでローグ・トランザクションから保護します。

  2. バックアップを使用して障害が発生したプライマリ・データベースのデータファイルをリストアします。

  3. フラッシュバック・データベースが有効な場合は、無効にします(USING BACKUP CONTROLFILE句に必要)。

  4. SQL*Plusで、RECOVERY_SCN +1までPoint-in-Timeリカバリを実行します。

現行の制御ファイルを使用してもバックアップ制御ファイルを使用しても、USING BACKUP CONTROLFILE 句を指定してリストアされるアーカイブ・ログを指すことができるようにする必要があります。指定しないと、リカバリ・プロセスでは、手順3  で取得したログではなく、オンラインREDOログへのアクセスが試行されることがあります。手順3  で取得した順序の入力を求められた場合は、次のようにリストアされるアーカイブ・ログのコピーのファイル名を指定します。

SQL> RECOVER DATABASE UNTIL CHANGE RECOVERY_SCN + 1 USING BACKUP CONTROLFILE;
手順5    RESETLOGSオプションでデータベースをオープンする。
SQL> ALTER DATABASE OPEN RESETLOGS;
手順6    データベース・ガードを有効にする。
SQL> ALTER DATABASE GUARD ALL;
手順7    新しいプライマリ・データベースへのデータベース・リンクを作成してSQL Applyを開始する。
SQL> CREATE PUBLIC DATABASE LINK myLink
  2> CONNECT TO SYSTEM IDENTIFIED BY password
  3> USING 'service name of new primary database';

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY myLink;

この時点で、制限セッション(ALTER SYSTEM DISABLE RESTRICTED SESSION)を無効にできます。つまり、データベースを再起動して手順4.3のフラッシュバックを再度有効にする必要がある場合は、RESTRICTED SESSIONをオフにして再起動します。


戻る 次へ
Oracle
Copyright © 1999, 2008 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引