sql >> データベース >  >> RDS >> Oracle

欠落しているアーカイブログからスタンバイデータベースを回復する方法

    フィジカルスタンバイデータベースは、プライマリデータベースからのアーカイブログの継続的な適用に依存して、データベースと同期します。 10gより前のバージョンのOracleDatabaseでは、アーカイブログが見つからないか破損している場合、スタンバイデータベースを最初から再構築する必要がありました。 10gから、SCNからの増分バックアップを使用し、それを使用してスタンバイを回復して、欠落しているアーカイブログを補うことができます。ここでは、欠落しているアーカイブログからスタンバイデータベースを回復する方法を説明します

    したがって、欠落しているアーカイブログからスタンバイデータベースを回復する方法の手順は次のとおりです

    ステップ1:

    スタンバイデータベースで、現在のSCNを確認します

    sqlplus "/ as sysdba"
    SQL>set numwidth 30;
    SQL>select current_scn from v$database;
    CURRENT_SCN
    -----------
    6746747647647

    ステップ2

    プライマリデータベースで、上記のSCNから必要な増分バックアップを作成します

    rman target /
    RMAN> {
    allocate channel c1 type disk;
    BACKUP INCREMENTAL FROM SCN 6746747647647 DATABASE
    FORMAT /tmp/inc_standby_%U';
    }

    データベースで多くの変更が発生した場合は、並列ワーカーを使用してバックアップの作成を高速化できます

    run
    {allocate channel d1 type disk;
    allocate channel d2 type disk;
    allocate channel d3 type disk;
    allocate channel d4 type disk;
    allocate channel d5 type disk;
    allocate channel d6 type disk;
    allocate channel d7 type disk;
    allocate channel d8 type disk;
    allocate channel d9 type disk;
    allocate channel d10 type disk;
    BACKUP INCREMENTAL FROM SCN 6746747647647 DATABASE
    FORMAT /tmp/inc_standby_%U';
    }
    

    ステップ3:

    スタンバイデータベースでのマネージドリカバリをキャンセルする

    sqlplus "/ as sysdba"
    SQL>alter database recover managed standby database cancel;
    Media recovery complete.

    ステップ4:

    • バックアップファイルをスタンバイサーバーから/tmpフォルダーにscpします。
    • スタンバイデータベースの増分バックアップファイルのカタログ
    rman target /
    RMAN> CATALOG START WITH '/tmp/';
    searching for all files that match the pattern /tmp/
    List of Files Unknown to the Database
    =====================================……
    Do you really want to catalog the above files (enter YES or NO)? YES
    cataloging files…
    cataloging done

    ステップ5:

    増分バックアップをスタンバイデータベースに適用する

    rman target /
    RMAN>RECOVER DATABASE NOREDO;

    ステップ6:

    スタンバイデータベースを管理対象リカバリモードに戻します。

    sqlplus "/ as sysdba"
    SQL>recover managed standby database disconnect;
    Media recovery complete.

    alert.logから、スタンバイデータベースがまだ古いログファイルを探していることがわかります

    FAL[client]: Failed to request gap sequence
    GAP - thread 1 sequence ….
    

    これは、制御ファイルが更新されていないためです。したがって、スタンバイ制御ファイルを再作成する必要があります

    ステップ7:

    プライマリで新しいスタンバイ制御ファイルを作成します

    sqlplus "/ as sysdba"
    SQL> alter database create standby controlfile as ‘/tmp/standby01.ctl’;
    System altered.

    ステップ8:

    STANDBYデータベースにデータファイル情報をキャプチャします。
    スタンバイ制御ファイルは、手順7で作成したバックアップから更新する必要があります。データファイル名はプライマリとは異なる可能性があるため、プライマリバックアップから制御ファイルを復元した後、参照用にスタンバイデータファイル名の名前を保存してください。スタンバイデータベースで以下のクエリを実行し、さらに使用するために結果を保存します。

    spool standby_datafile_names.txt
    set pagesize 1000;
    set lines 200
    col name format a60
    select file#, name from v$datafile order by file# ;
    spool off

    ステップ9:

    スタンバイ制御ファイルをスタンバイサイトにコピーします。以下のコマンドを使用して、スタンバイデータベースをシャットダウンし、スタンバイ制御ファイルを置き換えて、マネージドリカバリモードでスタンバイデータベースを再起動します

    RMAN> SHUTDOWN IMMEDIATE ;
    RMAN> STARTUP NOMOUNT;
    RMAN> RESTORE STANDBY CONTROLFILE FROM '/tmp/standby01.ctl';
    

    ステップ10:

    スタンバイをマウントする

    RMAN> ALTER DATABASE MOUNT;

    ステップ11:

    この手順は、スタンバイとプライマリでデータファイルの場所が異なる場合に必要です

    プライマリとスタンバイの構造とデータファイル名が同じである場合、この手順はスキップできます。

    この手順を完了する前に、プライマリとスタンバイのインカネーションを確認することをお勧めします。

    example:  
    RMAN> list incarnation; 

    PRIMARYから制御ファイルを復元したため、この復元されたSTANDBY制御ファイルのデータファイルの場所の名前は、PRIMARYデータベースの名前と同じになります。ディレクトリ構造がスタンバイデータベースとプライマリデータベースで異なる場合、またはOracle管理ファイル名OMFを使用している場合、スタンバイファイルを識別できません。したがって、STANDBYデータファイルをRMANでカタログ化して、名前変更操作を実行できます。

    スタンバイデータファイルが存在するディスクグループ(またはディレクトリ)ごとに、スタンバイで次の手順を実行します。

    RMAN> CATALOG START WITH '+DATA/STBY/datafile/';

    バックアップSCN(この例ではscn 6746747647647)の後にデータファイルがプライマリに追加されている場合、standby_file_managementパラメータの設定に関係なく、それらのデータファイルはスタンバイサーバーに自動的に作成されません。追加されたデータファイルは、スタンバイサーバーに復元する必要があります。スタンバイ現在のSCN以降にプライマリにファイルが追加されているかどうかを確認するには

    SQL>SELECT FILE#, NAME FROM V$DATAFILE WHERE CREATION_CHANGE# > 6746747647647

    行が返される場合は、それらのファイルをプライマリからスタンバイに復元する必要があります

    RMAN> backup datafile <missing-1>,<missing-2> ,<missing-3> , format '/tmp/ForStandby_%U' tag 'FORSTANDBY';

    これらをスタンバイにコピーしてから、カタログ化して復元します

    CATALOG START WITH '/tmp/ForStandby';
    run
    {
    set newname for datafile X to '+DISKGROUP';
    set newname for datafile Y to '+DISKGROUP';
    set newname for datafile Z to '+DISKGROUP';
    etc.
    restore datafile x,y,z,….;
    }
    を復元します

    これで、データベースをコピーに切り替えることができます

    RMAN> SWITCH DATABASE TO COPY;

    上記のクエリが0のゼロ行で返される場合

    RMAN> SWITCH DATABASE TO COPY;

    ステップ11

    スタンバイ データベース、すべてのスタンバイREDOロググループをクリアします:

    SQL> select GROUP#from v $ logfile where TYPE ='STANDBY' group by GROUP#;
    SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
    SQL> ALTER DATABASE CLEAR LOGFILE GROUP 2;
    SQL> ALTER DATABASE CLEAR LOGFILE GROUP3;
    …。

    ステップ12

    これで、MRPを開始できます

    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

    欠落しているアーカイブログからスタンバイデータベースを回復する方法に関するこれらの詳細な手順が気に入っていただければ幸いです。フィードバックを提供してください。間違いがあるかもしれません。

    また読む
    非ASMからASM
    oracleでアーカイブログシーケンス番号を見つける方法
    oracleでアラートログエラーを確認する方法
    RMANバックアップコマンド
    RMANリストバックアップコマンド
    RMAN増分バックアップを使用してフィジカルスタンバイデータベースをロールフォワードするために実行する手順。 (ドキュメントID 836986.1)


    1. MySQL:GROUP_CONCAT値を並べ替える

    2. T-SQLを使用してSQLServerの列を削除する方法

    3. MySQLレプリケーションのフェイルオーバーの概要-101ブログ

    4. RIDルックアップはキールックアップよりも高速ですか?