RMANバックアップポリシーと異機種リカバリの一例(続編)
12324 ワード
本文は《RMANバックアップ策略と異機回復の一例》の続編で、引き続き実験検証を行い、最終的に2つの需要を実現する: 1.異機種リカバリ一時テストのライブラリ 2.転送アーカイブ時にインクリメンタル転送を実現する
以前の異機種リカバリのニーズはすでに訓練に成功しており、以前にリカバリしたライブラリorclを動かさずに、指定した時点を一時的にテストするための小さなライブラリを新しいリカバリする必要があります.インスタンス名はtestdbとして計画されています.注意:リスクは、既存の環境orclに影響を与えないように、すべてのステップの操作に注意しなければならないことです.知識点: a.指定された時点のデータベース を復元する方法 b.データベースの各ファイルのパス をリダイレクトする方法 c.データが自分の必要とする であるかどうかを検証する方法
クエリー・データベースには、2018-06-19のフル・スペアと2018-06-21のフル・スペアの2つの日付が用意されています.
直接restore databaseを使用すると、デフォルトでは最新のフルスペアダンプからリカバリされますが、前のフルスペアはどのように使用できますか?
適切なuntil timeパラメータを指定すると、以前の適切なバックアップセットから自動的にダンプされることがわかります(ここで実験は20180619です).
次に、2018-06-20 18:00:00という時点でリポジトリをリカバリします.インスタンス名はtestdbです.
パラメータファイル、メモリパラメータを適切に減らし、db_を増やすunique_nameパラメータ:
nomountに起動:
制御ファイルを復元するには:
バックアップとアーカイブの確認:
データファイルのリダイレクト-メソッド1:
データファイルのリダイレクト-メソッド2:
このときは必ず仮ファイルとredoログファイルの位置を再確認し、正しく変更されていない場合は必ず修正しなければなりません.そうしないと、災害的な結果になります!!!
このセクションの冒頭で述べた質問をまとめます.a.指定した時点のデータベースをリカバリする方法
b.データベースの各ファイルのパスをリダイレクトする方法
c.データが自分で必要かどうかを検証する方法
以前はアーカイブを転送する際,当日内のファイルはscp直接転送されていたが,インクリメンタル転送が必要となった.
知識点: a.Linuxでインクリメンタル転送ファイルの機能を実現する方法 .
以前windowsはxcopy/y/dを通じてこの需要を実現しました.
/y既存のターゲットファイルを上書きするメッセージの確認を禁止します./d[:MM-DVD-YYYY]指定日または指定日以降に変更されたソースファイルのみをコピーします.「MM-DD-YYYY」の値が含まれていない場合、「xcopy」は既存の「Destination」ファイルよりも新しいすべての「Source」ファイルをコピーします.このコマンドラインオプションを使用すると、変更したファイルを更新できます.
実際のテストでは、前のscpレプリケーション部分をrsync--ignore-existingに置き換え、前のscp部分を注釈してrsync部分を追加します.
テスト、タイミングタスクは、1時間ごとに1時間ごとにアーカイブをバックアップするように調整されます.
去異機192.168.1.61転送されたファイルの修正時間を観察し、1時間ごとに新しいファイルのみがコピー転送されていることを確認します.
最終的に、ファイルの同期の半分が突然オフになったなどの特殊な状況を考慮すると、
1.異機種リカバリの一時テストの小庫
以前の異機種リカバリのニーズはすでに訓練に成功しており、以前にリカバリしたライブラリorclを動かさずに、指定した時点を一時的にテストするための小さなライブラリを新しいリカバリする必要があります.インスタンス名はtestdbとして計画されています.注意:リスクは、既存の環境orclに影響を与えないように、すべてのステップの操作に注意しなければならないことです.知識点:
クエリー・データベースには、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直接転送されていたが,インクリメンタル転送が必要となった.
知識点:
以前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コマンドによりファイルの増分転送の必要性が実現される.