
作者 | kf_dbd
来源 | 咖啡逗不逗(ID: kf_dbd)
转载请联系授权 | (微信ID:xh870545795)
大家好,我是 kf_dbd,很高兴又和大家见面了,今天分享一个RAC到单机的DG环境搭建(11.2.0.4.0)过程。本文首发于微信公众号【咖啡逗不逗】,欢迎点击上方蓝字关注我吧!本期主要介绍RAC和单机备库的操作设置过程,如果大家有兴趣,需提前准备一套RAC环境,正好公司最近有这个要求,因此就在这里写一下大概的步骤操作,仅供大家参考,如有错误还请大家提出指证!
1.配之前的准备工作
需要准备一台单机备库环境,要求是最好和主库RAC相同版本的操作系统,并且空间大小可以容纳主库所有数据,然后搭建单机环境,注意安装完成数据库软件(数据库版本相同)即可,无需dbca建库。本篇文章不介绍单机及RAC的搭建过程。
2.主库RAC及单机备库配置/etc/hosts
[root@djdb1 ~]# cat etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain610.5.0.53 djdb110.5.0.55 djdb210.5.0.54 djdb1-vip10.5.0.56 djdb2-vip10.5.0.61 djdb-scan192.168.1.53 djdb1-priv192.168.1.55 djdb2-priv10.5.0.70 xh-duojin-dg
10.5.0.70 xh-duojin-dg 为添加的备库地址
3.主库RAC开启强制日志
SQL> alter database force logging;Database altered.SQL> select force_logging from v$database;FORCE_------YES
4.拷贝密码文件
[oracle@djdb1 dbs]$ scp orapwDJCRM1 10.5.0.55:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwDJCRM2[oracle@xh-duojin-dg dbs]$ scp orapwDJCRM1 10.5.0.70:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwDJCRMdg
将RAC第一个节点的密码文件拷贝到第二个节点,将RAC第一个节点的密码文件拷贝到远程备库的节点。
5.主库创建standby log
SQL> select THREAD#, GROUP#, BYTES/1024/1024 M from v$log;--四组THREAD# GROUP# M---------- ---------- ----------1 1 2001 2 2002 3 2002 4 200SQL> col member for a50set lines 100set pages 100SQL>select * from v$logfile order by 1;GROUP# STATUS TYPE MEMBER IS_---------- ------- ------- -------------------------------------------------- ---1 ONLINE +DATA/DJCRM/onlinelog/group_1.261.1021899417 NO2 ONLINE +DATA/DJCRM/onlinelog/group_2.262.1021899417 NO3 ONLINE +DATA/DJCRM/onlinelog/group_3.265.1021899501 NO4 ONLINE +DATA/DJCRM/onlinelog/group_4.266.1021899503 NOSQL> alter database add standby logfile thread 1 group 20 size 200m,group 21 size 200m,group 22 size 200m;---主库standby日志一般比数据库日志多两组SQL> alter database add standby logfile thread 2 group 30 size 200m,group 31 size 200m,group 32 size 200m;SQL> select THREAD#, GROUP#, BYTES/1024/1024 M from v$standby_log;--六组THREAD# GROUP# M---------- ---------- ----------1 20 2001 21 2001 22 2002 30 2002 31 2002 32 200
主库standby日志一般比数据库日志多两组
6.主备库配置监听环境listener.ora
rac节点1--注意grid用户
$GRID_HOME/network/admin/listener.oraSID_LIST_LISTENER =(SID_LIST =(SID_DESC = (GLOBAL_DBNAME = djcrm)(SID_NAME = djcrm1)(ORACLE_HOME = u01/app/oracle/product/11.2.0/db_1)))$ lsnrctl reload
rac节点2--注意grid用户
$GRID_HOME/network/admin/listener.oraSID_LIST_LISTENER =(SID_LIST =(SID_DESC = (GLOBAL_DBNAME = djcrm)(SID_NAME = djcrm2)(ORACLE_HOME = u01/app/oracle/product/11.2.0/db_1)))$ lsnrctl reload
单机备库
$ORACLE_HOME/network/admin/listener.oraSID_LIST_LISTENER =(SID_LIST =(SID_DESC = (GLOBAL_DBNAME = djcrmdg)(SID_NAME = djcrmdg)(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)))$ lsnrctl reload
7.主备库配置tns
(tns名字与下面第8、9步参数一致)(oracle用户)
vi $ORACLE_HOME/network/admin/tnsnames.ora##########scan-ip###########
DJCRM_SYN = --(主)(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = djdb-scan)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = djcrm)))
DJCRMDG_SYN =--(备)(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = xh-duojin-dg)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = djcrmdg)))
$ tnsping DJCRMDG_SYN
$ tnsping DJCRM_SYN
8.主库修改参数
SQL> alter system set fal_client='DJCRM_SYN' scope=both;SQL> alter system set fal_server='DJCRMDG_SYN' scope=both;SQL> alter system set log_archive_config='dg_config=(djcrm,djcrmdg)' scope=both;SQL> alter system set log_archive_dest_2='service=DJCRMDG_SYN valid_for=(online_logfiles, primary_role) LGWR ASYNC NOAFFIRM delay=0 reopen=10 db_unique_name=djcrmdg' scope=both;SQL> alter system set standby_file_management=auto scope=both;SQL> alter system set db_file_name_convert='/u01/app/oracle/oradata','+DATA', '/u01/app/oracle/oradata','+ARCH' scope=spfile;SQL> alter system set log_file_name_convert='/u01/app/oracle/oradata','+DATA', '/u01/app/oracle/oradata','+ARCH' scope=spfile;SQL> alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;SQL> show parameter fal_client...........
9.主库编辑pfile文件
SQL> create pfile='/tmp/initIMSI.ora' from spfile;$ vi tmp/initIMSI.ora*.audit_file_dest='/u01/app/oracle/admin/djcrmdg/adump'*.audit_trail='db'*.cluster_database=false*.compatible='11.2.0.4.0'*.control_files='/u01/app/oracle/oradata/controlfile/control01.ctl'*.db_block_size=8192*.db_create_file_dest='/u01/app/oracle/oradata'*.db_file_name_convert='+DATA','/u01/app/oracle/oradata','+ARCH','/u01/app/oracle/oradata'*.db_name='djcrm'*.db_unique_name='djcrmdg'*.diagnostic_dest='/u01/app/oracle'*.dispatchers='(PROTOCOL=TCP) (SERVICE=djcrmXDB)'*.fal_client='DJCRMDG_SYN'*.fal_server='DJCRM_SYN'djcrmdg.instance_number=1*.log_archive_config='dg_config=(djcrmdg,djcrm)'*.log_archive_dest_1='LOCATION=/u01/app/oracle/arch'*.log_archive_dest_2='service=DJCRM_SYN valid_for=(online_logfiles, primary_role) LGWR ASYNC NOAFFIRM delay=0 reopen=10 db_unique_name=djcrm'*.log_archive_format='%t_%s_%r.dbf'*.log_file_name_convert='+DATA','/u01/app/oracle/oradata','+ARCH','/u01/app/oracle/oradata'*.memory_target=85899345920*.open_cursors=30000*.processes=5000#*.remote_listener='db-scan:1521'*.remote_login_passwordfile='EXCLUSIVE'*.sessions=5505*.standby_file_management='AUTO'djcrmdg.thread=1*.undo_management='AUTO'djcrmdg.undo_tablespace='UNDOTBS3'
将主库修改过的pfile文件传到备库(注意权限)
$ scp /tmp/initIMSI.ora xh-duojin-dg:/tmp/initIMSI.ora
10.备库创建目录赋予权限
mkdir -p u01/app/oracle/admin/djcrmdg/adumpmkdir -p u01/app/oracle/{arch,oradata}mkdir -p u01/app/oracle/oradata/controlfilemkdir -p u01/app/oracle/oradata/djcrm/onlinelog/mkdir -p u01/app/oracle/oradata/djcrm/datafile/mkdir -p u01/app/oracle/oradata/djcrm/tempfile/chown -R oracle:oinstall u01/app/oracle/archchown -R oracle:oinstall u01/app/oracle/oradatachown -R oracle:oinstall u01/app/oracle/admin
11.创建恢复备库
备库用传输的pfile启动到nomount状态
SQL> startup nomount pfile=/tmp/initIMSI.ora
主库远程恢复备库
$ rman target sys/oracle123@DJCRM_SYN auxiliary sys/oracle123@DJCRMDG_SYNrun { allocate channel prmy1 type disk;allocate auxiliary channel stby1 type disk;duplicate target database for standby from active database nofilenamecheck dorecover;}
12.备库应用日志
SQL> alter database open;SQL> recover managed standby database using current logfile disconnect;
SQL> alter database recover managed standby database cancel;--取消应用
13.查看MRP、FRS进程状态
SQL> SELECT PROCESS,STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS FROM V$MANAGED_STANDBY order by 1,3,4;PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS--------- ------------ ---------- ---------- ---------- ----------ARCH CONNECTED 0 0 0 0ARCH CONNECTED 0 0 0 0ARCH CONNECTED 0 0 0 0ARCH CLOSING 2 611 4096 420MRP0 APPLYING_LOG 2 612 117 4194304RFS IDLE 0 0 0 0RFS IDLE 0 0 0 0RFS IDLE 0 0 0 0RFS IDLE 0 0 0 0RFS IDLE 1 1099 666 5RFS IDLE 2 612 119 1
MRP进程在应用归档的时候处于applying_log状态,应用完成后处于wait_for_log状态。RFS进程在应用归档的时候处于waiting状态,应用完成后处于idle状态。
14.查看归档应用情况
SQL> select thread#,sequence#,applied from v$archived_log order by 1,2;SEQUENCE# APPLIED---------- ---------609 NO610 YES1097 YES1098 YES611 IN-MEMORY
15.主备库配置删除归档策略
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
16.测试数据同步
主库创建测试表创建表空间SQL> create tablespace test_tbs datafile '+DATA/djcrm/datafile/test01.dbf' size 50m autoextend off;创建用户SQL> create user test identified by test default tablespace test_tbs account unlock;给用户赋权SQL> grant dba,resource,connect to test;连接用户SQL> conn test/test创建表SQL> create table test_tb (id number(9),name varchar2(20));test_tb表插入数据SQL> insert into test_tb values(1,'test');提交SQL> commit;主库查询测试表SQL> select * from test_tb;ID NAME---------- ----------------------------------------1 test备库查询测试表SQL> select * from test.test_tb;ID NAME---------- ----------------------------------------1 test
至此RAC-单节点的DG环境算是搭建完成了,以上步骤为小编在搭建公司DG环境中具体的操作步骤,搭建过程也不是一帆风顺,完成后整理此文档供大家参考,如有错误请联系小编,大家一起学习,写作不易,希望大家点个关注。




