RAC+DG高可用数据容灾方案

 

一、       方案背景

目前主库运行环境是单实例oracle 11.2.0.1,该版本比较低,BUG较多,无数据库容灾环境;另外存在一套2节点的RAC数据库服务器,数据库版本是11.2.0.4,该版本稳定可靠,并且硬件配置满足数据库运行需求。为了提高数据库的稳定性,计划将单实例数据库迁移升级到RAC集群数据库,DB版本由11.2.0.1升级至11.2.0.4,并且为了不影响业务的正常运作,减少停机时间,计划用goldengate进行在线迁移(本案暂不做介绍),待迁移完成后,重新部署RAC+DG高可用容灾环境,下面主要介绍RAC+DG高可用容灾方案的实施

 

二、       方案架构

       

 

三、       方案实施

1)     环境介绍:

OS :  Linux部署 

主库数据库版本:11.2.0.3.0 

两个节点的RAC 

节点一:192.168.15.26 

节点二:192.168.15.27

 

standby 数据库版本:  11.2.0.3.0      IP 192.168.15.9

备库只需安装了数据库软件  无须建库

注意:由于目前没有实际环境的具体IP,路径等信息,固该方案以示例形式展示,IP,路径等信息虚构。

 

2)     实施步骤:

2.1  192.168.15.9 这台服务器上安装11.2.0.3数据库软件,不多介绍。

2.2  修改RAC主库参数

参数11g官方手册 book list --DAT--Data Guard Concepts and Administration--3.1 Preparing the Primary Database for Standby Database Creation--3.1.4  中的例子中看到要在主库参数文件里面应该有的的参数(如果没有要添加),如下所示:

DB_NAME=chicago                        #主库的数据库名  
DB_UNIQUE_NAME=chicago                #
主库的数据库名备库 也有属于自己的唯一数据库名
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'        #
注意括号里主备库的位置  
CONTROL_FILES='/arch1/chicago/control1.ctl', '/arch2/chicago/control2.ctl'     

#这个参数主库不需要改,备库要改成自己存在的路径 

LOG_ARCHIVE_DEST_1=              #这个参数是制定本地(主库)归档日志文件的位置
 'LOCATION=/arch1/chicago/ 
 VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
 DB_UNIQUE_NAME=chicago'      #
这里是备库的数据库唯一名 
LOG_ARCHIVE_DEST_2=            #
这个参数是说是作为主库的这一方要传递联机在线日志到数据库唯一名为boston的备库。
 'SERVICE=boston ASYNC          #
异步传输
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 
  DB_UNIQUE_NAME=boston'        #
此处填写备库数据库名,
LOG_ARCHIVE_DEST_STATE_1=ENABLE    #
开启传输日志的服务  
LOG_ARCHIVE_DEST_STATE_2=ENABLE    
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE  #
远程登录口令文件用于验证管理用户或重做传输会话时,必须设置成exclusiveshared
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc      #
设置归档日志文件的格式

FAL_SERVER=boston                    #此处是填写备库的数据库名,该参数只是作为standby数据库时才有用

DB_FILE_NAME_CONVERT= '/backup/','+data/jlprojct/datafile/'    #该参数是个静态参数,其作用是在主库执行duplicate时的recovere过程根据主库的数据文件位置转换成这里指定的备库合适的位置,经测试是根据备库的这个参数转变,和主库没有关系,也就是说在主库执行duplicate会根据备库的这个参数指定的位置在备库产生数据文件。如果你在主库添加一个新的数据文件,你必须在备库相应位置建立相应的数据文件。
LOG_FILE_NAME_CONVERT=  #
类似于上一个参数,注意修改这个参数时,如果你的主库的日志文件有若干个不同路径,你都要写进来,
 '/arch1/boston/','/arch1/chicago/','/arch2/boston/','/arch2/chicago/' 

STANDBY_FILE_MANAGEMENT=AUTO    #这个参数是说当你设置成auto后,你在主库添加或删除数据文件,会自动在备库做相应的操作,要注意不要覆写已经存在的数据文件。别起一样的名。

 
如果要求主数据库不能停机(也就是不能重启的话),那么你可以通过以下这些命令修改主库的参数。修改完之后create pfile.ora    ='/backup/pfile.ora from spfile='/Oracle/product/11.2.3/dbs/initJLPROJCT1.ora';

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='location=+arch/jlprojct/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=JLPROJCT';

 
System altered.

 

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=JLPROJCT3  ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=JLPROJCT3';

 
System altered.

 
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile;

 
System altered.

 
SQL>  ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;

 
System altered.

 
SQL>  ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=spfile;

 
System altered.

 
SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile;
    #静态参数,不重启,不起作用 ,所以不让重启可以不改它。 

 
System altered.

 
SQL> ALTER SYSTEM SET FAL_CLIENT = JLPROJCT SCOPE=SPFILE;       # fal_client也是设置本身,fal_server是对方 
 
System altered.

 
SQL> ALTER SYSTEM SET FAL_SERVER = JLPROJCT3 SCOPE=SPFILE;

 
System altered.

 
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=SPFILE;       


System altered.

 

SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/backup/'+data/jlprojct/datafile/' scope =spfile;    #静态参数,不重启,不起作用 ,所以不让重启可以不改它。 


System altered.

 

SQL> ALTER SYSTEM SET  LOG_FILE_NAME_CONVERT='+DATA/jlprojct/onlinelog/','/backup/','+ARCH/jlprojct/onlinelog/','/backup/'scope =spfile;                          #静态参数,不重启,不起作用 ,所以不让重启可以不改它。 

 
System altered.

 

2.3  修改主库的监听和tnsname.ora 文件

1,主库监听listener.ora文件 添加 (如果有就不修改)

SID_LIST_LISTENER=

  (SID_LIST=

    (SID_DESC=

      (GLOBAL_DBNAME=JLPROJCT)

      (ORACLE_HOME=/oracle/product/11.2.3)

      (SID_NAME=JLPROJCT1)))

 

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.26)(PORT = 1521))           

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

    )

  ) 
 
2.
主库tnsname.ora 添加备库的相关信息。

JLPROJCT3 =      #备库的相关信息

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.9)(PORT = 1521))

    (CONNECT_DATA = 

      (SERVER = DEDICATED)

      (SERVICE_NAME = JLPROJCT3)

  (INSTANCE_NAME = JLPROJCT3)

    )

  )


db26 =                  #
主库相关信息  执行duplicate之前 rman 同时连接主库和备库,连接主库时,会用到这个连接字符串。

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.26)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = JLPROJCT)

 

2.4  传输参数,监听等文件

在主库用scp listener.ora  tnsname.ora initJLPROJCT1.orapfile.ora  传给备库 然后进行相应的修改(参数文件不需要修改内容,但是要改名 和备库实例名相对应 [oracle@java3 dbs]$ mv orapwJLPROJCT orapwJLPROJCT3 

 

 [oracle@rac1 ~]$ scp listener.ora tnsnames.ora initJLPROJCT1.ora  oracle@192.168.15.:`pwd`;      #冒号后面的pwd 意思是说要把文件传到备库的当前路径下(也就是此时在主机上 pwd 显示的路径)

把监听的信息改成备库的,tnaname.ora添加主库的相关信息。

 

1.备库监听listener.ora 内容如下:

SID_LIST_LISTENER=

  (SID_LIST=

    (SID_DESC=

      (GLOBAL_DBNAME=JLPROJCT3)

      (ORACLE_HOME=/opt/oracle/product/11.2.0/dbhome_1)

      (SID_NAME=JLPROJCT3)))

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.15.9)(PORT = 1521))              #主机IP

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

    )

  )

ADR_BASE_LISTENER = /opt/oracle

 

2.备库tnsname.ora