Oracle DG 理论及实验笔记
DATAGUARD 是通过建立一个 PRIMARY 和 STANDBY 组来确立其参照关系。
STANDBY 一旦创建, DATAGUARD 就会通过将主数据库 (PRIMARY) 的 REDO 传递给 STANDBY 数据库,然后在 STANDBY 中应用 REDO 实现数据库的同步。
有两种类型的 STANDBY :物理 STANDBY 和逻辑 STANDBY 。
物理 STANDBY 提供与主数据库完全一样的拷贝(块到块),数据库 SCHEMA ,包括索引都是一样的。它是直接应用 REDO 实现同步的。逻辑 STANDBY 则不是这样,在逻辑 STANDBY 中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的 REDO 转换成 SQL 语句,然后在 STANDBY 上执行 SQL 语句。逻辑 STANDBY 除灾难恢复外还有其它用途,比如用于用户进行查询和报表。
安装环境:
在主库 --primary 上搭建数据库软件,建立监听,采用 dbca 搭建实例;
在备库 --standby 上搭建数据库软件,建立监听,但是不需要建立实例。
在 linux 上搭建 oracle 数据库,过程略。
步骤概述:
1.主库开启归档并设置快速恢复区;
2.主库创建归档同步目录;
3.主库添加 STANDBY 日志文件;
4.主备皆配置网络 --- 监听配置文件;
5.将主库的密码文件传输到备库;
6.修改主库的参数文件传输到备库,需修改部分信息;
7.以动态参数文件的形式启动备库数据库;
8.主库登录 RMAN ,【 duplicate 】复制数据库;
1.主备库配置
1.1创建归档同步目录
[oracle@test1 ~]$ mkdir -p /home/oracle/flash [oracle@test2 ~]$ mkdir -p /home/oracle/flash
1.2开启归档并设置快速恢复区
alter system set db_recovery_file_dest='/home/oracle/flash'; alter system set db_recovery_file_dest_size=4G; alter database archivelog;
1.3主库添加 STANDBY 日志文件
alter database add standby logfile group 4 '/home/oracle/s1.log' size 50M; alter database add standby logfile group 5 '/home/oracle/s2.log' size 50M; alter database add standby logfile group 6 '/home/oracle/s3.log' size 50M; alter database add standby logfile group 7 '/home/oracle/s4.log' size 50M;
1.4主备库修改监听配置文件
[oracle@test1 ~]$ cd /u01/app/oracle/product/11.2.0/db_1/network/admin/
[oracle@test1 admin]$ cat listener.ora # listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora # Generated by Oracle configuration tools. LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = test1.us.oracle.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) ADR_BASE_LISTENER = /u01/app/oracle SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (GLOBAL_DBNAME=PROD1) (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1) (SID_NAME=PROD1)) )
[oracle@test1 admin]$ cat tnsnames.ora # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. PROD1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = test1.us.oracle.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = PROD1) ) ) PROD1_S = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = test2.us.oracle.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = PROD1) ) )
启动监听,并测试服务名网络的通畅。两台主机均需测试两个服务名(此省略主库的测试):
[oracle@test1 admin]$ lsnrctl start [oracle@test2 admin]$ lsnrctl start [oracle@test2 admin]$ tnsping prod1 TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 25-FEB-2019 11:46:06 Copyright (c) 1997, 2013, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = test1.us.oracle.com)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = PROD1))) OK (0 msec) [oracle@test2 admin]$ tnsping prod1_s TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 25-FEB-2019 11:47:04 Copyright (c) 1997, 2013, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = test2.us.oracle.com)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = PROD1))) OK (0 msec)
1.5传输密码文件
[oracle@test1 dbs]$ cd $ORACLE_HOME/dbs [oracle@test1 dbs]$ ls hc_PROD1.dat init.ora lkPROD1 orapwPROD1 spfilePROD1.ora [oracle@test1 dbs]$ scp orapwPROD1 test2:/u01/app/oracle/product/11.2.0/dbhome_1/dbs oracle@test2's password: orapwPROD1 100% 1536 1.5KB/s 00:00
1.6修改参数文件配置
[oracle@test1 dbs]$ ls hc_PROD1.dat init.ora initPROD1.ora lkPROD1 orapwPROD1 spfilePROD1.ora [oracle@test1 dbs]$ cat initPROD1.ora PROD1.__db_cache_size=260046848 PROD1.__java_pool_size=4194304 PROD1.__large_pool_size=8388608 PROD1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment PROD1.__pga_aggregate_target=398458880 PROD1.__sga_target=390070272 PROD1.__shared_io_pool_size=0 PROD1.__shared_pool_size=104857600 PROD1.__streams_pool_size=0 *.audit_file_dest='/u01/app/oracle/admin/PROD1/adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='/u01/app/oracle/oradata/PROD1/control01.ctl','/u01/app/oracle/fast_recovery_area/PROD1/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='PROD1' *.db_recovery_file_dest='/home/oracle/flash' *.db_recovery_file_dest_size=4294967296 *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=PROD1XDB)' *.memory_target=786432000 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.undo_tablespace='UNDOTBS1' DB_UNIQUE_NAME=PROD1 LOG_ARCHIVE_CONFIG='DG_CONFIG=(PROD1,LEILEI)' LOG_ARCHIVE_DEST_1= 'LOCATION=/home/oracle/flash VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD1' LOG_ARCHIVE_DEST_2= 'SERVICE=PROD1_S ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=LEILEI' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE LOG_ARCHIVE_FORMAT=%t_%s_%r.arc LOG_ARCHIVE_MAX_PROCESSES=30 FAL_SERVER=PROD1 STANDBY_FILE_MANAGEMENT=AUTO
传输静态参数文件到备库:
[oracle@test1 dbs]$ scp initPROD1.ora test2:/u01/app/oracle/product/11.2.0/dbhome_1/dbs oracle@test2's password: initPROD1.ora 100% 1399 1.4KB/s 00:00
在备库上修改静态参数文件:
[oracle@test2 dbs]$ cat initPROD1.ora *.control_files='/u01/app/oracle/oradata/PROD1/control01.ctl','/u01/app/oracle/fast_recovery_area/PROD1/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='PROD1' *.db_recovery_file_dest='/home/oracle/flash' *.db_recovery_file_dest_size=4294967296 *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=PROD1XDB)' *.memory_target=786432000 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.undo_tablespace='UNDOTBS1' DB_UNIQUE_NAME=LEILEI LOG_ARCHIVE_CONFIG='DG_CONFIG=(LEILEI,PROD1)' LOG_ARCHIVE_DEST_1= 'LOCATION=/home/oracle/flash VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=LEILEI' LOG_ARCHIVE_DEST_2= 'SERVICE=PROD1 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PROD1' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE LOG_ARCHIVE_FORMAT=%t_%s_%r.arc LOG_ARCHIVE_MAX_PROCESSES=30 FAL_SERVER=PROD1 STANDBY_FILE_MANAGEMENT=AUTO
1.7在备库上,创建静态参数文件中对应的目录文件夹
[oracle@test2 dbs]$ mkdir -p /home/oracle/flash mkdir -p /u01/app/oracle/admin/PROD1/adump mkdir -p /u01/app/oracle/oradata/PROD1 mkdir -p /u01/app/oracle/fast_recovery_area/PROD1
1.8启动备库到【 nomount 】阶段
[oracle@test2 ~]$ export ORACLE_SID=PROD1 [oracle@test2 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Feb 25 13:59:23 2019 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SYS@PROD1 >startup nomount; ORACLE instance started. Total System Global Area 1219260416 bytes Fixed Size 2252744 bytes Variable Size 788529208 bytes Database Buffers 419430400 bytes Redo Buffers 9048064 bytes
1.9主库登录 RMAN ,复制数据库
[oracle@test1 ~]$ rman target sys/oracle@prod1 auxiliary sys/oracle@prod1_s RMAN> duplicate target database for standby from active database nofilenamecheck;
1 [oracle@test1 ~]$ rman target sys/oracle@prod1 auxiliary sys/oracle@prod1_s 2 3 Recovery Manager: Release 11.2.0.4.0 - Production on Mon Feb 25 13:43:23 2019 4 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 5 connected to target database: PROD1 (DBID=2222506242) 6 connected to auxiliary database: PROD1 (not mounted) 7 8 RMAN> duplicate target database for standby from active database nofilenamecheck; 9 10 Starting Duplicate Db at 2019-02-25 13:43:31 11 using target database control file instead of recovery catalog 12 allocated channel: ORA_AUX_DISK_1 13 channel ORA_AUX_DISK_1: SID=10 device type=DISK 14 contents of Memory Script: 15 { 16 backup as copy reuse 17 targetfile '/u01/app/oracle/product/11.2.0/db_1/dbs/orapwPROD1' auxiliary format 18 '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwPROD1' ; 19 } 20 executing Memory Script 21 22 Starting backup at 2019-02-25 13:43:32 23 allocated channel: ORA_DISK_1 24 channel ORA_DISK_1: SID=17 device type=DISK 25 Finished backup at 2019-02-25 13:43:33 26 27 contents of Memory Script: 28 { 29 backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/PROD1/control01.ctl'; 30 restore clone controlfile to '/u01/app/oracle/fast_recovery_area/PROD1/control02.ctl' from 31 '/u01/app/oracle/oradata/PROD1/control01.ctl'; 32 } 33 executing Memory Script 34 35 Starting backup at 2019-02-25 13:43:33 36 using channel ORA_DISK_1 37 channel ORA_DISK_1: starting datafile copy 38 copying standby control file 39 output file name=/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_PROD1.f tag=TAG20190225T134333 RECID=2 STAMP=1001166214 40 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 41 Finished backup at 2019-02-25 13:43:36 42 43 Starting restore at 2019-02-25 13:43:36 44 using channel ORA_AUX_DISK_1 45 46 channel ORA_AUX_DISK_1: copied control file copy 47 Finished restore at 2019-02-25 13:43:37 48 49 contents of Memory Script: 50 { 51 sql clone 'alter database mount standby database'; 52 } 53 executing Memory Script 54 55 sql statement: alter database mount standby database 56 57 contents of Memory Script: 58 { 59 set newname for tempfile 1 to 60 "/u01/app/oracle/oradata/PROD1/temp01.dbf"; 61 switch clone tempfile all; 62 set newname for datafile 1 to 63 "/u01/app/oracle/oradata/PROD1/system01.dbf"; 64 set newname for datafile 2 to 65 "/u01/app/oracle/oradata/PROD1/sysaux01.dbf"; 66 set newname for datafile 3 to 67 "/u01/app/oracle/oradata/PROD1/undotbs01.dbf"; 68 set newname for datafile 4 to 69 "/u01/app/oracle/oradata/PROD1/users01.dbf"; 70 set newname for datafile 5 to 71 "/u01/app/oracle/oradata/PROD1/example01.dbf"; 72 backup as copy reuse 73 datafile 1 auxiliary format 74 "/u01/app/oracle/oradata/PROD1/system01.dbf" datafile 75 2 auxiliary format 76 "/u01/app/oracle/oradata/PROD1/sysaux01.dbf" datafile 77 3 auxiliary format 78 "/u01/app/oracle/oradata/PROD1/undotbs01.dbf" datafile 79 4 auxiliary format 80 "/u01/app/oracle/oradata/PROD1/users01.dbf" datafile 81 5 auxiliary format 82 "/u01/app/oracle/oradata/PROD1/example01.dbf" ; 83 sql 'alter system archive log current'; 84 } 85 executing Memory Script 86 87 executing command: SET NEWNAME 88 89 renamed tempfile 1 to /u01/app/oracle/oradata/PROD1/temp01.dbf in control file 90 91 executing command: SET NEWNAME 92 93 executing command: SET NEWNAME 94 95 executing command: SET NEWNAME 96 97 executing command: SET NEWNAME 98 99 executing command: SET NEWNAME 100 101 Starting backup at 2019-02-25 13:43:43 102 using channel ORA_DISK_1 103 channel ORA_DISK_1: starting datafile copy 104 input datafile file number=00001 name=/u01/app/oracle/oradata/PROD1/system01.dbf 105 output file name=/u01/app/oracle/oradata/PROD1/system01.dbf tag=TAG20190225T134343 106 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45 107 channel ORA_DISK_1: starting datafile copy 108 input datafile file number=00002 name=/u01/app/oracle/oradata/PROD1/sysaux01.dbf 109 output file name=/u01/app/oracle/oradata/PROD1/sysaux01.dbf tag=TAG20190225T134343 110 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25 111 channel ORA_DISK_1: starting datafile copy 112 input datafile file number=00005 name=/u01/app/oracle/oradata/PROD1/example01.dbf 113 output file name=/u01/app/oracle/oradata/PROD1/example01.dbf tag=TAG20190225T134343 114 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15 115 channel ORA_DISK_1: starting datafile copy 116 input datafile file number=00003 name=/u01/app/oracle/oradata/PROD1/undotbs01.dbf 117 output file name=/u01/app/oracle/oradata/PROD1/undotbs01.dbf tag=TAG20190225T134343 118 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07 119 channel ORA_DISK_1: starting datafile copy 120 input datafile file number=00004 name=/u01/app/oracle/oradata/PROD1/users01.dbf 121 output file name=/u01/app/oracle/oradata/PROD1/users01.dbf tag=TAG20190225T134343 122 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 123 Finished backup at 2019-02-25 13:45:16 124 125 sql statement: alter system archive log current 126 127 contents of Memory Script: 128 { 129 switch clone datafile all; 130 } 131 executing Memory Script 132 133 datafile 1 switched to datafile copy 134 input datafile copy RECID=2 STAMP=1001167339 file name=/u01/app/oracle/oradata/PROD1/system01.dbf 135 datafile 2 switched to datafile copy 136 input datafile copy RECID=3 STAMP=1001167339 file name=/u01/app/oracle/oradata/PROD1/sysaux01.dbf 137 datafile 3 switched to datafile copy 138 input datafile copy RECID=4 STAMP=1001167339 file name=/u01/app/oracle/oradata/PROD1/undotbs01.dbf 139 datafile 4 switched to datafile copy 140 input datafile copy RECID=5 STAMP=1001167339 file name=/u01/app/oracle/oradata/PROD1/users01.dbf 141 datafile 5 switched to datafile copy 142 input datafile copy RECID=6 STAMP=1001167339 file name=/u01/app/oracle/oradata/PROD1/example01.dbf