一、初始化环境二、主库操作 2.1 修改forcelogging、开闪回 2.2 添加standby log 2.3 修改参数 2.4 修改监听 2.5 修改tnsnames.ora三、主库密码文件拷贝到备库四、备库操作 4.1 修改监听 4.2 备库修改到NOMOUNT状态 4.3 duplicate复制搭建DG 4.4 实时应用五、配置dgmgrl 5.1 基础配置 5.2 配置FSFO 5.3 重建DG
一、初始化环境
DG环境规划
项目 | 主库 | 物理备库 |
---|---|---|
db 类型 | 单实例 | 单实例 |
db version | 11.2.0.4.0 | 11.2.0.4.0 |
db 存储 | FS | FS |
OS版本 | RHEL7.6 64位 | CentOS7.6 64位 |
OS hostname | LHR11G | LHR11GDG |
IP地址 | 192.168.68.68 | 192.168.68.69 |
ORACLE_SID | LHR11G | LHR11GDG |
db_name/GLOBAL_DBNAME | LHR11G | LHR11G |
db_unique_name | LHR11G | LHR11GDG |
TNS_NAME | LHR11G | LHR11GDG |
监听端口 | 1521 | 1521 |
映射的主机端口 | 1528 | 1529 |
ORACLE_HOME | /u01/app/oracle/product/11.2.0.4/dbhome_1 | /u01/app/oracle/product/11.2.0.4/dbhome_1 |
dbid | 2007947551 | 2007947551 |
1-- 创建DG的网络 2docker network create --subnet=192.168.68.0/16 mhalhr 3docker network inspect mhalhr 4 5-- 创建2台主机 6docker run -itd --name LHR11G -h LHR11G \ 7 -p 1528:1521 -p 1128:1158 -p 228:22 -p 3398:3389 \ 8 --network mhalhr --ip 192.168.68.68 \ 9 --privileged=true \ 10 lhrbest/oracle_11g_ee_lhr_11.2.0.4:2.0 init 11 12 13docker run -itd --name LHR11GDG -h LHR11GDG \ 14 -p 1529:1521 -p 1129:1158 -p 229:22 -p 3399:3389 \ 15 --network mhalhr --ip 192.168.68.69 \ 16 --privileged=true \ 17 lhrbest/oracle_11g_ee_lhr_11.2.0.4:2.0 init 18 19 20 -- 添加网卡 21docker network connect bridge LHR11G 22docker network connect bridge LHR11GDG 23 24 25-- 进入容器 26docker exec -it LHR11G bash 27docker exec -it LHR11GDG bash 28 29--备库删除原有的数据库 30dbca -silent -deleteDatabase -sourceDB LHR11G
二、主库操作
2.1 修改forcelogging、开闪回
1alter database force logging; 2alter database flashback on; 3select name , open_mode, log_mode,force_logging,DATABASE_ROLE,switchover_status from v$database;
2.2 添加standby log
1select * from v$standby_log; 2select group#,bytes/1024/1024 ||'M' from v$log ; 3SELECT * FROM V$LOGFILE; 4 5alter database add standby logfile group 4 ('/u01/app/oracle/oradata/LHR11G/standby_redo04.log') size 50m; 6alter database add standby logfile group 5 ('/u01/app/oracle/oradata/LHR11G/standby_redo05.log') size 50m; 7alter database add standby logfile group 6 ('/u01/app/oracle/oradata/LHR11G/standby_redo06.log') size 50m;
2.3 修改参数
1alter system set db_unique_name='LHR11G' scope=spfile; 2alter system set log_archive_config='DG_CONFIG=(LHR11G,LHR11GDG)'; 3alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST db_unique_name=LHR11G valid_for=(ALL_LOGFILES,ALL_ROLES)'; 4alter system set log_archive_dest_2='SERVICE=LHR11GDG LGWR ASYNC db_unique_name=LHR11GDG valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)'; 5alter system set log_archive_dest_state_1=ENABLE; 6alter system set log_archive_dest_state_2=ENABLE; 7alter system set log_archive_max_processes=4; 8alter system set remote_login_passwordfile='EXCLUSIVE' scope=spfile; 9 10alter system set db_file_name_convert='LHR11GDG','LHR11G' scope=spfile; 11alter system set log_file_name_convert='LHR11GDG','LHR11G' scope=spfile; 12alter system set standby_file_management='AUTO'; 13alter system set fal_server='LHR11GDG'; 14alter system set fal_client='LHR11G';
2.4 修改监听
1SID_LIST_LISTENER = 2 (SID_LIST = 3 (SID_DESC = 4 (GLOBAL_DBNAME = LHR11G) 5 (ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1) 6 (SID_NAME= LHR11G) 7 ) 8 (SID_DESC = 9 (GLOBAL_DBNAME = LHR11G_dgmgrl) 10 (ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1) 11 (SID_NAME= LHR11G) 12 ) 13)
2.5 修改tnsnames.ora
1LHR11G = 2 (DESCRIPTION = 3 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.68.68)(PORT = 1521)) 4 (CONNECT_DATA = 5 (SERVER = DEDICATED) 6 (SERVICE_NAME = LHR11G) 7 ) 8 ) 9 10LHR11GDG = 11 (DESCRIPTION = 12 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.68.69)(PORT = 1521)) 13 (CONNECT_DATA = 14 (SERVER = DEDICATED) 15 (SERVICE_NAME = LHR11GDG) 16 ) 17 )
三、主库密码文件拷贝到备库
1docker cp LHR11G:/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapwLHR11G . 2docker cp orapwLHR11G LHR11GDG:/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapwLHR11GDG 3chown oracle.oinstall /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapwLHR11GDG
四、备库操作
4.1 修改监听
1SID_LIST_LISTENER = 2 (SID_LIST = 3 (SID_DESC = 4 (GLOBAL_DBNAME = LHR11GDG) 5 (ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1) 6 (SID_NAME= LHR11GDG) 7 ) 8 (SID_DESC = 9 (GLOBAL_DBNAME = LHR11GDG_dgmgrl) 10 (ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1) 11 (SID_NAME= LHR11GDG) 12 ) 13)
4.2 备库修改到NOMOUNT状态
1mkdir -p /u01/app/oracle/oradata/LHR11GDG/ 2mkdir -p /u01/app/oracle/admin/LHR11GDG/adump 3 4echo "db_name=LHR11G" > $ORACLE_HOME/dbs/initLHR11GDG.ora 5 6ORACLE_SID=LHR11GDG 7startup nomount
4.3 duplicate复制搭建DG
1rman target sys/lhr@LHR11G auxiliary sys/lhr@LHR11GDG 2 3 4duplicate target database 5for standby nofilenamecheck 6from active database 7DORECOVER 8spfile 9set db_unique_name='LHR11GDG' 10set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=LHR11GDG' 11set standby_file_management='AUTO' 12set fal_server='LHR11G' 13set fal_client='LHR11GDG' 14set control_files='/u01/app/oracle/oradata/LHR11GDG/control01.ctl' 15set db_file_name_convert='LHR11G','LHR11GDG' 16set log_file_name_convert='LHR11G','LHR11GDG' 17set audit_file_dest='/u01/app/oracle/admin/LHR11GDG/adump' 18set sga_max_size='346030080' 19;
执行过程:
1[oracle@lhr11gdg dbs]$ rman target sys/lhr@LHR11G auxiliary sys/lhr@LHR11GDG 2 3Recovery Manager: Release 11.2.0.4.0 - Production on Tue Oct 27 14:07:44 2020 4 5Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 6 7connected to target database: LHR11G (DBID=2007947551) 8connected to auxiliary database: LHR11G (not mounted) 9 10RMAN> 11RMAN> duplicate target database 122> for standby nofilenamecheck 133> from active database 144> DORECOVER 155> spfile 166> set db_unique_name='LHR11GDG' 177> set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=LHR11GDG' 188> set standby_file_management='AUTO' 199> set fal_server='LHR11G' 2010> set fal_client='LHR11GDG' 2111> set control_files='/u01/app/oracle/oradata/LHR11GDG/control01.ctl' 2212> set db_file_name_convert='LHR11G','LHR11GDG' 2313> set log_file_name_convert='LHR11G','LHR11GDG' 2414> set audit_file_dest='/u01/app/oracle/admin/LHR11GDG/adump' 2515> set sga_max_size='346030080' 2616> ; 27 28Starting Duplicate Db at 2020-10-27 14:07:51 29using target database control file instead of recovery catalog 30allocated channel: ORA_AUX_DISK_1 31channel ORA_AUX_DISK_1: SID=396 device type=DISK 32 33contents of Memory Script: 34{ 35 backup as copy reuse 36 targetfile '/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapwLHR11G' auxiliary format 37 '/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapwLHR11GDG' targetfile 38 '/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/spfileLHR11G.ora' auxiliary format 39 '/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/spfileLHR11GDG.ora' ; 40 sql clone "alter system set spfile= ''/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/spfileLHR11GDG.ora''"; 41} 42executing Memory Script 43 44Starting backup at 2020-10-27 14:07:53 45allocated channel: ORA_DISK_1 46channel ORA_DISK_1: SID=161 device type=DISK 47Finished backup at 2020-10-27 14:07:55 48 49sql statement: alter system set spfile= ''/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/spfileLHR11GDG.ora'' 50 51contents of Memory Script: 52{ 53 sql clone "alter system set db_unique_name = 54 ''LHR11GDG'' comment= 55 '''' scope=spfile"; 56 sql clone "alter system set log_archive_dest_1 = 57 ''LOCATION=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=LHR11GDG'' comment= 58 '''' scope=spfile"; 59 sql clone "alter system set standby_file_management = 60 ''AUTO'' comment= 61 '''' scope=spfile"; 62 sql clone "alter system set fal_server = 63 ''LHR11G'' comment= 64 '''' scope=spfile"; 65 sql clone "alter system set fal_client = 66 ''LHR11GDG'' comment= 67 '''' scope=spfile"; 68 sql clone "alter system set control_files = 69 ''/u01/app/oracle/oradata/LHR11GDG/control01.ctl'' comment= 70 '''' scope=spfile"; 71 sql clone "alter system set db_file_name_convert = 72 ''LHR11G'', ''LHR11GDG'' comment= 73 '''' scope=spfile"; 74 sql clone "alter system set log_file_name_convert = 75 ''LHR11G'', ''LHR11GDG'' comment= 76 '''' scope=spfile"; 77 sql clone "alter system set audit_file_dest = 78 ''/u01/app/oracle/admin/LHR11GDG/adump'' comment= 79 '''' scope=spfile"; 80 sql clone "alter system set sga_max_size = 81 346030080 comment= 82 '''' scope=spfile"; 83 shutdown clone immediate; 84 startup clone nomount; 85} 86executing Memory Script 87 88sql statement: alter system set db_unique_name = ''LHR11GDG'' comment= '''' scope=spfile 89 90sql statement: alter system set log_archive_dest_1 = ''LOCATION=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=LHR11GDG'' comment= '''' scope=spfile 91 92sql statement: alter system set standby_file_management = ''AUTO'' comment= '''' scope=spfile 93 94sql statement: alter system set fal_server = ''LHR11G'' comment= '''' scope=spfile 95 96sql statement: alter system set fal_client = ''LHR11GDG'' comment= '''' scope=spfile 97 98sql statement: alter system set control_files = ''/u01/app/oracle/oradata/LHR11GDG/control01.ctl'' comment= '''' scope=spfile 99 100sql statement: alter system set db_file_name_convert = ''LHR11G'', ''LHR11GDG'' comment= '''' scope=spfile 101 102sql statement: alter system set log_file_name_convert = ''LHR11G'', ''LHR11GDG'' comment= '''' scope=spfile 103 104sql statement: alter system set audit_file_dest = ''/u01/app/oracle/admin/LHR11GDG/adump'' comment= '''' scope=spfile 105 106sql statement: alter system set sga_max_size = 346030080 comment= '''' scope=spfile 107 108Oracle instance shut down 109 110connected to auxiliary database (not started) 111Oracle instance started 112 113Total System Global Area 346562560 bytes 114 115Fixed Size 2253144 bytes 116Variable Size 209718952 bytes 117Database Buffers 130023424 bytes 118Redo Buffers 4567040 bytes 119 120contents of Memory Script: 121{ 122 backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/LHR11GDG/control01.ctl'; 123} 124executing Memory Script 125 126Starting backup at 2020-10-27 14:08:04 127using channel ORA_DISK_1 128channel ORA_DISK_1: starting datafile copy 129copying standby control file 130output file name=/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/snapcf_LHR11G.f tag=TAG20201027T140804 RECID=3 STAMP=1054908485 131channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 132Finished backup at 2020-10-27 14:08:06 133 134contents of Memory Script: 135{ 136 sql clone 'alter database mount standby database'; 137} 138executing Memory Script 139 140sql statement: alter database mount standby database 141 142contents of Memory Script: 143{ 144 set newname for tempfile 1 to 145 "/u01/app/oracle/oradata/LHR11GDG/temp01.dbf"; 146 switch clone tempfile all; 147 set newname for datafile 1 to 148 "/u01/app/oracle/oradata/LHR11GDG/system01.dbf"; 149 set newname for datafile 2 to 150 "/u01/app/oracle/oradata/LHR11GDG/sysaux01.dbf"; 151 set newname for datafile 3 to 152 "/u01/app/oracle/oradata/LHR11GDG/undotbs01.dbf"; 153 set newname for datafile 4 to 154 "/u01/app/oracle/oradata/LHR11GDG/users01.dbf"; 155 set newname for datafile 5 to 156 "/u01/app/oracle/oradata/LHR11GDG/example01.dbf"; 157 backup as copy reuse 158 datafile 1 auxiliary format 159 "/u01/app/oracle/oradata/LHR11GDG/system01.dbf" datafile 160 2 auxiliary format 161 "/u01/app/oracle/oradata/LHR11GDG/sysaux01.dbf" datafile 162 3 auxiliary format 163 "/u01/app/oracle/oradata/LHR11GDG/undotbs01.dbf" datafile 164 4 auxiliary format 165 "/u01/app/oracle/oradata/LHR11GDG/users01.dbf" datafile 166 5 auxiliary format 167 "/u01/app/oracle/oradata/LHR11GDG/example01.dbf" ; 168 sql 'alter system archive log current'; 169} 170executing Memory Script 171 172executing command: SET NEWNAME 173 174renamed tempfile 1 to /u01/app/oracle/oradata/LHR11GDG/temp01.dbf in control file 175 176executing command: SET NEWNAME 177 178executing command: SET NEWNAME 179 180executing command: SET NEWNAME 181 182executing command: SET NEWNAME 183 184executing command: SET NEWNAME 185 186Starting backup at 2020-10-27 14:08:12 187using channel ORA_DISK_1 188channel ORA_DISK_1: starting datafile copy 189input datafile file number=00001 name=/u01/app/oracle/oradata/LHR11G/system01.dbf 190output file name=/u01/app/oracle/oradata/LHR11GDG/system01.dbf tag=TAG20201027T140812 191channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15 192channel ORA_DISK_1: starting datafile copy 193input datafile file number=00002 name=/u01/app/oracle/oradata/LHR11G/sysaux01.dbf 194output file name=/u01/app/oracle/oradata/LHR11GDG/sysaux01.dbf tag=TAG20201027T140812 195channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07 196channel ORA_DISK_1: starting datafile copy 197input datafile file number=00003 name=/u01/app/oracle/oradata/LHR11G/undotbs01.dbf 198output file name=/u01/app/oracle/oradata/LHR11GDG/undotbs01.dbf tag=TAG20201027T140812 199channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07 200channel ORA_DISK_1: starting datafile copy 201input datafile file number=00005 name=/u01/app/oracle/oradata/LHR11G/example01.dbf 202output file name=/u01/app/oracle/oradata/LHR11GDG/example01.dbf tag=TAG20201027T140812 203channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07 204channel ORA_DISK_1: starting datafile copy 205input datafile file number=00004 name=/u01/app/oracle/oradata/LHR11G/users01.dbf 206output file name=/u01/app/oracle/oradata/LHR11GDG/users01.dbf tag=TAG20201027T140812 207channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 208Finished backup at 2020-10-27 14:08:50 209 210sql statement: alter system archive log current 211 212contents of Memory Script: 213{ 214 backup as copy reuse 215 archivelog like "/u01/app/oracle/flash_recovery_area/LHR11G/archivelog/2020_10_27/o1_mf_1_26_hshgbgyr_.arc" auxiliary format 216 "/u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_26_%u_.arc" archivelog like 217 "/u01/app/oracle/flash_recovery_area/LHR11G/archivelog/2020_10_27/o1_mf_1_27_hshgcl82_.arc" auxiliary format 218 "/u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_27_%u_.arc" ; 219 catalog clone recovery area; 220 switch clone datafile all; 221} 222executing Memory Script 223 224Starting backup at 2020-10-27 14:08:50 225using channel ORA_DISK_1 226channel ORA_DISK_1: starting archived log copy 227input archived log thread=1 sequence=26 RECID=7 STAMP=1054908501 228output file name=/u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_26_0eve183i_.arc RECID=0 STAMP=0 229channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:01 230channel ORA_DISK_1: starting archived log copy 231input archived log thread=1 sequence=27 RECID=8 STAMP=1054908530 232output file name=/u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_27_0fve183j_.arc RECID=0 STAMP=0 233channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:01 234Finished backup at 2020-10-27 14:08:52 235 236searching for all files in the recovery area 237 238List of Files Unknown to the Database 239===================================== 240File Name: /u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_27_0fve183j_.arc 241File Name: /u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_26_0eve183i_.arc 242cataloging files... 243cataloging done 244 245List of Cataloged Files 246======================= 247File Name: /u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_27_0fve183j_.arc 248File Name: /u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_26_0eve183i_.arc 249 250datafile 1 switched to datafile copy 251input datafile copy RECID=3 STAMP=1054908532 file name=/u01/app/oracle/oradata/LHR11GDG/system01.dbf 252datafile 2 switched to datafile copy 253input datafile copy RECID=4 STAMP=1054908532 file name=/u01/app/oracle/oradata/LHR11GDG/sysaux01.dbf 254datafile 3 switched to datafile copy 255input datafile copy RECID=5 STAMP=1054908532 file name=/u01/app/oracle/oradata/LHR11GDG/undotbs01.dbf 256datafile 4 switched to datafile copy 257input datafile copy RECID=6 STAMP=1054908532 file name=/u01/app/oracle/oradata/LHR11GDG/users01.dbf 258datafile 5 switched to datafile copy 259input datafile copy RECID=7 STAMP=1054908532 file name=/u01/app/oracle/oradata/LHR11GDG/example01.dbf 260 261contents of Memory Script: 262{ 263 set until scn 1138080; 264 recover 265 standby 266 clone database 267 delete archivelog 268 ; 269} 270executing Memory Script 271 272executing command: SET until clause 273 274Starting recover at 2020-10-27 14:08:52 275allocated channel: ORA_AUX_DISK_1 276channel ORA_AUX_DISK_1: SID=33 device type=DISK 277 278starting media recovery 279 280archived log for thread 1 with sequence 26 is already on disk as file /u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_26_0eve183i_.arc 281archived log for thread 1 with sequence 27 is already on disk as file /u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_27_0fve183j_.arc 282archived log file name=/u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_26_0eve183i_.arc thread=1 sequence=26 283archived log file name=/u01/app/oracle/flash_recovery_area/LHR11GDG/archivelog/2020_10_27/o1_mf_1_27_0fve183j_.arc thread=1 sequence=27 284media recovery complete, elapsed time: 00:00:00 285Finished recover at 2020-10-27 14:08:54 286Finished Duplicate Db at 2020-10-27 14:08:59 287 288RMAN> exit 289 290 291Recovery Manager complete. 292
4.4 实时应用
1select open_mode from v$database; 2alter database open; 3 4alter database flashback on; 5 6select * from v$log; 7set line 9999 8select dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status from v$database; 9 10alter database recover managed standby database cancel; 11alter database recover managed standby database using current logfile disconnect;
主备库常用脚本:
1------------------------------ 主备库信息 2set line 9999 3col DEST_NAME format a20 4col DESTINATION format a15 5col GAP_STATUS format a10 6col DB_UNIQUE_NAME format a15 7col error format a10 8col APPLIED_SCN for 999999999999999 9SELECT al.thread#, 10 ads.dest_id, 11 ads.DEST_NAME, 12 (SELECT ads.TYPE || ' ' || ad.TARGET 13 FROM v$archive_dest AD 14 WHERE AD.DEST_ID = ADS.DEST_ID) TARGET, 15 ADS.DATABASE_MODE, 16 ads.STATUS, 17 ads.error, 18 ads.RECOVERY_MODE, 19 ads.DB_UNIQUE_NAME, 20 ads.DESTINATION, 21 ads.GAP_STATUS, 22 (SELECT CASE 23 WHEN NB.DATABASE_ROLE like '%STANDBY%' then 24 (SELECT MAX(sequence#) 25 FROM v$standby_log na 26 WHERE na.thread# = al.thread#) 27 ELSE 28 (SELECT MAX(sequence#) 29 FROM v$log na 30 WHERE na.thread# = al.thread#) 31 END 32 FROM V$DATABASE NB) Current_Seq#, 33 MAX(sequence#) Last_Archived, 34 MAX(CASE 35 WHEN al.APPLIED = 'YES' AND 36 aL.STANDBY_DEST = 37 (SELECT CASE 38 WHEN NB.DATABASE_ROLE like '%STANDBY%' then 39 'NO' 40 ELSE 41 'YES' 42 END 43 FROM V$DATABASE NB) THEN 44 al.sequence# 45 end) APPLIED_SEQ#, 46 (SELECT ad.applied_scn 47 FROM v$archive_dest AD 48 WHERE AD.DEST_ID = ADS.DEST_ID) applied_scn 49 FROM (SELECT * 50 FROM v$archived_log V 51 WHERE V.resetlogs_change# = 52 (SELECT d.RESETLOGS_CHANGE# FROM v$database d)) al, 53 v$archive_dest_status ads 54 WHERE al.dest_id(+) = ads.dest_id 55 AND ads.STATUS != 'INACTIVE' 56 AND DEST_NAME <> 'STANDBY_ARCHIVE_DEST' 57 GROUP BY al.thread#, 58 ads.dest_id, 59 ads.DEST_NAME, 60 ads.STATUS, 61 ads.error, 62 ads.TYPE, 63 ADS.DATABASE_MODE, 64 ads.RECOVERY_MODE, 65 ads.DB_UNIQUE_NAME, 66 ads.DESTINATION, 67 ads.GAP_STATUS 68 ORDER BY ads.dest_id, al.thread#; 69 70------------物理dg日志应用情况(主备库都可以) 71COL NAME FOR A80 72SET LINESIZE 9999 PAGESIZE 9999 73SELECT A.THREAD#, A.NAME, A.SEQUENCE#, A.APPLIED, A.FIRST_TIME 74 FROM V$ARCHIVED_LOG A, 75 (SELECT NB.THREAD#,NB.RESETLOGS_ID,NB.DEST_ID,(MAX(NB.SEQUENCE#) - 3) MAX_SEQUENCE# 76 FROM V$ARCHIVED_LOG NB 77 WHERE NB.APPLIED = 'YES' 78 and NB.DEST_ID in (SELECT NB.DEST_ID FROM V$ARCHIVE_DEST_STATUS NB where STATUS <>'INACTIVE' AND NB.RECOVERY_MODE like 'MANAGED%' ) 79 and RESETLOGS_ID=(select max(nbb.RESETLOGS_ID) from V$ARCHIVED_LOG nbb) 80 GROUP BY NB.THREAD#,NB.RESETLOGS_ID,NB.DEST_ID) B 81 WHERE A.THREAD# = B.THREAD# 82 AND A.RESETLOGS_ID = B.RESETLOGS_ID 83 AND A.DEST_ID=B.DEST_ID 84 AND A.SEQUENCE# >= MAX_SEQUENCE# 85 and A.RESETLOGS_ID=(select max(nb.RESETLOGS_ID) from V$ARCHIVED_LOG nb) 86 AND A.STANDBY_DEST = (SELECT CASE WHEN NB.DATABASE_ROLE LIKE '%STANDBY%' THEN 'NO' ELSE 'YES' END FROM V$DATABASE NB) 87 ORDER BY A.THREAD#, A.SEQUENCE#;
执行过程:
1[oracle@lhr11gdg dbs]$ sas 2 3SQL*Plus: Release 11.2.0.4.0 Production on Tue Oct 27 14:11:21 2020 4 5Copyright (c) 1982, 2013, Oracle. All rights reserved. 6 7 8Connected to: 9Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 10With the Partitioning, OLAP, Data Mining and Real Application Testing options 11 12SYS@LHR11GDG> select open_mode from v$database; 13 14OPEN_MODE 15---------------------------------------- 16MOUNTED 17 18SYS@LHR11GDG> alter database open; 19 20Database altered. 21 22SYS@LHR11GDG> set line 9999 23SYS@LHR11GDG> select dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status from v$database; 24 25 DBID NAME CURRENT_SCN PROTECTION_MODE DATABASE_ROLE FORCE_ OPEN_MODE SWITCHOVER_STATUS 26---------- ------------------ ----------- ---------------------------------------- -------------------------------- ------ ---------------------------------------- ---------------------------------------- 272007947551 LHR11G 1138079 MAXIMUM PERFORMANCE PHYSICAL STANDBY YES READ ONLY NOT ALLOWED 28 29SYS@LHR11GDG> alter database recover managed standby database using current logfile disconnect; 30 31Database altered. 32 33SYS@LHR11GDG> select dbid,name,current_scn,protection_mode,database_role,force_logging,open_mode,switchover_status from v$database; 34 35 DBID NAME CURRENT_SCN PROTECTION_MODE DATABASE_ROLE FORCE_ OPEN_MODE SWITCHOVER_STATUS 36---------- ------------------ ----------- ---------------------------------------- -------------------------------- ------ ---------------------------------------- ---------------------------------------- 372007947551 LHR11G 1138079 MAXIMUM PERFORMANCE PHYSICAL STANDBY YES READ ONLY WITH APPLY NOT ALLOWEDc
查询DG状态:
1 SYS@LHR11G> @dg_info.sql 2 3 THREAD# DEST_ID DEST_NAME TARGET DATABASE_MODE STATUS ERROR RECOVERY_MODE DB_UNIQUE_NAME DESTINATION GAP_STATUS CURRENT_SEQ# LAST_ARCHIVED APPLIED_SEQ# APPLIED_SCN 4 ---------- ---------- -------------------- -------------------------------------------- ------------------------------ ------------------ ---------- ---------------------------------------------- --------------- --------------- ---------- ------------ ------------- ------------ ---------------- 5 1 1 LOG_ARCHIVE_DEST_1 LOCAL PRIMARY OPEN VALID IDLE LHR11G 34 33 0 6 1 2 LOG_ARCHIVE_DEST_2 PHYSICAL STANDBY OPEN_READ-ONLY VALID MANAGED REAL TIME APPLY LHR11GDG LHR11GDG NO GAP 34 33 32 1142459 7 8 SYS@LHR11G> @dg_status 9 10 THREAD# NAME SEQUENCE# APPLIED FIRST_TIME 11 ---------- ---------------------------------------------------------------------------------------------------- ---------- ------------------ ------------------- 12 1 30 YES 2020-10-27 15:36:40 13 1 31 YES 2020-10-27 15:36:41 14 1 /u01/app/oracle/flash_recovery_area/LHR11G/archivelog/2020_10_27/o1_mf_1_39_hshmk43l_.arc 32 YES 2020-10-27 15:36:47 15 1 /u01/app/oracle/flash_recovery_area/LHR11G/archivelog/2020_10_27/o1_mf_1_40_hshmow9l_.arc 33 IN-MEMORY 2020-10-27 15:37:07
五、配置dgmgrl
5.1 基础配置
1-- 主备库都修改 2alter system set dg_broker_start=true scope=both; 3 4-- 开始配置 5CREATE CONFIGURATION 'LHR11G' AS primary database is 'LHR11G' connect identifier is LHR11G; 6 7SHOW CONFIGURATION; 8 9add database 'LHR11GDG' as connect identifier is LHR11GDG maintained as physical; 10 11show database verbose 'LHR11G'; 12show database 'LHR11G'; 13 14enable configuration 15 16 17EDIT DATABASE 'LHR11G' SET PROPERTY StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.68.68)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=LHR11G_DGMGRL)(INSTANCE_NAME=LHR11G)(SERVER=DEDICATED)))'; 18EDIT DATABASE 'LHR11GDG' SET PROPERTY StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.68.69)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=LHR11GDG_DGMGRL)(INSTANCE_NAME=LHR11GDG)(SERVER=DEDICATED)))'; 19 20show configuration 21 22 23show database 'LHR11GDG' InconsistentProperties 24show database 'LHR11GDG' statusreport; 25 26alter system set archive_lag_target=0 scope=both sid='*'; 27alter system set log_archive_min_succeed_dest=1 scope=both sid='*'; 28alter system set Log_Archive_Trace=0 scope=both sid='*'; 29alter system set Log_Archive_Format='%t_%s_%r.dbf' scope=spfile sid='*';
配置完成后:
1[oracle@lhr11g ~]$ dgmgrl sys/lhr@lhr11g 2DGMGRL for Linux: Version 11.2.0.4.0 - 64bit Production 3 4Copyright (c) 2000, 2009, Oracle. All rights reserved. 5 6Welcome to DGMGRL, type "help" for information. 7Connected. 8DGMGRL> show configuration 9 10Configuration - LHR11G 11 12 Protection Mode: MaxPerformance 13 Databases: 14 LHR11G - Primary database 15 LHR11GDG - Physical standby database 16 17Fast-Start Failover: DISABLED 18 19Configuration Status: 20SUCCESS 21
5.2 配置FSFO
1---- Fast-Start Failover FSFO配置 2- 将Data Guard配置设置为MaxAvailability或MaxPerformance保护模式。 3- 如果配置保护模式设置为MaxAvailability,请确保将主数据库和快速启动故障转移目标备用数据库的LogXptMode属性设置为SYNC。 4- 如果配置保护模式设置为MaxPerformance,请确保将主数据库和快速启动故障转移目标备用数据库的LogXptMode属性设置为ASYNC。 5- 确保主数据库和快速启动故障转移目标备用数据库都启用了闪回。 6- 将主数据库FastStartFailoverTarget属性设置为所需目标备用数据库的DB_UNIQUE_NAME值,并将所需目标备用数据库FastStartFailoverTarget属性设置为主数据库的DB_UNIQUE_NAME值。 7 8show resource verbose 'LHR11G' logxptmode on site 'LHR11G'; 9show resource verbose 'LHR11GDG' logxptmode on site 'LHR11GDG'; 10alter resource 'LHR11G' set property logxptmode='SYNC'; 11alter resource 'LHR11GDG' set property logxptmode='SYNC'; 12-- edit database LHR11GDG set property logxptmode='SYNC'; 13edit configuration set protection mode as maxavailability; 14 15 16 17edit database 'LHR11G' set property 'FastStartFailoverTarget'='LHR11GDG'; 18edit database 'LHR11GDG' set property 'FastStartFailoverTarget'='LHR11G'; 19 20 21show database 'LHR11G' FastStartFailoverTarget 22show database 'LHR11GDG' FastStartFailoverTarget 23show database 'LHR11G' logxptmode 24show database 'LHR11GDG' logxptmode 25 26-- 10秒后开始自动切换 27edit configuration set property FastStartFailoverThreshold=10; 28 29 30-- 配置客户端自动故障转移的service 31begin 32 DBMS_SERVICE.CREATE_SERVICE(service_name => 'dg_taf_lhr', 33 network_name => 'dg_taf_lhr', 34 aq_ha_notifications => TRUE, 35 failover_method => 'BASIC', 36 failover_type => 'SELECT', 37 failover_retries => 30, 38 failover_delay => 5); 39end; 40/ 41 42create or replace procedure dg_taf_proc_lhr is 43 v_role VARCHAR(30); 44begin 45 select DATABASE_ROLE into v_role from V$DATABASE; 46 if v_role = 'PRIMARY' then 47 DBMS_SERVICE.START_SERVICE('dg_taf_lhr'); 48 else 49 DBMS_SERVICE.STOP_SERVICE('dg_taf_lhr'); 50 end if; 51end; 52/ 53create or replace TRIGGER dg_taf_trg_startup_lhr 54 after startup or db_role_change on database 55begin 56 dg_taf_proc_lhr; 57end; 58/ 59 60exec dg_taf_proc_lhr ; 61alter system switch logfile; 62 63dg_taf = 64 (DESCRIPTION = 65 (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.68.68)(PORT = 1521)) 66 (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.68.69)(PORT = 1521)) 67 (LOAD_BALANCE = yes) 68 (CONNECT_DATA = 69 (SERVER = DEDICATED) 70 (SERVICE_NAME = dg_taf_lhr) 71 (FAILOVER_MODE = 72 (TYPE = session) 73 (METHOD = basic) 74 (RETRIES = 180) 75 (DELAY = 5) 76 ) 77 ) 78 ) 79 80 81 82ENABLE FAST_START FAILOVER; 83nohup dgmgrl -logfile '/tmp/observer_LHR11G.log' sys/lhr@LHR11GDG "start observer" & 84tailf /tmp/observer_LHR11G.log 85 86SHOW FAST_START FAILOVER; 87
配置结果:
1DGMGRL> SHOW FAST_START FAILOVER; 2 3Fast-Start Failover: ENABLED 4 5 Threshold: 10 seconds 6 Target: LHR11GDG 7 Observer: lhr11gdg 8 Lag Limit: 30 seconds 9 Shutdown Primary: TRUE 10 Auto-reinstate: TRUE 11 Observer Reconnect: (none) 12 Observer Override: FALSE 13 14Configurable Failover Conditions 15 Health Conditions: 16 Corrupted Controlfile YES 17 Corrupted Dictionary YES 18 Inaccessible Logfile NO 19 Stuck Archiver NO 20 Datafile Offline YES 21 22 Oracle Error Conditions: 23 (none)
5.3 重建DG
如果由于特殊原因导致备库不可用,必须进行重建,那么可以使用如下过程直接进行重建DG
1startup force nomount 2 3rman target sys/lhr@LHR11G auxiliary sys/lhr@LHR11GDG 4 5duplicate target database 6for standby nofilenamecheck 7from active database 8DORECOVER 9; 10 11 12alter database flashback on;