基础信息
1、 搭建环境
操作系统:Centos 7.4
数据库版本:Oracle 11g
2、角色规划
角色 db_name hostname 数据库版本 归档目录 db_unique_name
primary orcl rac01 11.2.0.4.0 +log orcl
primary orcl rac02 11.2.0.4.0 +log orcl
standby orcl racdg 11.2.0.4.0 +log orcldb
注:主库和备库的db_name必须一致
3、 IP规划
##primary主库
192.168.10.70 rac01
192.168.10.71 rac02
192.168.10.73 rac01-vip
192.168.10.74 rac02-vip
1.1.2.1 rac01-priv
1.1.2.2 rac02-priv
192.168.10.72 rac-scan
##standby 备库
192.168.10.66 racdg
实施步骤
1、 设置归档模式
[oracle@rac01 ~]$ srvctl stop database -d orcl -o immediate
—关库
[oracle@rac01 ~]$ srvctl start database -d orcl -o mount
—启动到mount
SQL> alter database archivelog;
SQL> alter database open;
—主库两个节点都操作一遍
SQL> alter system set db_recovery_file_dest_size=150G;
SQL> alter system set db_recovery_file_dest=’+LOG’;
SQL> Alter system switch logfile
SQL> select recid, name, first_time from v$archived_log;
—设置归档日志的目录,及其上限大小
注:DG环境下,决定归档目录的参数不是db_recovery_file_dest,而是log_archive_dest_1
2、开启force logging模式
SQL> alter database force logging;
SQL> select force_logging from v$database;
注:该模式下,哪怕sql语句注释不产生redo日志,数据库也会强制生成日志
3、主库添加standby日志组
alter database add standby logfile thread 1 ‘+DATA’ size 1024m;
alter database add standby logfile thread 2 ‘+DATA’ size 1024m;
–主库两个节点各执行6次
注:需要比现有的redo log组数量多一个,并且大于或等于现有redo log大小
4、编辑主库及备库的tnsname.ora
注:考虑到grid用户存在,分别在oracle,grid用户的$ORACLE_HOME/network/admin目录下,编辑tnsname.ora文件
追加如下内容
primary =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.73)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.74)(PORT = 1521))
) --此处的两个IP分别为两个节点的VIP
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
standby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.10.66)(PORT = 1521))
) --此处为dg备库的真实IP
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)(UR=A)
)
)
TAR =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.73)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
AUX =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.66)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcldb)
)
)
注:TAR和AUX用于RMAN同步两个数据库的时候使用,不然会报错
5、修改监听文件
节点一
su – grid
cd $ORACLE_HOME/network/admin
追加如下内容
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2/db_1)
–ORACLE用户下的$ORACLE_HOME路径
(SID_NAME = orcl1)
)
)
节点二
su – grid
cd $ORACLE_HOME/network/admin
追加如下内容
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2/db_1)
–ORACLE下的$ORACLE_HOME路径
(SID_NAME = orcl2)
)
)
备库
su – oracle
cd $ORACLE_HOME/network/admin
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldg)
(ORACLE_HOME = /u01/app/oracle/product/11.2/db_1)
(SID_NAME = orcl)
)
)
注:由于备库也是用的ASM存储,存在grid用户,tnsping不通的时候,可以在grid下的监听文件中,也追加该参数
重启监听
主库
srvctl stop listener
srvctl start listener
备库
lsnrctl stop
lsnrctl start
6、修改参数文件
主库
alter system set db_unique_name=‘orcl’ scope=spfile sid=’*’; #该参数需要重启生效
alter system set log_archive_config=‘dg_config=(orcl,orcldg)’ scope=both sid=’*’;
alter system set log_archive_dest_1=‘location=+LOG valid_for=(all_logfiles,all_roles) db_unique_name=orcl’ scope=both sid=’*’;
注:此处的定义了归档文件的生成目录
alter system set
log_archive_dest_2=‘service=standby
valid_for=(online_logfiles,primary_role) db_unique_name=orcldg’ scope=both sid=’*’;
alter system set log_archive_dest_state_1=enable scope=both sid=’*’;
alter system set log_archive_dest_state_2=enable scope=both sid=’*’;
alter system set standby_file_management=‘auto’ scope=both sid=’*’;
alter system set fal_server=‘standby’ scope=both sid=’*’;
—重启数据库生效
备库
alter system set db_unique_name=‘orcldg’ scope=spfile ; #该参数需要重启生效
alter system set log_archive_config=‘dg_config=(orcl,orcldg)’ scope=spfile ;
alter system set log_archive_dest_1=‘location=+LOG valid_for=(all_logfiles,all_roles) db_unique_name=orcldg’ scope=spfile ;
注:此处的定义了归档文件的生成目录
alter system set log_archive_dest_2=‘service=primary valid_for=(online_logfiles,primary_role) db_unique_name=orcl’ scope=spfile ;
alter system set log_archive_dest_state_1=enable scope=spfile ;
alter system set log_archive_dest_state_2=enable scope=spfile ;
alter system set standby_file_management=‘auto’ scope=spfile ;
alter system set fal_server=‘primary’ scope=spfile ;
—重启数据库生效
7、传输密码文件到备库
scp /u01/app/oracle/product/11.2/db_1/dbs/orapworcl1 oracle@192.168.10.66:/u01/app/oracle/product/11.2/db_1/dbs
注:主备库的密码需要一致
8、备库启动到nomount
Startup nomount
9、启动复制传输
命令测试主备库之间的tns和监听是否配置正常
sqlplus sys/oracle@primary as sysdba
sqlplus sys/oracle@standby as sysdba
主库Oracle用户下
rman target sys/oracle@primary auxiliary sys/oracle@standby
duplicate target database for standby from active database nofilenamecheck;
10、备库开启实时应用
alter database recover managed standby database using current logfile disconnect;
实时应用,日志传输到备用库后会实时读取日志中的信息并解析。
注:数据库重启,需要使用该命令,重新开启实时同步
11、测试
主库创建测试表,观察备库是都会自动生成该表




