前言:
Oracle在12c推出了新特性(RESTORE/RECOVER ...FROM SERVICE)通过网络服务方式恢复数据库,这个新特性也大大简化了DataGuard主备的搭建。
测试环境:
主库 | 备库 | |
数据库版本 | 19.3.0.0 | 19.3.0.0 |
架构 | 单实例 | 单实例 |
db_unique_name | testdb | testdg |
ip | 192.168.2.101 | 192.168.2.201 |
通过from service部署主备:
1 检查数据库开启归档以及force_logging
- ---数据库开启归档模式
- archive log list
- ---检查开启force_logging
- select force_logging from v$database;
- alter database force logging;
2 检查并开启SYS远程登录
- ---确认参数remote_login_passwordfile为EXCLUSIVE
- show parameter remote_login_passwordfile
3 配置主备TNS
- ---配置主备TNS
- #主库tns
- testdb =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.2.201)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = testdb)
- )
- )
- #备库tns
- testdg=
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.2.101)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = testdg)
- )
- )
4 配置主库参数
- ---设置主库参数
- alter system set log_archive_dest_1='location=/u01/app/oracle/arch'scope=both sid='*';
- alter system set db_create_file_dest='/u01/app/oracle/oradata' scope=both sid='*';
- alter system set log_archive_config='dg_config=(testdb,testdg)' scope=both sid='*';
- alter system set log_archive_dest_2=
- 'service=testdg LGWR ASYNC NOAFFIRM delay=0 optional
- compression=disable max_failure=0 max_connections=1 reopen=30
- net_timeout=300 valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)
- db_unique_name=testdg' scope=both sid='*';
- alter system set log_archive_dest_state_2=defer scope=both sid='*';
- alter system set fal_client=testdb scope=both sid='*';
- alter system set fal_server=testdg scope=both sid='*';
- alter system set standby_file_management=AUTO scope=both sid='*';
5 主库添加standby log
- ---添加standby_log
- #查询当前log的设置
- select thread#,group#,bytes/1024/1024 SIZE_IN_GB, status from v$log;
- #创建需要保持一致
- alter database ADD standby logfile thread 1 group 21 ('/u01/app/oracle/oradata/TESTDB/onlinelog/redo01.log') size 200M ;
- alter database ADD standby logfile thread 1 group 22 ('/u01/app/oracle/oradata/TESTDB/onlinelog/redo02.log') size 200M ;
- alter database ADD standby logfile thread 1 group 23 ('/u01/app/oracle/oradata/TESTDB/onlinelog/redo03.log') size 200M ;
- alter database ADD standby logfile thread 1 group 24 ('/u01/app/oracle/oradata/
6 拷贝密码文件到备库
scp -rp $ORACLE_HOME/dbs/orapwtestdb 192.168.2.101:$ORACLE_HOME/dbs/orapwtestdg
7 生成spfile文件拷贝到备库
- create pfile='/tmp/initstandby.ora' from spfile;
- scp -rp /tmp/initstandby.ora 192.168.2.101:$ORACLE_HOME/dbs/inittestdg.ora
8 备库编辑参数
- ---参数需要根据实际环境进行修改,以下参数只是测试环境参数,不能作为生产使用
- *.audit_file_dest='/u01/app/oracle/admin/testdg/adump'
- *.audit_trail='db'
- *.compatible='19.0.0'
- *.control_files='/u01/app/oracle/oradata/TESTDG/controlfile/control01.ctl'
- *.db_block_size=8192
- *.db_create_file_dest='/u01/app/oracle/oradata'
- *.db_name='testdb'
- *.db_unique_name='testdg'
- *.diagnostic_dest='/u01/app/oracle'
- *.dispatchers='(PROTOCOL=TCP) (SERVICE=testdgXDB)'
- *.fal_client='TESTDG'
- *.fal_server='TESTDB'
- *.local_listener=''
- *.log_archive_config='dg_config=(testdb,testdg)'
- *.log_archive_dest_1='location=/u01/app/oracle/arch'
- *.log_archive_dest_2='service=testdb LGWR ASYNC NOAFFIRM delay=0 optional
- compression=disable max_failure=0 max_connections=1 reopen=30
- net_timeout=300 valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)
- db_unique_name=testdb'
- *.log_archive_dest_state_2='DEFER'
- *.memory_target=1470m
- *.nls_language='AMERICAN'
- *.nls_territory='AMERICA'
- *.open_cursors=300
- *.processes=300
- *.remote_login_passwordfile='EXCLUSIVE'
- *.standby_file_management='AUTO'
- *.undo_tablespace='UNDOTBS1'
- ---创建spfile
- create spfile from pfile;
9 备库创建审计,数据目录
- mkdir -p /u01/app/oracle/admin/testdg/adump
- mkdir -p /u01/app/oracle/oradata/TESTDG/controlfile
- mkdir -p /u01/app/oracle/oradata/TESTDG/datafile
- mkdir -p /u01/app/oracle/oradata/TESTDG/tempfile
- mkdir -p /u01/app/oracle/oradata/TESTDG/onlinelog
- mkdir -p /u01/app/oracle/oradata/arch
10 启动备库实例到nomount
startup nomount
11 备库通过service远程恢复standby controlfile
- rman target /
- restore standby controlfile from service 'testdb';
-
- RMAN> restore standby controlfile from service 'testdb';
-
- Starting restore at 2022/11/01 15:46:02
- using target database control file instead of recovery catalog
- allocated channel: ORA_DISK_1
- channel ORA_DISK_1: SID=13 device type=DISK
-
- channel ORA_DISK_1: starting datafile backup set restore
- channel ORA_DISK_1: using network backup set from service testdb
- channel ORA_DISK_1: restoring control file
- channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
- output file name=/u01/app/oracle/oradata/TESTDG/controlfile/control01.ctl
- Finished restore at 2022/11/01 15:46:06
-
- RMAN>
12 启动到mount
- RMAN> alter database mount;
-
- released channel: ORA_DISK_1
- Statement processed
- RMAN>
13 备库通过from service恢复数据文件
- ---可以通过修改rman的默认配置,设置并行
- RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
- RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 8;
-
- ---恢复管道section size的大小参考以下公式算法
- On the primary, query the largest datafile size to determine the section size to be used for the recover command.
- SQL> select max(bytes)/1073741824 GB from v$datafile;
- If the largest file is:
- <15TB use section size of 64GB
- >15TB and <30TB used section size of 128G
- >30TB and <60TB used section size of 256G
- >60TB use section size of 512G
-
- ---进行恢复
- #注意使用sys/password方式登陆,不然会出现
- using target database control file instead of recovery catalog
- RMAN-00571: ===========================================================
- RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
- RMAN-00571: ===========================================================
- RMAN-12001: could not open channel c1
- RMAN-10008: could not create channel context
- RMAN-10003: unable to connect to target database
- ORA-01017: invalid username/password; logon denied
-
- rman target sys/oracle
- run
- {
- allocate channel c1 type disk connect '/@testdg';
- allocate channel c2 type disk connect '/@testdg';
- allocate channel c3 type disk connect '/@testdg';
- allocate channel c4 type disk connect '/@testdg';
- allocate channel c5 type disk connect '/@testdg';
- allocate channel c6 type disk connect '/@testdg';
- allocate channel c7 type disk connect '/@testdg';
- allocate channel c8 type disk connect '/@testdg';
- restore database from service 'testdb' section size 64G;
- release channel c1;
- release channel c2;
- release channel c3;
- release channel c4;
- release channel c5;
- release channel c6;
- release channel c7;
- release channel c8;
- }
14 备库恢复日志
- using target database control file instead of recovery catalog
- allocated channel: c1
- channel c1: SID=13 device type=DISK
-
- allocated channel: c2
- channel c2: SID=258 device type=DISK
-
- allocated channel: c3
- channel c3: SID=20 device type=DISK
-
- allocated channel: c4
- channel c4: SID=259 device type=DISK
-
- allocated channel: c5
- channel c5: SID=21 device type=DISK
-
- allocated channel: c6
- channel c6: SID=260 device type=DISK
-
- allocated channel: c7
- channel c7: SID=22 device type=DISK
-
- allocated channel: c8
- channel c8: SID=261 device type=DISK
-
- Starting restore at 2022/11/01 16:34:06
-
- channel c1: starting datafile backup set restore
- channel c1: using network backup set from service testdb
- channel c1: specifying datafile(s) to restore from backup set
- channel c1: restoring datafile 00001 to /u01/app/oracle/oradata/TESTDG/datafile/o1_mf_system_kp1phykz_.dbf
- channel c1: restoring section 1 of 1
- channel c2: starting datafile backup set restore
- channel c2: using network backup set from service testdb
- channel c2: specifying datafile(s) to restore from backup set
- channel c2: restoring datafile 00003 to /u01/app/oracle/oradata/TESTDG/datafile/o1_mf_sysaux_kp1phyo1_.dbf
- channel c2: restoring section 1 of 1
- channel c3: starting datafile backup set restore
- channel c3: using network backup set from service testdb
- channel c3: specifying datafile(s) to restore from backup set
- channel c3: restoring datafile 00004 to /u01/app/oracle/oradata/TESTDG/datafile/o1_mf_undotbs1_kp1phyt2_.dbf
- channel c3: restoring section 1 of 1
- channel c4: starting datafile backup set restore
- channel c4: using network backup set from service testdb
- channel c4: specifying datafile(s) to restore from backup set
- channel c4: restoring datafile 00007 to /u01/app/oracle/oradata/TESTDG/datafile/o1_mf_users_kp1phz14_.dbf
- channel c4: restoring section 1 of 1
- channel c4: restore complete, elapsed time: 00:00:02
- channel c3: restore complete, elapsed time: 00:00:08
- channel c1: restore complete, elapsed time: 00:00:16
- channel c2: restore complete, elapsed time: 00:00:16
- Finished restore at 2022/11/01 16:34:22
-
- released channel: c1
-
- released channel: c2
-
- released channel: c3
-
- released channel: c4
-
- released channel: c5
-
- released channel: c6
-
- released channel: c7
-
- released channel: c8
15 启动备库到open read only
alter database open read only;
16 备库添加standby log
- ---备库添加standby_log
- #查询当前log的设置
- select thread#,group#,bytes/1024/1024 SIZE_IN_GB, status from v$log;
- #创建需要保持一致
- alter database ADD standby logfile thread 1 group 21 ('/u01/app/oracle/oradata/TESTDG/onlinelog/redo01.log') size 200M ;
- alter database ADD standby logfile thread 1 group 22 ('/u01/app/oracle/oradata/TESTDG/onlinelog/redo02.log') size 200M ;
- alter database ADD standby logfile thread 1 group 23 ('/u01/app/oracle/oradata/TESTDG/onlinelog/redo03.log') size 200M ;
- alter database ADD standby logfile thread 1 group 24 ('/u01/app/oracle/oradata/TESTDG/onlinelog/redo04.log') size 200M ;
17 备库启动mrp进程进行同步,完成DataGuard主备搭建
- ---启动mrp进程
- alter database recover managed standby database using current logfile disconnect from session;
-
- SQL> SQL> SQL>
- SOURCE_DBID SOURCE_DB_UNIQUE_NAME NAME VALUE UNIT
- ----------- -------------------------------- -------------------------------- -------------------------------------------------- ------------------------------
- TIME_COMPUTED DATUM_TIME CON_ID
- ------------------------------ ------------------------------ ----------
- 2902942490 testdb transport lag +00 00:00:00 day(2) to second(0) interval
- 11/01/2022 16:53:03 11/01/2022 16:53:03 0
-
- 2902942490 testdb apply lag +00 00:00:00 day(2) to second(0) interval
- 11/01/2022 16:53:03 11/01/2022 16:53:03 0
-
- 2902942490 testdb apply finish time day(2) to second(3) interval
- 11/01/2022 16:53:03 0
-
- 0 estimated startup time 9 second
- 11/01/2022 16:53:03 0
总结:
通过(RESTORE/RECOVER ...FROM SERVICE)方式进行备库DG的部署,可以提高备库数据初始化的速度以及简化部署的步骤。