RMANバックアップポリシーと異機種リカバリの一例(続編)

12324 ワード

本文は《RMANバックアップ策略と異機回復の一例》の続編で、引き続き実験検証を行い、最終的に2つの需要を実現する:
  • 1.異機種リカバリ一時テストのライブラリ
  • 2.転送アーカイブ時にインクリメンタル転送を実現する
  • 1.異機種リカバリの一時テストの小庫


    以前の異機種リカバリのニーズはすでに訓練に成功しており、以前にリカバリしたライブラリorclを動かさずに、指定した時点を一時的にテストするための小さなライブラリを新しいリカバリする必要があります.インスタンス名はtestdbとして計画されています.注意:リスクは、既存の環境orclに影響を与えないように、すべてのステップの操作に注意しなければならないことです.知識点:
  • a.指定された時点のデータベース
  • を復元する方法
  • b.データベースの各ファイルのパス
  • をリダイレクトする方法
  • c.データが自分の必要とする
  • であるかどうかを検証する方法
    クエリー・データベースには、2018-06-19のフル・スペアと2018-06-21のフル・スペアの2つの日付が用意されています.
    RMAN> list backup of database summary;
    
    
    List of Backups
    ===============
    Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
    ------- -- -- - ----------- --------------- ------- ------- ---------- ---
    45      B  F  A DISK        21-JUN-18       1       1       YES        TAG20180621T073703
    46      B  F  A DISK        19-JUN-18       1       1       YES        TAG20180619T170003
    54      B  F  A DISK        21-JUN-18       1       1       YES        TAG20180621T073703
    58      B  F  A DISK        21-JUN-18       1       1       YES        TAG20180621T073703
    60      B  F  A DISK        21-JUN-18       1       1       YES        TAG20180621T073703

    直接restore databaseを使用すると、デフォルトでは最新のフルスペアダンプからリカバリされますが、前のフルスペアはどのように使用できますか?
    RMAN> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
    
    sql statement: alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''
    RMAN> restore database until time '2018-06-20 18:00:00' validate;
    
    Starting restore at 21-JUN-18
    using channel ORA_DISK_1
    using channel ORA_DISK_2
    using channel ORA_DISK_3
    using channel ORA_DISK_4
    using channel ORA_DISK_5
    using channel ORA_DISK_6
    
    channel ORA_DISK_1: starting validation of datafile backup set
    channel ORA_DISK_1: reading from backup piece /tmp/FULLBAK_ORCL_20180619_18_1.DBFILE
    channel ORA_DISK_1: piece handle=/tmp/FULLBAK_ORCL_20180619_18_1.DBFILE tag=TAG20180619T170003
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:45
    Finished restore at 21-JUN-18
    
    RMAN> 

    適切なuntil timeパラメータを指定すると、以前の適切なバックアップセットから自動的にダンプされることがわかります(ここで実験は20180619です).
    次に、2018-06-20 18:00:00という時点でリポジトリをリカバリします.インスタンス名はtestdbです.
    [oracle@jystdrac1 ~]$ export ORACLE_SID=testdb
    [oracle@jystdrac1 ~]$ echo $ORACLE_SID
    testdb
    [oracle@jystdrac1 ~]$ mkdir -p /u01/oradata/testdb

    パラメータファイル、メモリパラメータを適切に減らし、db_を増やすunique_nameパラメータ:
    [oracle@jystdrac1 tmp]$ strings ORCL.46.1.20180621.SPFILE
    
    [oracle@jystdrac1 testdb]$ vi pfile.ora
    *.audit_file_dest='/u01/app/oracle/admin/testdb/adump'
    *.audit_trail='db'
    *.compatible='11.2.0.4.0'
    *.control_files='/u01/oradata/testdb/control01.ctl','/u01/oradata/testdb/control02.ctl'
    *.db_block_size=8192
    *.db_domain=''
    *.db_name='orcl'
    *.db_unique_name='testdb'
    *.diagnostic_dest='/u01/app/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=testdbXDB)'
    *.log_archive_dest_1='LOCATION=/u01/arch'
    *.memory_target=334173952
    *.open_cursors=300
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.undo_tablespace='UNDOTBS1'
    
    [oracle@jystdrac1 testdb]$ mkdir -p /u01/app/oracle/admin/testdb/adump

    nomountに起動:
    SQL> startup nomount pfile='/u01/oradata/testdb/pfile.ora';

    制御ファイルを復元するには:
    [oracle@jystdrac1 tmp]$ rman target /
    RMAN> restore controlfile from '/tmp/ORCL.45.1.20180621.CTL';
    RMAN> alter database mount;
    
    select name from v$datafile union all
    select name from v$tempfile union all
    select member from v$logfile;
    
    NAME
    ------------------------------------------------------
    /u01/oradata/orcl/system01.dbf
    /u01/oradata/orcl/sysaux01.dbf
    /u01/oradata/orcl/undotbs01.dbf
    /u01/oradata/orcl/users01.dbf
    /u01/oradata/orcl/temp01.dbf
    /u01/oradata/orcl/redo03.log
    /u01/oradata/orcl/redo02.log
    /u01/oradata/orcl/redo01.log
    
    8 rows selected.
    
    set linesize 140 pagesize 100
    select 'alter database rename file '''||name||''' to '''||name||''';' from v$tempfile union all
    select 'alter database rename file '''||member||''' to '''||member||''';' from v$logfile;
    
     :`to '/u01/oradata/orcl` => to `'/u01/oradata/testdb`
    
    alter database rename file '/u01/oradata/orcl/temp01.dbf' to '/u01/oradata/testdb/temp01.dbf';
    alter database rename file '/u01/oradata/orcl/redo03.log' to '/u01/oradata/testdb/redo03.log';
    alter database rename file '/u01/oradata/orcl/redo02.log' to '/u01/oradata/testdb/redo02.log';
    alter database rename file '/u01/oradata/orcl/redo01.log' to '/u01/oradata/testdb/redo01.log';
    
    -- rename , , , :
    SQL> alter database rename file '/u01/oradata/orcl/sysaux01.dbf' to '/u01/oradata/testdb/sysaux01.dbf'
    *
    ERROR at line 1:
    ORA-01511: error in renaming log/data files
    ORA-01141: error renaming data file 2 - new file '/u01/oradata/testdb/sysaux01.dbf' not found
    ORA-01110: data file 2: '/u01/oradata/orcl/sysaux01.dbf'
    ORA-27037: unable to obtain file status
    Linux-x86_64 Error: 2: No such file or directory
    Additional information: 3

    バックアップとアーカイブの確認:
    crosscheck backup;
    crosscheck archivelog all;
    delete noprompt expired backup;
    delete noprompt expired archivelog all;
    
    catalog start with '/tmp/';
    crosscheck backup;

    データファイルのリダイレクト-メソッド1:
    run {
    set newname for datafile '/u01/oradata/orcl/system01.dbf' to '/u01/oradata/testdb/system01.dbf';
    set newname for datafile '/u01/oradata/orcl/sysaux01.dbf' to '/u01/oradata/testdb/sysaux01.dbf';
    set newname for datafile '/u01/oradata/orcl/undotbs01.dbf' to '/u01/oradata/testdb/undotbs01.dbf';
    set newname for datafile '/u01/oradata/orcl/users01.dbf' to '/u01/oradata/testdb/users01.dbf';
    
    sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
    set until time '2018-06-20 18:00:00';
    restore database;
    switch datafile all;
    }
    
    RMAN> recover database until time '2018-06-20 18:00:00';

    データファイルのリダイレクト-メソッド2:
    -- %f %U, %U , %f , 。
    run {
    set newname for database to '/u01/oradata/testdb/%f';
    
    sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
    set until time '2018-06-20 18:00:00';
    restore database;
    switch datafile all;
    }
    
    RMAN> recover database until time '2018-06-20 18:00:00';

    このときは必ず仮ファイルとredoログファイルの位置を再確認し、正しく変更されていない場合は必ず修正しなければなりません.そうしないと、災害的な結果になります!!!
    SQL> select name from v$datafile union all
      2  select name from v$tempfile union all
      3  select member from v$logfile;
    
    NAME
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /u01/oradata/testdb/1
    /u01/oradata/testdb/2
    /u01/oradata/testdb/3
    /u01/oradata/testdb/4
    /u01/oradata/orcl/temp01.dbf
    /u01/oradata/orcl/redo03.log
    /u01/oradata/orcl/redo02.log
    /u01/oradata/orcl/redo01.log
    
    8 rows selected.
    
    -- , rename , :
    alter database rename file '/u01/oradata/orcl/temp01.dbf' to '/u01/oradata/testdb/temp01.dbf';
    alter database rename file '/u01/oradata/orcl/redo03.log' to '/u01/oradata/testdb/redo03.log';
    alter database rename file '/u01/oradata/orcl/redo02.log' to '/u01/oradata/testdb/redo02.log';
    alter database rename file '/u01/oradata/orcl/redo01.log' to '/u01/oradata/testdb/redo01.log';

    このセクションの冒頭で述べた質問をまとめます.a.指定した時点のデータベースをリカバリする方法
        RMAN> 
        sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
        restore database until time '2018-06-20 18:00:00';
        recover database until time '2018-06-20 18:00:00';

    b.データベースの各ファイルのパスをリダイレクトする方法
        -- 1:
        RMAN>
        run {
        set newname for datafile '/u01/oradata/orcl/system01.dbf' to '/u01/oradata/testdb/system01.dbf';
        restore...
        switch datafile all;
        }
        -- 2:
        RMAN>
        run {
        set newname for database to '/u01/oradata/testdb/';
        restore...
        switch database to copy;
        }
        -- : , open resetlogs , redo ! redo temp :
        alter database rename file '/u01/oradata/orcl/temp01.dbf' to '/u01/oradata/testdb/temp01.dbf';
        alter database rename file '/u01/oradata/orcl/redo03.log' to '/u01/oradata/testdb/redo03.log';
        alter database rename file '/u01/oradata/orcl/redo02.log' to '/u01/oradata/testdb/redo02.log';
        alter database rename file '/u01/oradata/orcl/redo01.log' to '/u01/oradata/testdb/redo01.log';

    c.データが自分で必要かどうかを検証する方法
        SQL> alter database open read only;
        Check Your DATA...
        SQL> shutdown abort;
        SQL> startup mount;
        SQL> alter database open resetlogs;

    2.アーカイブの転送時にインクリメンタル転送を実現


    以前はアーカイブを転送する際,当日内のファイルはscp直接転送されていたが,インクリメンタル転送が必要となった.
    知識点:
  • a.Linuxでインクリメンタル転送ファイルの機能を実現する方法
  • .
    以前windowsはxcopy/y/dを通じてこの需要を実現しました.
    /y既存のターゲットファイルを上書きするメッセージの確認を禁止します./d[:MM-DVD-YYYY]指定日または指定日以降に変更されたソースファイルのみをコピーします.「MM-DD-YYYY」の値が含まれていない場合、「xcopy」は既存の「Destination」ファイルよりも新しいすべての「Source」ファイルをコピーします.このコマンドラインオプションを使用すると、変更したファイルを更新できます.
    実際のテストでは、前のscpレプリケーション部分をrsync--ignore-existingに置き換え、前のscp部分を注釈してrsync部分を追加します.
    -- :
    #echo "Begin scp at : `date`" >>${1}/backup_full.log
    #scp ${1}/*`date +%Y%m%d`* [email protected]:/tmp/
    #echo "End scp at : `date`" >>${1}/backup_full.log
    
    echo "Begin rsync at : `date`" >>${1}/backup_full.log
    rsync --ignore-existing ${1}/*`date +%Y%m%d`* [email protected]:/u01/orabak/
    echo "End rsync at : `date`" >>${1}/backup_full.log
    
    -- :
    #echo "Begin scp at : `date`" >>${1}/backup_arch.log
    #scp ${1}/*`date +%Y%m%d`*.{CTL,SPFILE,ARC} [email protected]:/tmp/
    #echo "End scp at : `date`" >>${1}/backup_arch.log
    
    echo "Begin rsync at : `date`" >>${1}/backup_arch.log
    rsync --ignore-existing ${1}/*`date +%Y%m%d`*.{CTL,SPFILE,ARC} [email protected]:/u01/orabak/
    echo "End rsync at : `date`" >>${1}/backup_arch.log

    テスト、タイミングタスクは、1時間ごとに1時間ごとにアーカイブをバックアップするように調整されます.
    [ora11204@OEL-ASM orabak]$ crontab -l
    0 1 * * * /u01/orabak/scripts/backup.sh /u01/orabak
    0 * * * * /u01/orabak/scripts/backuparch.sh /u01/orabak

    去異機192.168.1.61転送されたファイルの修正時間を観察し、1時間ごとに新しいファイルのみがコピー転送されていることを確認します.
    -rw-r----- 1 oracle oinstall 9.5M Jun 21 13:00 ORCL.79.1.20180621.CTL
    -rw-r----- 1 oracle oinstall  96K Jun 21 13:00 ORCL.80.1.20180621.SPFILE
    -rw-r----- 1 oracle oinstall 2.5K Jun 21 13:00 ORCL.82.1.20180621.ARC
    -rw-r----- 1 oracle oinstall  15K Jun 21 13:00 ORCL.81.1.20180621.ARC
    -rw-r----- 1 oracle oinstall 9.5M Jun 21 14:00 ORCL.83.1.20180621.CTL
    -rw-r----- 1 oracle oinstall  96K Jun 21 14:00 ORCL.84.1.20180621.SPFILE
    -rw-r----- 1 oracle oinstall 2.5K Jun 21 14:00 ORCL.86.1.20180621.ARC
    -rw-r----- 1 oracle oinstall 1.2M Jun 21 14:00 ORCL.85.1.20180621.ARC
    -rw-r----- 1 oracle oinstall 9.5M Jun 21 15:00 ORCL.87.1.20180621.CTL
    -rw-r----- 1 oracle oinstall  96K Jun 21 15:00 ORCL.88.1.20180621.SPFILE
    -rw-r----- 1 oracle oinstall 2.5K Jun 21 15:00 ORCL.90.1.20180621.ARC
    -rw-r----- 1 oracle oinstall 1.2M Jun 21 15:00 ORCL.89.1.20180621.ARC
    -rw-r----- 1 oracle oinstall 9.5M Jun 21 16:00 ORCL.91.1.20180621.CTL
    -rw-r----- 1 oracle oinstall  96K Jun 21 16:00 ORCL.92.1.20180621.SPFILE
    -rw-r----- 1 oracle oinstall 2.5K Jun 21 16:00 ORCL.94.1.20180621.ARC
    -rw-r----- 1 oracle oinstall 1.2M Jun 21 16:00 ORCL.93.1.20180621.ARC

    最終的に、ファイルの同期の半分が突然オフになったなどの特殊な状況を考慮すると、rsync -t -v同期を使用して需要を満たすことに偏り、以前のwindowsのxcopy /y /d方式とより一致する.これによりrsyncコマンドによりファイルの増分転送の必要性が実現される.