搭建DG过程中三种常用的physical standby创建方法:
1、使用传统的RMAN 备份和恢复
2、使用基于backup的duplicate
3、使用基于active database的duplicate
================= 1、使用RMAN backup & Restore建立备库 =================
###备份prmy数据库
SYS@tstdb1-SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 205
Next log sequence to archive 208
Current log sequence 208
rman target /
run
{
set MAXCORRUPT FOR DATAFILE 7 to 1;
backup database;
}
datafile的backup: piece handle=/oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_nnndf_TAG20150815T162129_1lUHfAiAK_.bkp tag=TAG20150815T162129 comment=NONE
control & spfile的backup: piece handle=/oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncsnf_TAG20150815T162129_1lUHgkeH5_.bkp tag=TAG20150815T162129 comment=NONE
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
SYS@tstdb1-SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 209
Next log sequence to archive 212
Current log sequence 212
###备份archivelog
backup archivelog sequence between 208 and 211;
piece handle=/oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp
###备份生成standby controlfile
backup current controlfile for standby; <---可以不加for standby,等待restore时自动转换
piece handle=/oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp
RMAN> list backup of controlfile;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -----------------
117249 Full 13.70M DISK 00:00:01 20150815 16:21:57
BP Key: 117253 Status: AVAILABLE Compressed: NO Tag: TAG20150815T162129
Piece Name: /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncsnf_TAG20150815T162129_1lUHgkeH5_.bkp <---随backup database生成的controlfile backup
Control File Included: Ckp SCN: 12793185486809 Ckp time: 20150815 16:21:56
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -----------------
117331 Full 13.67M DISK 00:00:01 20150815 16:26:31
BP Key: 117336 Status: AVAILABLE Compressed: NO Tag: TAG20150815T162628
Piece Name: /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp <---backup ... for standby生成的controlfile backup
Standby Control File Included: Ckp SCN: 12793185487102 Ckp time: 20150815 16:26:30
说明:上面两个controlfile backup中的任何一个都可以用来恢复standby controlfile
###将上面这些backuppiece复制到stdby主机的目录下
scp /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_nnndf_TAG20150815T162129_1lUHfAiAK_.bkp oracle@10.10.149.110:/oradata06/teststdby/bkup/
scp /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncsnf_TAG20150815T162129_1lUHgkeH5_.bkp oracle@10.10.149.110:/oradata06/teststdby/bkup/
scp /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp oracle@10.10.149.110:/oradata06/teststdby/bkup/
scp /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp oracle@10.10.149.110:/oradata06/teststdby/bkup/
###prmy上配置listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = tstdb1)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1)
)
)
###stdby上配置listener.ora
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_L1522=
(SID_LIST =
(SID_DESC = ##新加行
(GLOBAL_DBNAME = tstdb1_stdby1) ##新加行
(ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1_stdby1) ##新加行
) ##新加行
)
###prmy、stdby上的tnsnames.ora文件里都要加上自己和对方的network alias name
tstdb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
)
(CONNECT_DATA =
(Service_name = tstdb1)
(SERVER = DEDICATED)
)
)
tstdb1_stdby1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
)
(CONNECT_DATA =
(Service_name = tstdb1_stdby1)
(SERVER = DEDICATED)
)
)
###stdby上的tnsnames.ora文件里还要非缺省的listener L1522的network alias name
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
###stdby主机上初始化参数配置
db_name=tstdb1
db_unique_name=tstdb1_stdby1
control_files='/oradata06/teststdby/testaaaaa/control01.ctl','/oradata06/teststdby/testaaaaa/control02.ctl'
db_file_name_convert='/oradata06/testaaaaa','/oradata06/teststdby/testaaaaa'
log_file_name_convert='/oradata06/testaaaaa','/oradata06/teststdby/testaaaaa'
db_recovery_file_dest='/oradata06/teststdby/fra'
db_recovery_file_dest_size=200G
db_lost_write_protect=typical
undo_tablespace=undotbs3
service_names=tstdb1_stdby1
LOG_ARCHIVE_CONFIG='DG_CONFIG=(tstdb1,tstdb1_stdby1)'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1_stdby1'
log_archive_dest_2='service=tstdb1 ASYNC valid_for=(online_logfiles,primary_roles) db_unique_name=tstdb1'
fal_server=tstdb1
standby_file_management=AUTO
memory_target=6G
local_listener='L1522'
###prmy主机上初始化参数配置
control_files='/oradata06/testaaaaa/control01.ctl','/oradata06/testaaaaa/control02.ctl'#Restore Controlfile
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_recovery_file_dest='/oradata06/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=6G
recyclebin='ON'
service_names='TSTDB1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(tstdb1,tstdb1_stdby1)'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1'
log_archive_dest_2='service=tstdb1_stdby1 ASYNC valid_for=(online_logfiles,primary_roles) db_unique_name=tstdb1_stdby1'
standby_file_management=AUTO
db_file_name_convert='/oradata06/teststdby/testaaaaa','/oradata06/testaaaaa'
log_file_name_convert='/oradata06/teststdby/testaaaaa','/oradata06/testaaaaa'
###prmy主机上的密码文件复制到stdby主机
scp orapwtstdb1 oracle@10.10.149.110:/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1_stdby1
###在prmy库上开启force logging
alter database force logging;
###prmy库上建好standby redolog,为之后的role transition作准备;只要一个member即可,多个会影响性能
alter database add standby logfile group 11 ('/oradata06/testaaaaa/stdredo01a.log') size 128m reuse;
alter database add standby logfile group 12 ('/oradata06/testaaaaa/stdredo02a.log') size 128m reuse;
alter database add standby logfile group 13 ('/oradata06/testaaaaa/stdredo03a.log') size 128m reuse;
alter database add standby logfile group 14 ('/oradata06/testaaaaa/stdredo04a.log') size 128m reuse;
alter database add standby logfile group 15 ('/oradata06/testaaaaa/stdredo05a.log') size 128m reuse;
###stdby实例启动、restore standby controlfile、启动到mount
export ORACLE_SID=tstdb1_stdby1
sqlplus '/as sysdba'
startup nomount
create spfile from pfile;
startup force nomount;
rman target /
restore standby controlfile from '/oradata06/teststdby/bkup/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp'; <---注:这里必须加Standby否则后面mount standby database时会报ORA-01665: control file is not a standby control file
Starting restore at 20150815 17:40:17
using channel ORA_DISK_1
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oradata06/teststdby/testaaaaa/control01.ctl
output file name=/oradata06/teststdby/testaaaaa/control02.ctl
Finished restore at 20150815 17:40:19
alter database mount standby database;
RMAN> report schema;
using target database control file instead of recovery catalog
RMAN-06139: WARNING: control file is not current for REPORT SCHEMA
Report of database schema for database with db_unique_name TSTDB1_STDBY1
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 0 SYSTEM *** /oradata06/teststdby/testaaaaa/system01.dbf <----控制文件里保存的文件路径已经是经过db_file_name_convert转换后的路径
2 0 SYSAUX *** /oradata06/teststdby/testaaaaa/sysaux01.dbf
3 0 UNDOTBS *** /oradata06/teststdby/testaaaaa/undotbs01.dbf
4 0 USERS *** /oradata06/teststdby/testaaaaa/users01.dbf
5 0 TS0422_1 *** /oradata06/teststdby/testaaaaa/ts0422_1.dbf
6 0 XDBTS *** /oradata06/teststdby/testaaaaa/xdbts1.dbf
7 0 TS0811 *** /oradata06/teststdby/testaaaaa/ts0811_1.dbf
9 0 OMFTBS1 *** /oradata06/omf/TSTDB1/datafile/o1_mf_omftbs1_1kkDQZdsn_.dbf
10 0 UNDOTBS3 *** /oradata06/teststdby/testaaaaa/undotbs3.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 1024 TEMP 1024 /oradata06/teststdby/testaaaaa/temp01.dbf
SQL> select name,dbid,open_mode,CONTROLFILE_TYPE from v$database;
NAME DBID OPEN_MODE CONTROL
--------- ---------- -------------------- -------
TSTDB1 2051793563 MOUNTED STANDBY <---确保controlfile type一定是standby
###stdby主机上catalog backuppiece to standby controlfile
catalog backuppiece '/oradata06/teststdby/bkup/o1_mf_nnndf_TAG20150815T162129_1lUHfAiAK_.bkp';
catalog backuppiece '/oradata06/teststdby/bkup/o1_mf_ncsnf_TAG20150815T162129_1lUHgkeH5_.bkp';
catalog backuppiece '/oradata06/teststdby/bkup/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp';
catalog backuppiece '/oradata06/teststdby/bkup/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp';
###restore database
run
{
set newname for datafile '/oradata06/omf/TSTDB1/datafile/o1_mf_omftbs1_1kkDQZdsn_.dbf' to '/oradata06/teststdby/testaaaaa/omftbs1_1.dbf';
restore database;
}
switch datafile 9 to copy;
RMAN> report schema;
RMAN-06139: WARNING: control file is not current for REPORT SCHEMA
Report of database schema for database with db_unique_name TSTDB1_STDBY1
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 1024 SYSTEM *** /oradata06/teststdby/testaaaaa/system01.dbf
2 1300 SYSAUX *** /oradata06/teststdby/testaaaaa/sysaux01.dbf
3 2048 UNDOTBS *** /oradata06/teststdby/testaaaaa/undotbs01.dbf
4 1024 USERS *** /oradata06/teststdby/testaaaaa/users01.dbf
5 1800 TS0422_1 *** /oradata06/teststdby/testaaaaa/ts0422_1.dbf
6 500 XDBTS *** /oradata06/teststdby/testaaaaa/xdbts1.dbf
7 128 TS0811 *** /oradata06/teststdby/testaaaaa/ts0811_1.dbf
9 128 OMFTBS1 *** /oradata06/teststdby/testaaaaa/omftbs1_1.dbf
10 512 UNDOTBS3 *** /oradata06/teststdby/testaaaaa/undotbs3.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 1024 TEMP 1024 /oradata06/teststdby/testaaaaa/temp01.dbf
###recover database
recover database until sequence 212;
Starting recover at 20150815 20:37:30
using channel ORA_DISK_1
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=208
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=209
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=210
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=211
channel ORA_DISK_1: reading from backup piece /oradata06/teststdby/bkup/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp
channel ORA_DISK_1: piece handle=/oradata06/teststdby/bkup/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp tag=TAG20150815T162444
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_208_1lUVymrjP_.arc thread=1 sequence=208
channel default: deleting archived log(s)
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_208_1lUVymrjP_.arc RECID=1 STAMP=887834252
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_209_1lUVynCiH_.arc thread=1 sequence=209
channel default: deleting archived log(s)
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_209_1lUVynCiH_.arc RECID=3 STAMP=887834252
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_210_1lUVynK1A_.arc thread=1 sequence=210
channel default: deleting archived log(s)
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_210_1lUVynK1A_.arc RECID=4 STAMP=887834252
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_211_1lUVymv9s_.arc thread=1 sequence=211
channel default: deleting archived log(s)
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_211_1lUVymv9s_.arc RECID=2 STAMP=887834252
Oracle Error:
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: '/oradata06/teststdby/testaaaaa/system01.dbf'
media recovery complete, elapsed time: 00:00:01
Finished recover at 20150815 20:37:34
###若要使用maximum protection或者maximum availability必须在stdby主机上建立standby redo,比online redolog的每个thread多一组;maximum performance也推荐加上,好处是能有效减少data loss,减少LNS进程对于RFS进程的等待
alter database add standby logfile group 11 ('/oradata06/teststdby/testaaaaa/stdredo01a.log') size 128m reuse;
alter database add standby logfile group 12 ('/oradata06/teststdby/testaaaaa/stdredo02a.log') size 128m reuse;
alter database add standby logfile group 13 ('/oradata06/teststdby/testaaaaa/stdredo03a.log') size 128m reuse;
alter database add standby logfile group 14 ('/oradata06/teststdby/testaaaaa/stdredo04a.log') size 128m reuse;
alter database add standby logfile group 15 ('/oradata06/teststdby/testaaaaa/stdredo05a.log') size 128m reuse;
###stdby侧开启redo apply
alter database recover managed standby database disconnect from session;
###max performance mode下相关视图的查询结果
set linesize 150
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
col dest_name format a20
col destination format a15
set numwidth 16 linesize 150
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name='LOG_ARCHIVE_DEST_2';
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- --------- ------- ---------- -------- --------------- ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 12793186257921
col dest_name format a20
col destination format a14
col DB_UNIQUE_NAME format a12
col SYNCHRONIZATION_STATUS format a12
col TYPE format a8
col gap_status format a8
set linesize 180
col standby_logfile_count format a5
col ARCHIVED_SEQ# format a5
select dest_name,status,type,database_mode,recovery_mode,protection_mode,destination,to_char(standby_logfile_count) "standby_logfile_count",to_char(archived_seq#) "archived_seq#",applied_seq#,srl,SYNCHRONIZATION_STATUS,SYNCHRONIZED,gap_status from v$archive_dest_status where dest_name='LOG_ARCHIVE_DEST_2';
DEST_NAME STATUS TYPE DATABASE_MODE RECOVERY_MODE PROTECTION_MODE DESTINATION stand archi APPLIED_SEQ# SRL SYNCHRONIZAT SYN GAP_STAT
-------------------- --------- -------- --------------- ----------------------- -------------------- -------------- ----- ----- ------------ --- ------------ --- --------
LOG_ARCHIVE_DEST_2 VALID PHYSICAL MOUNTED-STANDBY MANAGED MAXIMUM PERFORMANCE tstdb1_stdby1 5 297 296 YES CHECK CONFIG NO NO GAP
URATION
================= 2、Backup-based RMAN duplicate建立备库 =================
###生成prmy库的备份
backup database include current controlfile format '/oradata06/dupuse/0901/dc_%U';
piece handle=/oradata06/dupuse/0901/dc_2dqg3e87_1_1 tag=TAG20150901T211550 comment=NONE
piece handle=/oradata06/dupuse/0901/dc_2eqg3e9a_1_1 tag=TAG20150901T211550 comment=NONE
archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 347
Next log sequence to archive 349
Current log sequence 349
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 350
Next log sequence to archive 352
Current log sequence 352
backup archivelog sequence between 349 and 351 format '/oradata06/dupuse/0901/arch_%U';
piece handle=/oradata06/dupuse/0901/arch_2fqg3ed1_1_1 tag=TAG20150901T211824 comment=NONE
###复制备份到stdby库
scp /oradata06/dupuse/0901/* oracle@10.10.149.110:/oradata06/dupuse/0901/
###在prmy库上开启force logging
alter database force logging;
###prmy主机上的密码文件复制到stdby主机
scp $ORACLE_HOME/dbs/orapwtstdb1 oracle@10.10.149.110:/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1_stdby1
###prmy、stdby库tnsnames.ora
tstdb1_stdby1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
)
(CONNECT_DATA =
(Service_name = tstdb1_stdby1)
(SERVER = DEDICATED)
)
)
tstdb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
)
(CONNECT_DATA =
(Service_name = tstdb1)
(SERVER = DEDICATED)
)
)
###stdby库的tnsnames.ora需额外加上L1522的network alias name
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
###prmy库的listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = tstdb1)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1)
)
)
###stdby库的listener.ora
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_L1522=
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = tstdb1_stdby)
(ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1_stdby1)
)
)
###prmy库初始化参数规划
control_files='/oradata06/testaaaaa/control01.ctl','/oradata06/testaaaaa/control02.ctl'#Restore Controlfile
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_recovery_file_dest='/oradata06/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=6G
recyclebin='ON'
service_names='TSTDB1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1'
log_archive_dest_2='service=tstdb1_stdby1 valid_for=(online_logfiles,primary_role) db_unique_name=tstdb1_stdby1'
log_archive_config='db_config=(tstdb1,tstdb1_stdby1)'
fal_server=tstdb1_stdby1
standby_file_management=auto
db_file_name_convert='/oradata06/teststdby/testaaaaa/','/oradata06/testaaaaa/'
db_log_name_convert='/oradata06/teststdby/testaaaaa/','/oradata06/testaaaaa/'
###stdby库初始化参数规划
control_files='/oradata06/teststdby/testaaaaa/control01.ctl','/oradata06/teststdby/testaaaaa/control02.ctl'
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_unique_name='tstdb1_stdby1'
db_recovery_file_dest='/oradata06/teststdby/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=4G
recyclebin='ON'
service_names='tstdb1_stdby1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
local_listener='L1522'
db_file_name_convert='/oradata06/testaaaaa/','/oradata06/teststdby/testaaaaa/'
db_log_name_convert='/oradata06/testaaaaa/','/oradata06/teststdby/testaaaaa/'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1_stdby1'
log_archive_dest_2='service=tstdb1 valid_for=(online_logfiles,primary_role) db_unique_name=tstdb1'
log_archive_config='dg_config=(tstdb1,tstdb1_stdby1)'
fal_server=tstdb1
standby_file_management=auto
###启动stdby/auxiliary instance
lsnrctl start L1522
export ORACLE_SID=tstdb1_stdby1
startup nomount pfile=$ORACLE_HOME/dbs/inittstdb1_stdby1.ora
create spfile from pfile;
startup force nomount;
rman target sys/773946@tstdb1 catalog rman/773946@tstdb2 auxiliary sys/773946@tstdb1_stdby1
run
{
set newname for datafile '/oradata06/omf/TSTDB1/datafile/o1_mf_omftbs1_1kkDQZdsn_.dbf' to '/oradata06/teststdby/testaaaaa/omftbs1.dbf';
duplicate database tstdb1 for standby; <---后面也可以加上dorecover用途是将stdby恢复到最新的archivelog
}
executing command: SET NEWNAME
Starting Duplicate Db at 20150902 13:21:56
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=530 device type=DISK
contents of Memory Script:
{
restore clone standby controlfile;
}
executing Memory Script
Starting restore at 20150902 13:21:56
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: reading from backup piece /oradata06/dupuse/0901/dc_2eqg3e9a_1_1
channel ORA_AUX_DISK_1: piece handle=/oradata06/dupuse/0901/dc_2eqg3e9a_1_1 tag=TAG20150901T211550
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oradata06/teststdby/testaaaaa/control01.ctl
output file name=/oradata06/teststdby/testaaaaa/control02.ctl
Finished restore at 20150902 13:21:57
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
。。。。省略部分输出
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
STANDBY
###prmy库上建立standby redolog
alter database add standby logfile group 11 ('/oradata06/testaaaaa/stdredo11a.log') size 128m;
alter database add standby logfile group 12 ('/oradata06/testaaaaa/stdredo12a.log') size 128m;
alter database add standby logfile group 13 ('/oradata06/testaaaaa/stdredo13a.log') size 128m;
alter database add standby logfile group 14 ('/oradata06/testaaaaa/stdredo14a.log') size 128m;
###stdby库上建立standby redolog
alter database add standby logfile group 11 ('/oradata06/teststdby/testaaaaa/stdredo11a.log') size 128m;
alter database add standby logfile group 12 ('/oradata06/teststdby/testaaaaa/stdredo12a.log') size 128m;
alter database add standby logfile group 13 ('/oradata06/teststdby/testaaaaa/stdredo13a.log') size 128m;
alter database add standby logfile group 14 ('/oradata06/teststdby/testaaaaa/stdredo14a.log') size 128m;
###备库启动至read only模式
alter database open read only;
***recover managed standby 开启前prmy库视图内容
col destination format a15
col db_unique_name format a15
col type format a10
col STATUS format a8
col database_mode format a15
col recovery_mode format a15
col synchronization_status format a20
col gap_status format a8
set linesize 180
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 354 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID MOUNTED-STANDBY IDLE 1 352 348 CHECK CONFIGURATION NO GAP
SYS@tstdb1-SQL> select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
col dest_name format a20
col destination format a15
set numwidth 16 linesize 150
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name='LOG_ARCHIVE_DEST_2';
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- --------- ------- ---------- -------- --------------- ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 12793186514587
***recover managed standby 开启前stdby库视图内容
SELECT dest_name,DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq# FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DEST_NAME DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ#
---------------------- --------------- --------------- ---------- -------- --------------- --------------- ---------------- ---------------- ----------------
LOG_ARCHIVE_DEST_1 tstdb1_stdby1 LOCAL VALID MOUNTED-STANDBY IDLE 0 0 0
LOG_ARCHIVE_DEST_2 tstdb1 tstdb1 UNKNOWN VALID UNKNOWN IDLE 0 0 0
STANDBY_ARCHIVE_DEST NONE UNKNOWN VALID UNKNOWN IDLE 1 352 348
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE MOUNTED RECOVERY NEEDED
col destination format a30
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_1 VALID LOCAL ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID REMOTE LGWR PENDING tstdb1 LGWR YES ASYNCHRONOUS NO 0
SELECT * FROM V$DATAGUARD_STATS;
alter database recover managed standby database using current logfile disconnect;
***recover managed standby开启后prmy相关视图的内容变化
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ---------------- ---------------- -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 354 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 352 348 CHECK CONFIGURATION NO GAP
ME APPLY
v$archive_dest_status里的archived_seq#,applied_sql#,下一次switch logfile后才会刷新,但这里有个疑问题那就是开启了RTA后applied_seq#应该至少与archived_log#相等才对,实际看到的确是小一号;另外经测试如果工作在SYNC方式下applied_seq#还是小于实际已经applied的seq#
alter system switch logfile;
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ---------------- ---------------- -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 355 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 355 354 CHECK CONFIGURATION NO GAP
ME APPLY
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
v$archive_dest.applied_scn也没有及时更新
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_1 VALID PRIMARY ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 12793186514587
***recover managed standby开启后stdby相关视图的内容变化,注意到stdby上名为STANDBY_ARCHIVE_DEST的applied_seq#值与archived_thread#相同,均更新为了355
SQL> select dest_name,DESTINATION,db_unique_name,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DEST_NAME DESTINATION DB_UNIQUE_NAME DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# GAP_STAT
-------------------- --------------- --------------- --------------- ------------------------- ---------------- ---------------- ---------------- --------
LOG_ARCHIVE_DEST_1 tstdb1_stdby1 OPEN_READ-ONLY MANAGED REAL TIME APPLY 0 0 0
LOG_ARCHIVE_DEST_2 tstdb1 tstdb1 UNKNOWN IDLE 0 0 0 NO GAP
STANDBY_ARCHIVE_DEST NONE UNKNOWN IDLE 1 355 355
SQL> select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ ONLY WITH APPLY NOT ALLOWED
SQL> select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_1 VALID LOCAL ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID REMOTE LGWR PENDING tstdb1 LGWR YES ASYNCHRONOUS NO 0
***v$dataguard_stats仅能在stdby上才能查出内容,能够准确反映传输和应用上的延迟
SQL> col value format a20
SQL> set linesize 150
SQL> select * from v$dataguard_stats;
NAME VALUE UNIT TIME_COMPUTED DATUM_TIME
-------------------------------- -------------------- ------------------------------ ------------------------------ ------------------------------
transport lag +00 00:00:00 day(2) to second(0) interval 09/02/2015 15:42:23 09/02/2015 15:42:22
apply lag +00 00:00:00 day(2) to second(0) interval 09/02/2015 15:42:23 09/02/2015 15:42:22
apply finish time +00 00:00:00.000 day(2) to second(3) interval 09/02/2015 15:42:23
estimated startup time 11 second 09/02/2015 15:42:23
================= 3、RMAN duplicate ... from active database建立备库 =================
###prmy库启动force logging
alter database enable force logging;
###prmy库初始化参数设定
control_files='/oradata06/testaaaaa/control01.ctl','/oradata06/testaaaaa/control02.ctl'#Restore Controlfile
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_recovery_file_dest='/oradata06/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=6G
recyclebin='ON'
service_names='TSTDB1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1'
log_archive_dest_2='service=tstdb1_stdby1 ASYNC valid_for=(online_logfiles,primary_roles) db_unique_name=tstdb1_stdby1'
standby_file_management=AUTO
log_archive_config='dg_config=(tstdb1,tstdb1_stdby1)'
fal_server=tstdb1_stdby1
db_file_name_convert='/oradata06/teststdby/testaaaaa/','/oradata06/testaaaaa/'
db_log_name_convert='/oradata06/teststdby/testaaaaa/','/oradata06/testaaaaa/'
###stdby库初始化参数设定
control_files='/oradata06/teststdby/testaaaaa/control01.ctl','/oradata06/teststdby/testaaaaa/control02.ctl'
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_unique_name='tstdb1_stdby1'
db_recovery_file_dest='/oradata06/teststdby/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=4G
recyclebin='ON'
service_names='tstdb1_stdby1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
local_listener='L1522'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1_stdby1'
log_archive_dest_2='service=tstdb1 ASYNC valid_for=(online_logfiles,primary_roles) db_unique_name=tstdb1'
standby_file_management=AUTO
log_archive_config='dg_config=(tstdb1,tstdb1_stdby1)'
fal_server=tstdb1
db_file_name_convert='/oradata06/testaaaaa/','/oradata06/teststdby/testaaaaa/','/oradata06/omf/TSTDB1/datafile/','/oradata06/teststdby/testaaaaa/'
log_file_name_convert='/oradata06/testaaaaa/','/oradata06/teststdby/testaaaaa/'
###prmy库上建立好standby redolog
alter database add standby logfile group 11 ('/oradata06/testaaaaa/stdredo11.log') size 128m;
alter database add standby logfile group 12 ('/oradata06/testaaaaa/stdredo12.log') size 128m;
alter database add standby logfile group 13 ('/oradata06/testaaaaa/stdredo13.log') size 128m;
alter database add standby logfile group 14 ('/oradata06/testaaaaa/stdredo14.log') size 128m;
###密码文件从prmy复制到stdby
scp $ORACLE_HOME/dbs/orapwtstdb1 oracle@10.10.149.110:/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1_stdby1
###prmy上的listener.ora文件
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = tstdb1)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1)
)
)
###stdby上的listener.ora文件
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_L1522=
(SID_LIST =
(SID_DESC = ##新加行
(GLOBAL_DBNAME = tstdb1_stdby1) ##新加行
(ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1_stdby1) ##新加行
) ##新加行
)
###prmy、stdby上的tnsnames.ora文件
tstdb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
)
(CONNECT_DATA =
(Service_name = tstdb1)
(SERVER = DEDICATED)
)
)
tstdb1_stdby1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
)
(CONNECT_DATA =
(Service_name = tstdb1_stdby1)
(SERVER = DEDICATED)
)
)
###stdby上的tnsnames.ora文件还要额外包含list ener L1522的解析
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
###重启prmy数据库
shutdown abort
sqlplus '/as sysdba'
create spfile from pfile;
startup
###启动stdby数据库至nomount
export ORACLE_SID=tstdb1_stdby1
sqlplus '/as sysdba'
create spfile from pfile;
startup nomount
###测试到stdby instance,prmy instance的连接是否通畅
sqlplus "sys/773946@tstdb1 as sysdba"
sqlplus "sys/773946@tstdb1_stdby1 as sysdba"
###rman duplicate ... from active database
rman target sys/773946@tstdb1 catalog rman/773946@tstdb2 auxiliary sys/773946@tstdb1_stdby1
RMAN> duplicate database tstdb1 for standby from active database;
Starting Duplicate Db at 20150903 17:48:38
starting full resync of recovery catalog
full resync complete
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=398 device type=DISK
contents of Memory Script:
{
backup as copy reuse
targetfile '/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1' auxiliary format
'/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1_stdby1' ;
}
executing Memory Script
Starting backup at 20150903 17:48:42
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=69 device type=DISK
Finished backup at 20150903 17:48:45
contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/oradata06/teststdby/testaaaaa/control01.ctl';
restore clone controlfile to '/oradata06/teststdby/testaaaaa/control02.ctl' from
'/oradata06/teststdby/testaaaaa/control01.ctl';
}
executing Memory Script
Starting backup at 20150903 17:48:45
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/oracle/app/oracle/product/11.2.0/db_1/dbs/snapcf_tstdb1.f tag=TAG20150903T174150 RECID=9 STAMP=889465312
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 20150903 17:48:50
Starting restore at 20150903 17:48:50
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 20150903 17:48:51
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
set newname for tempfile 1 to
"/oradata06/teststdby/testaaaaa/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/oradata06/teststdby/testaaaaa/system01.dbf";
set newname for datafile 2 to
"/oradata06/teststdby/testaaaaa/sysaux01.dbf";
set newname for datafile 3 to
"/oradata06/teststdby/testaaaaa/undotbs01.dbf";
set newname for datafile 4 to
"/oradata06/teststdby/testaaaaa/users01.dbf";
set newname for datafile 6 to
"/oradata06/teststdby/testaaaaa/xdbts1.dbf";
set newname for datafile 9 to
"/oradata06/teststdby/testaaaaa/o1_mf_omftbs1_1kkDQZdsn_.dbf";
set newname for datafile 10 to
"/oradata06/teststdby/testaaaaa/undotbs3.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/oradata06/teststdby/testaaaaa/system01.dbf" datafile
2 auxiliary format
"/oradata06/teststdby/testaaaaa/sysaux01.dbf" datafile
3 auxiliary format
"/oradata06/teststdby/testaaaaa/undotbs01.dbf" datafile
4 auxiliary format
"/oradata06/teststdby/testaaaaa/users01.dbf" datafile
6 auxiliary format
"/oradata06/teststdby/testaaaaa/xdbts1.dbf" datafile
9 auxiliary format
"/oradata06/teststdby/testaaaaa/o1_mf_omftbs1_1kkDQZdsn_.dbf" datafile
10 auxiliary format
"/oradata06/teststdby/testaaaaa/undotbs3.dbf" ;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /oradata06/teststdby/testaaaaa/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 20150903 17:48:59
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/oradata06/testaaaaa/undotbs01.dbf
output file name=/oradata06/teststdby/testaaaaa/undotbs01.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:03:05
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/oradata06/testaaaaa/sysaux01.dbf
output file name=/oradata06/teststdby/testaaaaa/sysaux01.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:02:05
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/oradata06/testaaaaa/system01.dbf
output file name=/oradata06/teststdby/testaaaaa/system01.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/oradata06/testaaaaa/users01.dbf
output file name=/oradata06/teststdby/testaaaaa/users01.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00010 name=/oradata06/testaaaaa/undotbs3.dbf
output file name=/oradata06/teststdby/testaaaaa/undotbs3.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/oradata06/testaaaaa/xdbts1.dbf
output file name=/oradata06/teststdby/testaaaaa/xdbts1.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting datafile copy
input datafile file number=00009 name=/oradata06/omf/TSTDB1/datafile/o1_mf_omftbs1_1kkDQZdsn_.dbf
output file name=/oradata06/teststdby/testaaaaa/o1_mf_omftbs1_1kkDQZdsn_.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
Finished backup at 20150903 17:59:17
sql statement: alter system archive log current
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=9 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=10 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=11 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=12 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/users01.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=13 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/xdbts1.dbf
datafile 9 switched to datafile copy
input datafile copy RECID=14 STAMP=889466360 file name=/oradata06/teststdby/testaaaaa/o1_mf_omftbs1_1kkDQZdsn_.dbf
datafile 10 switched to datafile copy
input datafile copy RECID=15 STAMP=889466360 file name=/oradata06/teststdby/testaaaaa/undotbs3.dbf
Finished Duplicate Db at 20150903 17:59:26
###prmy的相关视图(开启managed recovery前)
col destination format a15
col db_unique_name format a15
col type format a10
col STATUS format a8
col database_mode format a15
col recovery_mode format a15
col synchronization_status format a20
col gap_status format a8
set linesize 180
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 371 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID MOUNTED-STANDBY IDLE 1 371 368 CHECK CONFIGURATION NO GAP
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------------------------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- -----------
LOG_ARCHIVE_DEST_1 VALID PRIMARY ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 0
###stdby的相关视图(开启managed recovery前)
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1_stdby1 LOCAL VALID MOUNTED-STANDBY IDLE 1 371 0 STATUS NOT AVAILABLE
tstdb1 tstdb1_stdby1 UNKNOWN VALID UNKNOWN IDLE 0 0 0 STATUS NOT AVAILABLE
NONE UNKNOWN VALID UNKNOWN IDLE 1 371 368 STATUS NOT AVAILABLE
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE MOUNTED RECOVERY NEEDED
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------------------------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- -----------
LOG_ARCHIVE_DEST_1 VALID LOCAL ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID REMOTE LGWR PENDING tstdb1 LGWR YES ASYNCHRONOUS NO 0
select * from v$dataguard_stats;
NAME VALUE UNIT TIME_COMPUTED DATUM_TIME
------------------------------ -------------------- ------------------------------ ------------------------------ ------------------------------
transport lag day(2) to second(0) interval 09/03/2015 19:23:43
apply lag day(2) to second(0) interval 09/03/2015 19:23:43
apply finish time day(2) to second(3) interval 09/03/2015 19:23:43
estimated startup time 15 second 09/03/2015 19:23:43
###开启RTA
alter database open read only;
alter database recover managed standby database using current logfile disconnect;
###prmy的相关视图(开启managed recovery后)
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
------------------------------ --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 371 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 371 368 CHECK CONFIGURATION NO GAP
ME APPLY
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------------------------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_1 VALID PRIMARY ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 12723365752854
###stdby的相关视图(开启managed recovery后)
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
------------------------------ --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1_stdby1 LOCAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 371 0 STATUS NOT AVAILABLE
ME APPLY
tstdb1 tstdb1_stdby1 UNKNOWN VALID UNKNOWN IDLE 0 0 0 STATUS NOT AVAILABLE NO GAP
NONE UNKNOWN VALID UNKNOWN IDLE 1 371 371 STATUS NOT AVAILABLE
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
------------------------------ ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ ONLY WITH APPLY NOT ALLOWED <---"RECOVERY NEEDED"变为了"NOT ALLOWED"
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------------------------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- -----------
LOG_ARCHIVE_DEST_1 VALID LOCAL ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID REMOTE LGWR PENDING tstdb1 LGWR YES ASYNCHRONOUS NO 0
select * from v$dataguard_stats;
NAME VALUE UNIT TIME_COMPUTED DATUM_TIME
------------------------------ -------------------- ------------------------------ ------------------------------ ------------------------------
transport lag +00 00:00:00 day(2) to second(0) interval 09/03/2015 19:33:47 09/03/2015 19:33:46
apply lag +00 00:00:00 day(2) to second(0) interval 09/03/2015 19:33:47 09/03/2015 19:33:46
apply finish time day(2) to second(3) interval 09/03/2015 19:33:47
estimated startup time 15 second 09/03/2015 19:33:47
总结:
第一种"使用传统的RMAN 备份和恢复":使用已经存在的primary库的备份来构造出physical standby,过程中大部分的操作需要人工去完成,因过于繁琐,实际很少使用,但对于dataguard初学者来说不失为一种好的学习途径
第二种"使用基于backup的duplicate":其原理同第一种,即利用primary库的现有备份,但使用RMAN duplicate命令替代了RMAN restore & recover命令,使得构造physical standby的过程有所简化,由于不会去访问primary库,如果要避免duplicate对primary库的性能产生影响,这种方法是首选。
第三种"使用基于active database的duplicate":从正在运行的primary库即时生成一份备份传输至physical standby所在主机进行恢复,可以在primary库没有任何现成备份的情况下构造出physical standby,是三种方法里操作最为简便的一种,但耗时也较长,因为整个过程中包含了"备份primary->备份传输至physical stdby->恢复physical standby"三个步骤,要求网络传输低延时,且primary库负荷不能很高,否则整个过程会明显变慢。如果不介意primary库性能上可能产生的损耗,可以优先选择这种方法
1、使用传统的RMAN 备份和恢复
2、使用基于backup的duplicate
3、使用基于active database的duplicate
================= 1、使用RMAN backup & Restore建立备库 =================
###备份prmy数据库
SYS@tstdb1-SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 205
Next log sequence to archive 208
Current log sequence 208
rman target /
run
{
set MAXCORRUPT FOR DATAFILE 7 to 1;
backup database;
}
datafile的backup: piece handle=/oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_nnndf_TAG20150815T162129_1lUHfAiAK_.bkp tag=TAG20150815T162129 comment=NONE
control & spfile的backup: piece handle=/oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncsnf_TAG20150815T162129_1lUHgkeH5_.bkp tag=TAG20150815T162129 comment=NONE
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
SYS@tstdb1-SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 209
Next log sequence to archive 212
Current log sequence 212
###备份archivelog
backup archivelog sequence between 208 and 211;
piece handle=/oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp
###备份生成standby controlfile
backup current controlfile for standby; <---可以不加for standby,等待restore时自动转换
piece handle=/oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp
RMAN> list backup of controlfile;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -----------------
117249 Full 13.70M DISK 00:00:01 20150815 16:21:57
BP Key: 117253 Status: AVAILABLE Compressed: NO Tag: TAG20150815T162129
Piece Name: /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncsnf_TAG20150815T162129_1lUHgkeH5_.bkp <---随backup database生成的controlfile backup
Control File Included: Ckp SCN: 12793185486809 Ckp time: 20150815 16:21:56
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -----------------
117331 Full 13.67M DISK 00:00:01 20150815 16:26:31
BP Key: 117336 Status: AVAILABLE Compressed: NO Tag: TAG20150815T162628
Piece Name: /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp <---backup ... for standby生成的controlfile backup
Standby Control File Included: Ckp SCN: 12793185487102 Ckp time: 20150815 16:26:30
说明:上面两个controlfile backup中的任何一个都可以用来恢复standby controlfile
###将上面这些backuppiece复制到stdby主机的目录下
scp /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_nnndf_TAG20150815T162129_1lUHfAiAK_.bkp oracle@10.10.149.110:/oradata06/teststdby/bkup/
scp /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncsnf_TAG20150815T162129_1lUHgkeH5_.bkp oracle@10.10.149.110:/oradata06/teststdby/bkup/
scp /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp oracle@10.10.149.110:/oradata06/teststdby/bkup/
scp /oradata06/fra/TSTDB1/backupset/2015_08_15/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp oracle@10.10.149.110:/oradata06/teststdby/bkup/
###prmy上配置listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = tstdb1)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1)
)
)
###stdby上配置listener.ora
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_L1522=
(SID_LIST =
(SID_DESC = ##新加行
(GLOBAL_DBNAME = tstdb1_stdby1) ##新加行
(ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1_stdby1) ##新加行
) ##新加行
)
###prmy、stdby上的tnsnames.ora文件里都要加上自己和对方的network alias name
tstdb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
)
(CONNECT_DATA =
(Service_name = tstdb1)
(SERVER = DEDICATED)
)
)
tstdb1_stdby1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
)
(CONNECT_DATA =
(Service_name = tstdb1_stdby1)
(SERVER = DEDICATED)
)
)
###stdby上的tnsnames.ora文件里还要非缺省的listener L1522的network alias name
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
###stdby主机上初始化参数配置
db_name=tstdb1
db_unique_name=tstdb1_stdby1
control_files='/oradata06/teststdby/testaaaaa/control01.ctl','/oradata06/teststdby/testaaaaa/control02.ctl'
db_file_name_convert='/oradata06/testaaaaa','/oradata06/teststdby/testaaaaa'
log_file_name_convert='/oradata06/testaaaaa','/oradata06/teststdby/testaaaaa'
db_recovery_file_dest='/oradata06/teststdby/fra'
db_recovery_file_dest_size=200G
db_lost_write_protect=typical
undo_tablespace=undotbs3
service_names=tstdb1_stdby1
LOG_ARCHIVE_CONFIG='DG_CONFIG=(tstdb1,tstdb1_stdby1)'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1_stdby1'
log_archive_dest_2='service=tstdb1 ASYNC valid_for=(online_logfiles,primary_roles) db_unique_name=tstdb1'
fal_server=tstdb1
standby_file_management=AUTO
memory_target=6G
local_listener='L1522'
###prmy主机上初始化参数配置
control_files='/oradata06/testaaaaa/control01.ctl','/oradata06/testaaaaa/control02.ctl'#Restore Controlfile
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_recovery_file_dest='/oradata06/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=6G
recyclebin='ON'
service_names='TSTDB1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(tstdb1,tstdb1_stdby1)'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1'
log_archive_dest_2='service=tstdb1_stdby1 ASYNC valid_for=(online_logfiles,primary_roles) db_unique_name=tstdb1_stdby1'
standby_file_management=AUTO
db_file_name_convert='/oradata06/teststdby/testaaaaa','/oradata06/testaaaaa'
log_file_name_convert='/oradata06/teststdby/testaaaaa','/oradata06/testaaaaa'
###prmy主机上的密码文件复制到stdby主机
scp orapwtstdb1 oracle@10.10.149.110:/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1_stdby1
###在prmy库上开启force logging
alter database force logging;
###prmy库上建好standby redolog,为之后的role transition作准备;只要一个member即可,多个会影响性能
alter database add standby logfile group 11 ('/oradata06/testaaaaa/stdredo01a.log') size 128m reuse;
alter database add standby logfile group 12 ('/oradata06/testaaaaa/stdredo02a.log') size 128m reuse;
alter database add standby logfile group 13 ('/oradata06/testaaaaa/stdredo03a.log') size 128m reuse;
alter database add standby logfile group 14 ('/oradata06/testaaaaa/stdredo04a.log') size 128m reuse;
alter database add standby logfile group 15 ('/oradata06/testaaaaa/stdredo05a.log') size 128m reuse;
###stdby实例启动、restore standby controlfile、启动到mount
export ORACLE_SID=tstdb1_stdby1
sqlplus '/as sysdba'
startup nomount
create spfile from pfile;
startup force nomount;
rman target /
restore standby controlfile from '/oradata06/teststdby/bkup/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp'; <---注:这里必须加Standby否则后面mount standby database时会报ORA-01665: control file is not a standby control file
Starting restore at 20150815 17:40:17
using channel ORA_DISK_1
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oradata06/teststdby/testaaaaa/control01.ctl
output file name=/oradata06/teststdby/testaaaaa/control02.ctl
Finished restore at 20150815 17:40:19
alter database mount standby database;
RMAN> report schema;
using target database control file instead of recovery catalog
RMAN-06139: WARNING: control file is not current for REPORT SCHEMA
Report of database schema for database with db_unique_name TSTDB1_STDBY1
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 0 SYSTEM *** /oradata06/teststdby/testaaaaa/system01.dbf <----控制文件里保存的文件路径已经是经过db_file_name_convert转换后的路径
2 0 SYSAUX *** /oradata06/teststdby/testaaaaa/sysaux01.dbf
3 0 UNDOTBS *** /oradata06/teststdby/testaaaaa/undotbs01.dbf
4 0 USERS *** /oradata06/teststdby/testaaaaa/users01.dbf
5 0 TS0422_1 *** /oradata06/teststdby/testaaaaa/ts0422_1.dbf
6 0 XDBTS *** /oradata06/teststdby/testaaaaa/xdbts1.dbf
7 0 TS0811 *** /oradata06/teststdby/testaaaaa/ts0811_1.dbf
9 0 OMFTBS1 *** /oradata06/omf/TSTDB1/datafile/o1_mf_omftbs1_1kkDQZdsn_.dbf
10 0 UNDOTBS3 *** /oradata06/teststdby/testaaaaa/undotbs3.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 1024 TEMP 1024 /oradata06/teststdby/testaaaaa/temp01.dbf
SQL> select name,dbid,open_mode,CONTROLFILE_TYPE from v$database;
NAME DBID OPEN_MODE CONTROL
--------- ---------- -------------------- -------
TSTDB1 2051793563 MOUNTED STANDBY <---确保controlfile type一定是standby
###stdby主机上catalog backuppiece to standby controlfile
catalog backuppiece '/oradata06/teststdby/bkup/o1_mf_nnndf_TAG20150815T162129_1lUHfAiAK_.bkp';
catalog backuppiece '/oradata06/teststdby/bkup/o1_mf_ncsnf_TAG20150815T162129_1lUHgkeH5_.bkp';
catalog backuppiece '/oradata06/teststdby/bkup/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp';
catalog backuppiece '/oradata06/teststdby/bkup/o1_mf_ncnnf_TAG20150815T162628_1lUHx2h3U_.bkp';
###restore database
run
{
set newname for datafile '/oradata06/omf/TSTDB1/datafile/o1_mf_omftbs1_1kkDQZdsn_.dbf' to '/oradata06/teststdby/testaaaaa/omftbs1_1.dbf';
restore database;
}
switch datafile 9 to copy;
RMAN> report schema;
RMAN-06139: WARNING: control file is not current for REPORT SCHEMA
Report of database schema for database with db_unique_name TSTDB1_STDBY1
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 1024 SYSTEM *** /oradata06/teststdby/testaaaaa/system01.dbf
2 1300 SYSAUX *** /oradata06/teststdby/testaaaaa/sysaux01.dbf
3 2048 UNDOTBS *** /oradata06/teststdby/testaaaaa/undotbs01.dbf
4 1024 USERS *** /oradata06/teststdby/testaaaaa/users01.dbf
5 1800 TS0422_1 *** /oradata06/teststdby/testaaaaa/ts0422_1.dbf
6 500 XDBTS *** /oradata06/teststdby/testaaaaa/xdbts1.dbf
7 128 TS0811 *** /oradata06/teststdby/testaaaaa/ts0811_1.dbf
9 128 OMFTBS1 *** /oradata06/teststdby/testaaaaa/omftbs1_1.dbf
10 512 UNDOTBS3 *** /oradata06/teststdby/testaaaaa/undotbs3.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 1024 TEMP 1024 /oradata06/teststdby/testaaaaa/temp01.dbf
###recover database
recover database until sequence 212;
Starting recover at 20150815 20:37:30
using channel ORA_DISK_1
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=208
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=209
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=210
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=211
channel ORA_DISK_1: reading from backup piece /oradata06/teststdby/bkup/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp
channel ORA_DISK_1: piece handle=/oradata06/teststdby/bkup/o1_mf_annnn_TAG20150815T162444_1lUHqmfTk_.bkp tag=TAG20150815T162444
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_208_1lUVymrjP_.arc thread=1 sequence=208
channel default: deleting archived log(s)
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_208_1lUVymrjP_.arc RECID=1 STAMP=887834252
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_209_1lUVynCiH_.arc thread=1 sequence=209
channel default: deleting archived log(s)
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_209_1lUVynCiH_.arc RECID=3 STAMP=887834252
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_210_1lUVynK1A_.arc thread=1 sequence=210
channel default: deleting archived log(s)
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_210_1lUVynK1A_.arc RECID=4 STAMP=887834252
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_211_1lUVymv9s_.arc thread=1 sequence=211
channel default: deleting archived log(s)
archived log file name=/oradata06/teststdby/fra/TSTDB1_STDBY1/archivelog/2015_08_15/o1_mf_1_211_1lUVymv9s_.arc RECID=2 STAMP=887834252
Oracle Error:
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: '/oradata06/teststdby/testaaaaa/system01.dbf'
media recovery complete, elapsed time: 00:00:01
Finished recover at 20150815 20:37:34
###若要使用maximum protection或者maximum availability必须在stdby主机上建立standby redo,比online redolog的每个thread多一组;maximum performance也推荐加上,好处是能有效减少data loss,减少LNS进程对于RFS进程的等待
alter database add standby logfile group 11 ('/oradata06/teststdby/testaaaaa/stdredo01a.log') size 128m reuse;
alter database add standby logfile group 12 ('/oradata06/teststdby/testaaaaa/stdredo02a.log') size 128m reuse;
alter database add standby logfile group 13 ('/oradata06/teststdby/testaaaaa/stdredo03a.log') size 128m reuse;
alter database add standby logfile group 14 ('/oradata06/teststdby/testaaaaa/stdredo04a.log') size 128m reuse;
alter database add standby logfile group 15 ('/oradata06/teststdby/testaaaaa/stdredo05a.log') size 128m reuse;
###stdby侧开启redo apply
alter database recover managed standby database disconnect from session;
###max performance mode下相关视图的查询结果
set linesize 150
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
col dest_name format a20
col destination format a15
set numwidth 16 linesize 150
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name='LOG_ARCHIVE_DEST_2';
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- --------- ------- ---------- -------- --------------- ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 12793186257921
col dest_name format a20
col destination format a14
col DB_UNIQUE_NAME format a12
col SYNCHRONIZATION_STATUS format a12
col TYPE format a8
col gap_status format a8
set linesize 180
col standby_logfile_count format a5
col ARCHIVED_SEQ# format a5
select dest_name,status,type,database_mode,recovery_mode,protection_mode,destination,to_char(standby_logfile_count) "standby_logfile_count",to_char(archived_seq#) "archived_seq#",applied_seq#,srl,SYNCHRONIZATION_STATUS,SYNCHRONIZED,gap_status from v$archive_dest_status where dest_name='LOG_ARCHIVE_DEST_2';
DEST_NAME STATUS TYPE DATABASE_MODE RECOVERY_MODE PROTECTION_MODE DESTINATION stand archi APPLIED_SEQ# SRL SYNCHRONIZAT SYN GAP_STAT
-------------------- --------- -------- --------------- ----------------------- -------------------- -------------- ----- ----- ------------ --- ------------ --- --------
LOG_ARCHIVE_DEST_2 VALID PHYSICAL MOUNTED-STANDBY MANAGED MAXIMUM PERFORMANCE tstdb1_stdby1 5 297 296 YES CHECK CONFIG NO NO GAP
URATION
================= 2、Backup-based RMAN duplicate建立备库 =================
###生成prmy库的备份
backup database include current controlfile format '/oradata06/dupuse/0901/dc_%U';
piece handle=/oradata06/dupuse/0901/dc_2dqg3e87_1_1 tag=TAG20150901T211550 comment=NONE
piece handle=/oradata06/dupuse/0901/dc_2eqg3e9a_1_1 tag=TAG20150901T211550 comment=NONE
archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 347
Next log sequence to archive 349
Current log sequence 349
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 350
Next log sequence to archive 352
Current log sequence 352
backup archivelog sequence between 349 and 351 format '/oradata06/dupuse/0901/arch_%U';
piece handle=/oradata06/dupuse/0901/arch_2fqg3ed1_1_1 tag=TAG20150901T211824 comment=NONE
###复制备份到stdby库
scp /oradata06/dupuse/0901/* oracle@10.10.149.110:/oradata06/dupuse/0901/
###在prmy库上开启force logging
alter database force logging;
###prmy主机上的密码文件复制到stdby主机
scp $ORACLE_HOME/dbs/orapwtstdb1 oracle@10.10.149.110:/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1_stdby1
###prmy、stdby库tnsnames.ora
tstdb1_stdby1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
)
(CONNECT_DATA =
(Service_name = tstdb1_stdby1)
(SERVER = DEDICATED)
)
)
tstdb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
)
(CONNECT_DATA =
(Service_name = tstdb1)
(SERVER = DEDICATED)
)
)
###stdby库的tnsnames.ora需额外加上L1522的network alias name
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
###prmy库的listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = tstdb1)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1)
)
)
###stdby库的listener.ora
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_L1522=
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = tstdb1_stdby)
(ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1_stdby1)
)
)
###prmy库初始化参数规划
control_files='/oradata06/testaaaaa/control01.ctl','/oradata06/testaaaaa/control02.ctl'#Restore Controlfile
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_recovery_file_dest='/oradata06/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=6G
recyclebin='ON'
service_names='TSTDB1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1'
log_archive_dest_2='service=tstdb1_stdby1 valid_for=(online_logfiles,primary_role) db_unique_name=tstdb1_stdby1'
log_archive_config='db_config=(tstdb1,tstdb1_stdby1)'
fal_server=tstdb1_stdby1
standby_file_management=auto
db_file_name_convert='/oradata06/teststdby/testaaaaa/','/oradata06/testaaaaa/'
db_log_name_convert='/oradata06/teststdby/testaaaaa/','/oradata06/testaaaaa/'
###stdby库初始化参数规划
control_files='/oradata06/teststdby/testaaaaa/control01.ctl','/oradata06/teststdby/testaaaaa/control02.ctl'
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_unique_name='tstdb1_stdby1'
db_recovery_file_dest='/oradata06/teststdby/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=4G
recyclebin='ON'
service_names='tstdb1_stdby1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
local_listener='L1522'
db_file_name_convert='/oradata06/testaaaaa/','/oradata06/teststdby/testaaaaa/'
db_log_name_convert='/oradata06/testaaaaa/','/oradata06/teststdby/testaaaaa/'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1_stdby1'
log_archive_dest_2='service=tstdb1 valid_for=(online_logfiles,primary_role) db_unique_name=tstdb1'
log_archive_config='dg_config=(tstdb1,tstdb1_stdby1)'
fal_server=tstdb1
standby_file_management=auto
###启动stdby/auxiliary instance
lsnrctl start L1522
export ORACLE_SID=tstdb1_stdby1
startup nomount pfile=$ORACLE_HOME/dbs/inittstdb1_stdby1.ora
create spfile from pfile;
startup force nomount;
rman target sys/773946@tstdb1 catalog rman/773946@tstdb2 auxiliary sys/773946@tstdb1_stdby1
run
{
set newname for datafile '/oradata06/omf/TSTDB1/datafile/o1_mf_omftbs1_1kkDQZdsn_.dbf' to '/oradata06/teststdby/testaaaaa/omftbs1.dbf';
duplicate database tstdb1 for standby; <---后面也可以加上dorecover用途是将stdby恢复到最新的archivelog
}
executing command: SET NEWNAME
Starting Duplicate Db at 20150902 13:21:56
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=530 device type=DISK
contents of Memory Script:
{
restore clone standby controlfile;
}
executing Memory Script
Starting restore at 20150902 13:21:56
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: reading from backup piece /oradata06/dupuse/0901/dc_2eqg3e9a_1_1
channel ORA_AUX_DISK_1: piece handle=/oradata06/dupuse/0901/dc_2eqg3e9a_1_1 tag=TAG20150901T211550
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oradata06/teststdby/testaaaaa/control01.ctl
output file name=/oradata06/teststdby/testaaaaa/control02.ctl
Finished restore at 20150902 13:21:57
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
。。。。省略部分输出
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
STANDBY
###prmy库上建立standby redolog
alter database add standby logfile group 11 ('/oradata06/testaaaaa/stdredo11a.log') size 128m;
alter database add standby logfile group 12 ('/oradata06/testaaaaa/stdredo12a.log') size 128m;
alter database add standby logfile group 13 ('/oradata06/testaaaaa/stdredo13a.log') size 128m;
alter database add standby logfile group 14 ('/oradata06/testaaaaa/stdredo14a.log') size 128m;
###stdby库上建立standby redolog
alter database add standby logfile group 11 ('/oradata06/teststdby/testaaaaa/stdredo11a.log') size 128m;
alter database add standby logfile group 12 ('/oradata06/teststdby/testaaaaa/stdredo12a.log') size 128m;
alter database add standby logfile group 13 ('/oradata06/teststdby/testaaaaa/stdredo13a.log') size 128m;
alter database add standby logfile group 14 ('/oradata06/teststdby/testaaaaa/stdredo14a.log') size 128m;
###备库启动至read only模式
alter database open read only;
***recover managed standby 开启前prmy库视图内容
col destination format a15
col db_unique_name format a15
col type format a10
col STATUS format a8
col database_mode format a15
col recovery_mode format a15
col synchronization_status format a20
col gap_status format a8
set linesize 180
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 354 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID MOUNTED-STANDBY IDLE 1 352 348 CHECK CONFIGURATION NO GAP
SYS@tstdb1-SQL> select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
col dest_name format a20
col destination format a15
set numwidth 16 linesize 150
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name='LOG_ARCHIVE_DEST_2';
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- --------- ------- ---------- -------- --------------- ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 12793186514587
***recover managed standby 开启前stdby库视图内容
SELECT dest_name,DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq# FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DEST_NAME DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ#
---------------------- --------------- --------------- ---------- -------- --------------- --------------- ---------------- ---------------- ----------------
LOG_ARCHIVE_DEST_1 tstdb1_stdby1 LOCAL VALID MOUNTED-STANDBY IDLE 0 0 0
LOG_ARCHIVE_DEST_2 tstdb1 tstdb1 UNKNOWN VALID UNKNOWN IDLE 0 0 0
STANDBY_ARCHIVE_DEST NONE UNKNOWN VALID UNKNOWN IDLE 1 352 348
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE MOUNTED RECOVERY NEEDED
col destination format a30
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_1 VALID LOCAL ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID REMOTE LGWR PENDING tstdb1 LGWR YES ASYNCHRONOUS NO 0
SELECT * FROM V$DATAGUARD_STATS;
alter database recover managed standby database using current logfile disconnect;
***recover managed standby开启后prmy相关视图的内容变化
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ---------------- ---------------- -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 354 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 352 348 CHECK CONFIGURATION NO GAP
ME APPLY
v$archive_dest_status里的archived_seq#,applied_sql#,下一次switch logfile后才会刷新,但这里有个疑问题那就是开启了RTA后applied_seq#应该至少与archived_log#相等才对,实际看到的确是小一号;另外经测试如果工作在SYNC方式下applied_seq#还是小于实际已经applied的seq#
alter system switch logfile;
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ---------------- ---------------- -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 355 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 355 354 CHECK CONFIGURATION NO GAP
ME APPLY
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
v$archive_dest.applied_scn也没有及时更新
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_1 VALID PRIMARY ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 12793186514587
***recover managed standby开启后stdby相关视图的内容变化,注意到stdby上名为STANDBY_ARCHIVE_DEST的applied_seq#值与archived_thread#相同,均更新为了355
SQL> select dest_name,DESTINATION,db_unique_name,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DEST_NAME DESTINATION DB_UNIQUE_NAME DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# GAP_STAT
-------------------- --------------- --------------- --------------- ------------------------- ---------------- ---------------- ---------------- --------
LOG_ARCHIVE_DEST_1 tstdb1_stdby1 OPEN_READ-ONLY MANAGED REAL TIME APPLY 0 0 0
LOG_ARCHIVE_DEST_2 tstdb1 tstdb1 UNKNOWN IDLE 0 0 0 NO GAP
STANDBY_ARCHIVE_DEST NONE UNKNOWN IDLE 1 355 355
SQL> select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ ONLY WITH APPLY NOT ALLOWED
SQL> select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_1 VALID LOCAL ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID REMOTE LGWR PENDING tstdb1 LGWR YES ASYNCHRONOUS NO 0
***v$dataguard_stats仅能在stdby上才能查出内容,能够准确反映传输和应用上的延迟
SQL> col value format a20
SQL> set linesize 150
SQL> select * from v$dataguard_stats;
NAME VALUE UNIT TIME_COMPUTED DATUM_TIME
-------------------------------- -------------------- ------------------------------ ------------------------------ ------------------------------
transport lag +00 00:00:00 day(2) to second(0) interval 09/02/2015 15:42:23 09/02/2015 15:42:22
apply lag +00 00:00:00 day(2) to second(0) interval 09/02/2015 15:42:23 09/02/2015 15:42:22
apply finish time +00 00:00:00.000 day(2) to second(3) interval 09/02/2015 15:42:23
estimated startup time 11 second 09/02/2015 15:42:23
================= 3、RMAN duplicate ... from active database建立备库 =================
###prmy库启动force logging
alter database enable force logging;
###prmy库初始化参数设定
control_files='/oradata06/testaaaaa/control01.ctl','/oradata06/testaaaaa/control02.ctl'#Restore Controlfile
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_recovery_file_dest='/oradata06/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=6G
recyclebin='ON'
service_names='TSTDB1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1'
log_archive_dest_2='service=tstdb1_stdby1 ASYNC valid_for=(online_logfiles,primary_roles) db_unique_name=tstdb1_stdby1'
standby_file_management=AUTO
log_archive_config='dg_config=(tstdb1,tstdb1_stdby1)'
fal_server=tstdb1_stdby1
db_file_name_convert='/oradata06/teststdby/testaaaaa/','/oradata06/testaaaaa/'
db_log_name_convert='/oradata06/teststdby/testaaaaa/','/oradata06/testaaaaa/'
###stdby库初始化参数设定
control_files='/oradata06/teststdby/testaaaaa/control01.ctl','/oradata06/teststdby/testaaaaa/control02.ctl'
db_block_checksum='TYPICAL'
db_files=200
db_flashback_retention_target=2000
db_lost_write_protect='TYPICAL'
db_name='tstdb1'
db_unique_name='tstdb1_stdby1'
db_recovery_file_dest='/oradata06/teststdby/fra'
db_recovery_file_dest_size=214748364800
db_securefile='PERMITTED'
diagnostic_dest='/oracle/app/oracle/'
fast_start_mttr_target=60
job_queue_processes=1000
memory_target=4G
recyclebin='ON'
service_names='tstdb1_stdby1'
shared_servers=1
undo_retention=600
undo_tablespace='undotbs3'
local_listener='L1522'
log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=tstdb1_stdby1'
log_archive_dest_2='service=tstdb1 ASYNC valid_for=(online_logfiles,primary_roles) db_unique_name=tstdb1'
standby_file_management=AUTO
log_archive_config='dg_config=(tstdb1,tstdb1_stdby1)'
fal_server=tstdb1
db_file_name_convert='/oradata06/testaaaaa/','/oradata06/teststdby/testaaaaa/','/oradata06/omf/TSTDB1/datafile/','/oradata06/teststdby/testaaaaa/'
log_file_name_convert='/oradata06/testaaaaa/','/oradata06/teststdby/testaaaaa/'
###prmy库上建立好standby redolog
alter database add standby logfile group 11 ('/oradata06/testaaaaa/stdredo11.log') size 128m;
alter database add standby logfile group 12 ('/oradata06/testaaaaa/stdredo12.log') size 128m;
alter database add standby logfile group 13 ('/oradata06/testaaaaa/stdredo13.log') size 128m;
alter database add standby logfile group 14 ('/oradata06/testaaaaa/stdredo14.log') size 128m;
###密码文件从prmy复制到stdby
scp $ORACLE_HOME/dbs/orapwtstdb1 oracle@10.10.149.110:/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1_stdby1
###prmy上的listener.ora文件
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = tstdb1)
(ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1)
)
)
###stdby上的listener.ora文件
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_L1522=
(SID_LIST =
(SID_DESC = ##新加行
(GLOBAL_DBNAME = tstdb1_stdby1) ##新加行
(ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db_1)
(SID_NAME = tstdb1_stdby1) ##新加行
) ##新加行
)
###prmy、stdby上的tnsnames.ora文件
tstdb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.141.209)(PORT = 1521))
)
(CONNECT_DATA =
(Service_name = tstdb1)
(SERVER = DEDICATED)
)
)
tstdb1_stdby1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
)
(CONNECT_DATA =
(Service_name = tstdb1_stdby1)
(SERVER = DEDICATED)
)
)
###stdby上的tnsnames.ora文件还要额外包含list ener L1522的解析
L1522 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.149.110)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
###重启prmy数据库
shutdown abort
sqlplus '/as sysdba'
create spfile from pfile;
startup
###启动stdby数据库至nomount
export ORACLE_SID=tstdb1_stdby1
sqlplus '/as sysdba'
create spfile from pfile;
startup nomount
###测试到stdby instance,prmy instance的连接是否通畅
sqlplus "sys/773946@tstdb1 as sysdba"
sqlplus "sys/773946@tstdb1_stdby1 as sysdba"
###rman duplicate ... from active database
rman target sys/773946@tstdb1 catalog rman/773946@tstdb2 auxiliary sys/773946@tstdb1_stdby1
RMAN> duplicate database tstdb1 for standby from active database;
Starting Duplicate Db at 20150903 17:48:38
starting full resync of recovery catalog
full resync complete
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=398 device type=DISK
contents of Memory Script:
{
backup as copy reuse
targetfile '/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1' auxiliary format
'/oracle/app/oracle/product/11.2.0/db_1/dbs/orapwtstdb1_stdby1' ;
}
executing Memory Script
Starting backup at 20150903 17:48:42
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=69 device type=DISK
Finished backup at 20150903 17:48:45
contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/oradata06/teststdby/testaaaaa/control01.ctl';
restore clone controlfile to '/oradata06/teststdby/testaaaaa/control02.ctl' from
'/oradata06/teststdby/testaaaaa/control01.ctl';
}
executing Memory Script
Starting backup at 20150903 17:48:45
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/oracle/app/oracle/product/11.2.0/db_1/dbs/snapcf_tstdb1.f tag=TAG20150903T174150 RECID=9 STAMP=889465312
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 20150903 17:48:50
Starting restore at 20150903 17:48:50
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 20150903 17:48:51
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
set newname for tempfile 1 to
"/oradata06/teststdby/testaaaaa/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/oradata06/teststdby/testaaaaa/system01.dbf";
set newname for datafile 2 to
"/oradata06/teststdby/testaaaaa/sysaux01.dbf";
set newname for datafile 3 to
"/oradata06/teststdby/testaaaaa/undotbs01.dbf";
set newname for datafile 4 to
"/oradata06/teststdby/testaaaaa/users01.dbf";
set newname for datafile 6 to
"/oradata06/teststdby/testaaaaa/xdbts1.dbf";
set newname for datafile 9 to
"/oradata06/teststdby/testaaaaa/o1_mf_omftbs1_1kkDQZdsn_.dbf";
set newname for datafile 10 to
"/oradata06/teststdby/testaaaaa/undotbs3.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/oradata06/teststdby/testaaaaa/system01.dbf" datafile
2 auxiliary format
"/oradata06/teststdby/testaaaaa/sysaux01.dbf" datafile
3 auxiliary format
"/oradata06/teststdby/testaaaaa/undotbs01.dbf" datafile
4 auxiliary format
"/oradata06/teststdby/testaaaaa/users01.dbf" datafile
6 auxiliary format
"/oradata06/teststdby/testaaaaa/xdbts1.dbf" datafile
9 auxiliary format
"/oradata06/teststdby/testaaaaa/o1_mf_omftbs1_1kkDQZdsn_.dbf" datafile
10 auxiliary format
"/oradata06/teststdby/testaaaaa/undotbs3.dbf" ;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /oradata06/teststdby/testaaaaa/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 20150903 17:48:59
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/oradata06/testaaaaa/undotbs01.dbf
output file name=/oradata06/teststdby/testaaaaa/undotbs01.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:03:05
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/oradata06/testaaaaa/sysaux01.dbf
output file name=/oradata06/teststdby/testaaaaa/sysaux01.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:02:05
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/oradata06/testaaaaa/system01.dbf
output file name=/oradata06/teststdby/testaaaaa/system01.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/oradata06/testaaaaa/users01.dbf
output file name=/oradata06/teststdby/testaaaaa/users01.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00010 name=/oradata06/testaaaaa/undotbs3.dbf
output file name=/oradata06/teststdby/testaaaaa/undotbs3.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/oradata06/testaaaaa/xdbts1.dbf
output file name=/oradata06/teststdby/testaaaaa/xdbts1.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting datafile copy
input datafile file number=00009 name=/oradata06/omf/TSTDB1/datafile/o1_mf_omftbs1_1kkDQZdsn_.dbf
output file name=/oradata06/teststdby/testaaaaa/o1_mf_omftbs1_1kkDQZdsn_.dbf tag=TAG20150903T174203
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
Finished backup at 20150903 17:59:17
sql statement: alter system archive log current
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=9 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=10 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=11 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=12 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/users01.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=13 STAMP=889466359 file name=/oradata06/teststdby/testaaaaa/xdbts1.dbf
datafile 9 switched to datafile copy
input datafile copy RECID=14 STAMP=889466360 file name=/oradata06/teststdby/testaaaaa/o1_mf_omftbs1_1kkDQZdsn_.dbf
datafile 10 switched to datafile copy
input datafile copy RECID=15 STAMP=889466360 file name=/oradata06/teststdby/testaaaaa/undotbs3.dbf
Finished Duplicate Db at 20150903 17:59:26
###prmy的相关视图(开启managed recovery前)
col destination format a15
col db_unique_name format a15
col type format a10
col STATUS format a8
col database_mode format a15
col recovery_mode format a15
col synchronization_status format a20
col gap_status format a8
set linesize 180
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 371 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID MOUNTED-STANDBY IDLE 1 371 368 CHECK CONFIGURATION NO GAP
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------------------------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- -----------
LOG_ARCHIVE_DEST_1 VALID PRIMARY ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 0
###stdby的相关视图(开启managed recovery前)
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
--------------- --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1_stdby1 LOCAL VALID MOUNTED-STANDBY IDLE 1 371 0 STATUS NOT AVAILABLE
tstdb1 tstdb1_stdby1 UNKNOWN VALID UNKNOWN IDLE 0 0 0 STATUS NOT AVAILABLE
NONE UNKNOWN VALID UNKNOWN IDLE 1 371 368 STATUS NOT AVAILABLE
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE MOUNTED RECOVERY NEEDED
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------------------------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- -----------
LOG_ARCHIVE_DEST_1 VALID LOCAL ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID REMOTE LGWR PENDING tstdb1 LGWR YES ASYNCHRONOUS NO 0
select * from v$dataguard_stats;
NAME VALUE UNIT TIME_COMPUTED DATUM_TIME
------------------------------ -------------------- ------------------------------ ------------------------------ ------------------------------
transport lag day(2) to second(0) interval 09/03/2015 19:23:43
apply lag day(2) to second(0) interval 09/03/2015 19:23:43
apply finish time day(2) to second(3) interval 09/03/2015 19:23:43
estimated startup time 15 second 09/03/2015 19:23:43
###开启RTA
alter database open read only;
alter database recover managed standby database using current logfile disconnect;
###prmy的相关视图(开启managed recovery后)
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
------------------------------ --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1 LOCAL VALID OPEN IDLE 1 371 0 CHECK CONFIGURATION
tstdb1_stdby1 tstdb1_stdby1 PHYSICAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 371 368 CHECK CONFIGURATION NO GAP
ME APPLY
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
--------- ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE TO STANDBY
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------------------------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- ----------------
LOG_ARCHIVE_DEST_1 VALID PRIMARY ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID STANDBY LGWR ACTIVE tstdb1_stdby1 LGWR YES ASYNCHRONOUS NO 12723365752854
###stdby的相关视图(开启managed recovery后)
SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION DB_UNIQUE_NAME TYPE STATUS DATABASE_MODE RECOVERY_MODE ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZATION_STAT GAP_STAT
------------------------------ --------------- ---------- -------- --------------- --------------- ---------------- ------------- ------------ -------------------- --------
tstdb1_stdby1 LOCAL VALID OPEN_READ-ONLY MANAGED REAL TI 1 371 0 STATUS NOT AVAILABLE
ME APPLY
tstdb1 tstdb1_stdby1 UNKNOWN VALID UNKNOWN IDLE 0 0 0 STATUS NOT AVAILABLE NO GAP
NONE UNKNOWN VALID UNKNOWN IDLE 1 371 371 STATUS NOT AVAILABLE
select name,database_role,protection_mode,protection_level,open_mode,SWITCHOVER_STATUS from v$database;
NAME DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE SWITCHOVER_STATUS
------------------------------ ---------------- -------------------- -------------------- -------------------- --------------------
TSTDB1 PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ ONLY WITH APPLY NOT ALLOWED <---"RECOVERY NEEDED"变为了"NOT ALLOWED"
select dest_name,status,target,archiver,schedule,destination,process,register,transmit_mode,affirm,applied_scn from v$archive_dest where dest_name in ('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2');
DEST_NAME STATUS TARGET ARCHIVER SCHEDULE DESTINATION PROCESS REG TRANSMIT_MOD AFF APPLIED_SCN
-------------------------------------------------- -------- ------- ---------- -------- ------------------------------ ---------- --- ------------ --- -----------
LOG_ARCHIVE_DEST_1 VALID LOCAL ARCH ACTIVE USE_DB_RECOVERY_FILE_DEST ARCH YES SYNCHRONOUS NO 0
LOG_ARCHIVE_DEST_2 VALID REMOTE LGWR PENDING tstdb1 LGWR YES ASYNCHRONOUS NO 0
select * from v$dataguard_stats;
NAME VALUE UNIT TIME_COMPUTED DATUM_TIME
------------------------------ -------------------- ------------------------------ ------------------------------ ------------------------------
transport lag +00 00:00:00 day(2) to second(0) interval 09/03/2015 19:33:47 09/03/2015 19:33:46
apply lag +00 00:00:00 day(2) to second(0) interval 09/03/2015 19:33:47 09/03/2015 19:33:46
apply finish time day(2) to second(3) interval 09/03/2015 19:33:47
estimated startup time 15 second 09/03/2015 19:33:47
总结:
第一种"使用传统的RMAN 备份和恢复":使用已经存在的primary库的备份来构造出physical standby,过程中大部分的操作需要人工去完成,因过于繁琐,实际很少使用,但对于dataguard初学者来说不失为一种好的学习途径
第二种"使用基于backup的duplicate":其原理同第一种,即利用primary库的现有备份,但使用RMAN duplicate命令替代了RMAN restore & recover命令,使得构造physical standby的过程有所简化,由于不会去访问primary库,如果要避免duplicate对primary库的性能产生影响,这种方法是首选。
第三种"使用基于active database的duplicate":从正在运行的primary库即时生成一份备份传输至physical standby所在主机进行恢复,可以在primary库没有任何现成备份的情况下构造出physical standby,是三种方法里操作最为简便的一种,但耗时也较长,因为整个过程中包含了"备份primary->备份传输至physical stdby->恢复physical standby"三个步骤,要求网络传输低延时,且primary库负荷不能很高,否则整个过程会明显变慢。如果不介意primary库性能上可能产生的损耗,可以优先选择这种方法
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/53956/viewspace-1793977/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/53956/viewspace-1793977/