一、环境
database | db_unique_name | net service name | SID | os version | DB version |
primary | jgsb | jg_pd | jgsb | oracle linux 6.7 x64 | 11.2.0.4 |
physical standby | jgsbdg | jg_st | jgsb | centOS 6.5 x64 | 11.2.0.4 |
二、安装步骤
1、主库设置为 force logging 模式
SQL> alter database force logging;
--验证:
SQL> select force_logging from v$database;
2、主库添加standby redo日志文件
select group#,thread#,members,status,bytes/1024/1024 m from v$log;
select group#,type,member from v$logfile order by 2;
添加规则:大小和 online redo 相同,比 online redo group 多一组。
alter database add standby logfile thread 1 group 21('+DATA') size 300m;
alter database add standby logfile thread 1 group 22('+DATA') size 300m;
alter database add standby logfile thread 1 group 23('+DATA') size 300m;
alter database add standby logfile thread 1 group 24('+DATA') size 300m;
alter database add standby logfile thread 1 group 25('+DATA') size 300m;
alter database add standby logfile thread 1 group 26('+DATA') size 300m;
alter database add standby logfile thread 1 group 27('+DATA') size 300m;
alter database add standby logfile thread 1 group 28('+DATA') size 300m;
alter database add standby logfile thread 2 group 31('+DATA') size 300m;
alter database add standby logfile thread 2 group 32('+DATA') size 300m;
alter database add standby logfile thread 2 group 33('+DATA') size 300m;
alter database add standby logfile thread 2 group 34('+DATA') size 300m;
alter database add standby logfile thread 2 group 35('+DATA') size 300m;
alter database add standby logfile thread 2 group 36('+DATA') size 300m;
alter database add standby logfile thread 2 group 37('+DATA') size 300m;
alter database add standby logfile thread 2 group 38('+DATA') size 300m;
3、添加监听及网络别名
3.1配置tns文件,主库两个节点及备库均配置以下内容。
修改 $ORACLE_HOME/network/admin/tnsnames.ora
JG_PD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.136.3.86)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.136.3.87)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jgsb)
)
)
#上面的ip地址为rac的两个vip地址
JG_ST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.136.3.83)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = jgsb)(UR=A)
)
)
分别在主备库用测试tnsping jg_pd ,tnsping jg_st是否能通,如果不行可以考虑使用netmgr工具配置。
3.2配置listen文件
修改 $ORACLE_HOME/network/admin/listener.ora,需要注意的是主库需要使用grid用户cd到该目录,而备用库则使用oracle用户cd到该目录进行修改。
主库1:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = jgsb)
(ORACLE_HOME = /oracle/product/11.2)
(SID_NAME = jgsb1)
)
)
主库2:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = jgsb)
(ORACLE_HOME = /oracle/product/11.2)
(SID_NAME = jgsb2)
)
)
#注意以上ORACLE_HOME路径为oracle用户的ORACLE_HOME位置,而非grid用户的。
备库:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = jgsbdg)
(ORACLE_HOME = /oracle/app)
(SID_NAME = jgsb)
)
)
#以上配置修改完成后,需要lsnrctl stop ,lsnrctl start,rac数据库需要使用grid用户执行命令。
4、修改主库参数文件:
alter system set db_unique_name='jgsb' scope=spfile sid='*'; #该参数需要重启生效
alter system set log_archive_config='dg_config=(jgsb,jgsbdg)' scope=both sid='*';
alter system set log_archive_dest_1='location=+DATA valid_for=(all_logfiles,all_roles) db_unique_name=jgsb' scope=both sid='*';
alter system set log_archive_dest_2='service=jg_st valid_for=(online_logfiles,primary_role) db_unique_name=jgsbdg' 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='jg_st' scope=both sid='*';
alter system set db_file_name_convert='+data/jgsb/','/oradata/JGSB/','+oradata/jgsb/','/oradata/JGSB/' scope=spfile sid='*'; #该参数需要重启生效
alter system set log_file_name_convert='+data/jgsb/','/oradata/JGSB/','+oradata/jgsb/','/oradata/JGSB/' scope=spfile sid='*'; #该参数需要重启生效
#说明一下db_file_name_convert参数用于配置主库与备库进行数据文件路径转换的映射关系,由于我这里主库有的数据diskgroup 有两个,所以这里需要分配配置。另外需要注意,以上路径必须真实存在且属主权限正确。log_file_name_convert参数类似。
#db_file_name_convert与log_file_name_convert参数配置后生成文件效果:
'+data/jgsb/'------'/oradata/JGSB/'配置对应实际路径如下:
'+data/jgsb/datafile/ts_gioidata.7499.927058697'-----'/oradata/JGSB/datafile/ts_gioidata.7499.927058697'
'+data/jgsb/'------'/oradata/JGSB/'配置对应实际路径如下:
'+DATA/jgsb/onlinelog/group_24.4774.935574635'-----'/oradata/JGSB/onlinelog/group_24.4774.935574635’
5、修改备库参数文件:
alter system set db_unique_name='jgsbdg' scope=spfile ; #该参数需要重启生效
alter system set log_archive_config='dg_config=(jgsb,jgsbdg)' scope=spfile ;
alter system set log_archive_dest_1='location=/oradata/arch valid_for=(all_logfiles,all_roles) db_unique_name=jgsbdg' scope=spfile ;
alter system set log_archive_dest_2='service=jg_pd valid_for=(online_logfiles,primary_role) db_unique_name=jgsb' 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='manual' scope=spfile ;
alter system set fal_server='jg_pd' scope=spfile ;
alter system set db_file_name_convert='+data/jgsb/','/oradata/JGSB/datafile/','+oradata/jgsb/','/oradata/JGSB/datafile/' scope=spfile ; #该参数需要重启生效
alter system set log_file_name_convert='+data/jgsb/','/oradata/JGSB/onlinelog/','+oradata/jgsb/','/oradata/JGSB/onlinelog/' scope=spfile ;#该参数需要重启生效
备库重启后,需要修改service_names,命令如下:
alter system set service_names='jgsb' scope=both ; #与tnsname中服务名对应
6、传输口令文件到备用库
scp orapwjgsb1 root@192.136.3.83:/oracle/app/dbs/
7、rman duplicate 复制
将备用库启动到nomount
rman target sys/system@jg_pd auxiliary sys/system@jg_st
duplicate target database for standby from active database nofilenamecheck; #文件目录相同时使用该命令
duplicate target database for standby from active database dorecover; #文件目录不相同时使用该命令
#成功完成duplicat后,输出日志如下:
media recovery complete, elapsed time: 00:00:03
Finished recover at 14-FEB-17
Finished Duplicate Db at 14-FEB-17
8、备库open以及启动mrp进程
alter database open;
并执行以命令:
alter system set standby_file_management='auto' scope=both ; #用于配置备库文件自动管理
启动mrp命令:
alter database recover managed standby database disconnect from session; 非实时应用,日志传输到备用库后不会立即应用日志。
alter database recover managed standby database using current logfile disconnect; 实时应用,日志传输到备用库后会实时读取日志中的信息并解析。
三、验证及常用命令
1、验证
验证的方法有许多,最简单直观的是在主库新建一个测试表,然后在备用库查看是否有生成。
也可以通过查看v$archived_log 的applied来查看日志应用情况,方法如下:
查看主备用日志应用情况,applied 为yes为代表已经应用该日志,inmemory 代表正在应用。
select THREAD#,sequence#,applied from v$archived_log where THREAD#='1' order by 1,2;
select THREAD#,sequence#,applied from v$archived_log where THREAD#='2' order by 1,2;
又或者通过在主库执行以下sql语句,若有错误则会在error中给出错误信息
col error for a10
col dest_name for a20
SQL> select DEST_NAME,STATUS,PROCESS,ERROR,TRANSMIT_MODE from v$archive_dest WHERE TARGET='STANDBY';
DEST_NAME STATUS PROCESS ERROR TRANSMIT_MOD
-------------------- --------- ---------- ---------- ------------
LOG_ARCHIVE_DEST_2 VALID LGWR ASYNCHRONOUS
2、常用命令
取消mrp
alter database recover managed standby database cancel;
启动mrp
alter database recover managed standby database disconnect from session; 非实时应用
alter database recover managed standby database using current logfile disconnect; 实时应用
查看gap
select * from V$ARCHIVE_GAP;
查看dg日志
select message from v$dataguard_status;
查询数据库保护模式
select database_role,protection_mode,protection_level from v$database;