创建physical standby的三种方法

搭建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库性能上可能产生的损耗,可以优先选择这种方法


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/53956/viewspace-1793977/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/53956/viewspace-1793977/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值