暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 11g Active DataGuard(ADG)搭建配置过程

初七的学习笔记 2021-06-10
4930

ADG原理介绍

随着Oracle ADG的出现,Oracle在读写分离的支持上又进一步了,可以在延迟很少的情况下提供读,而且不会出现复制错误或者数据不一致的问题。

Active Dataguard Reader Farm架构至少存在以下优势:

(1)管理维护简单,DBA只要熟悉Dataguard的管理即可,无需再额外学习其他方面的新知识;

(2)Active Dataguard Reader Farm节点是灵活可扩展的,可以在线添加或者删除节点,并且可以线性扩展而不对生产系统造成影响

(3)可以真正做到实时查询,不会应为大事务造成同步阻塞,性能有保障

(4)没有数据类型的限制

(5)高可用性,节点的宕机都不会影响到数据库的可用性。

但是同时也需要注意:

(1)Active Dataguard是11g数据库单独的一个option,需要单独付费的

(2)无法在Active Dataguard Reader Farm节点单独创建索引进行查询优化

(3)在所有Active Dataguard Reader Farm节点上sql的执行计划最好保持一致

以上仅仅只是对Active Dataguard和Active Dataguard Reader Farm做一个简单的介绍,以下是读写分离的架构图,下面奉上搭建步骤

1.准备工作

  首先得准备两个能够PING通,并且装了Oracle软件且已经建库的Linux虚拟机,至少有一个虚拟机已经建好库,两个库SID尽量相同,这样会减少很多创建目录的麻烦,这里库的SID都是tms,linux严格区分大小写,所以SID的大小写得注意。

  我这里有两个名为rac1和rac2的CentOS虚拟机。

  rac1:192.168.87.130(主库) sid:tms

  rac2:192.168.87.131(备库) sid:tms

2.在主库做一些操作

 2.1强制force logging

 SQL> shutdown immediate 

 SQL> startup mount

 SQL> alter database force logging;    --修改数据库为强制记日志,这是必须的操作,主库的每一步操作都得记录到日志中去。  

 2.2开启主库的归档模式

 SQL> alter database archivelog;       --修改数据库为归档模式,因为dg是通过传送归档日志到备库然后应用来保证主备库一致的。  

 2.3创建standby redo log

 SQL> alter database add standby logfile group 4 ('/u01/app/oracle/oradata/tms/redo04.log') size 50m;

 SQL> alter database add standby logfile group 5 ('/u01/app/oracle/oradata/tms/redo05.log') size 50m;

 SQL> alter database add standby logfile group 6 ('/u01/app/oracle/oradata/tms/redo06.log') size 50m;

 SQL> alter database add standby logfile group 7 ('/u01/app/oracle/oradata/tms/redo07.log') size 50m;

  2.4创建pfile

 SQL> create pfile from spfile;         --这里创建pfile是为了做一些主库参数的配置,并且还得拷贝到备库再次修改成备库的配置。  

 SQL> shutdown immediate  

 2.5创建主备库归档目录

 [oracle@rac1 ~]$ cd $ORACLE_BASE/oradata/tms

 [oracle@rac1 tms]$ mkdir archivelog  --建立这个目录是为了存放主库的归档日志文件,并且这个目录会和其他数据文件等等一起拷贝到备库。  

 2.6在主备库同时创建静态监听listener和tnsname

 这里以主库为例,备库自行修改

 [oracle@rac1 admin]$ more listener.ora 

 SID_LIST_LISTENER =

  (SID_LIST=

   (SID_DESC=

    (SID_NAME = PLSExtProc)

    (ORACLE_HOME = u01/app/oracle/11.2.0/product/db)

    (PROGRAM = extproc)

   )

   (SID_DESC =

    (SID_NAME = tms)

    (ORACLE_HOME = u01/app/oracle/11.2.0/product/db)

   )

  )

 

 LISTENER =

   (DESCRIPTION_LIST =

     (DESCRIPTION =

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

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

     )

   )

 

 ADR_BASE_LISTENER = u01/app/oracle

 DIAG_ADR_ENABLED_LISTENER=OFF 

 INBOUND_CONNECT_TIMEOUT_LISTENER=0

 

 [oracle@rac1 admin]$ more tnsnames.ora 

 TMS_ST =

   (DESCRIPTION =

     (ADDRESS_LIST =

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

     )

     (CONNECT_DATA =

       (SERVICE_NAME = tms)

     )

   )

 

 TMS_PD =  

   (DESCRIPTION =  

     (ADDRESS_LIST =  

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

     )  

     (CONNECT_DATA =  

       (SERVICE_NAME = tms)  

     )  

   )  


 [oracle@rac1 admin]$ lsnrctl start    --启动监听

  2.7修改主库pfile文件

  [oracle@rac1 dbs]$ vi inittms.ora

 --添加如下内容,这个是为了搭建DG添加的配置参数,主备库是有区分的,请注意

 DB_UNIQUE_NAME=tms_pd  

 LOG_ARCHIVE_CONFIG='DG_CONFIG=(tms_pd,tms_st)'  

 LOG_ARCHIVE_DEST_1=  

  'LOCATION=/u01/app/oracle/oradata/tms/archivelog  

   VALID_FOR=(ALL_LOGFILES,ALL_ROLES)  

   DB_UNIQUE_NAME=tms_pd'  

 LOG_ARCHIVE_DEST_2=  

  'SERVICE=tms_st ASYNC  

   VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)  

   DB_UNIQUE_NAME=tms_st'  

 LOG_ARCHIVE_DEST_STATE_1=ENABLE  

 LOG_ARCHIVE_DEST_STATE_2=ENABLE  

 REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE  

 LOG_ARCHIVE_FORMAT=%t_%s_%r.arc  

 FAL_SERVER=tms_st  

 STANDBY_FILE_MANAGEMENT=AUTO

 LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/tms','/u01/app/oracle/oradata/tms'

 2.8用pfile启动主库,并创建spfile

 SQL> shutdown immediate

 SQL> startup nomount pfile='/u01/app/oracle/11.2.0/product/db/dbs/inittms.ora'

 SQL> create spfile from pfile;

  2.9创建主备库的备份目录

 主库

 [oracle@rac1 tms]$ mkdir u01/app/oracle/oradata/tms/backup

 备库

 [oracle@rac1 tms]$ mkdir /u01/app/oracle/oradata/tms/backup

  2.10将口令验证文件和pfile发送到备库

 [oracle@rac1 tms]$ scp orapwtms inittms.ora 192.168.87.131:$ORACLE_HOME/dbs

3.在主库做一些操作

 3.1在备库修改从主库拷贝来的pfile

 [oracle@rac2 dbs]$ vi inittms.ora

 --主备需要修改的部分已标红

 DB_UNIQUE_NAME=tms_st 

 LOG_ARCHIVE_CONFIG='DG_CONFIG=(tms_pd,tms_st)'  

 LOG_ARCHIVE_DEST_1=  

  'LOCATION=/u01/app/oracle/oradata/tms/archivelog  

   VALID_FOR=(ALL_LOGFILES,ALL_ROLES)  

   DB_UNIQUE_NAME=tms_st'  

 LOG_ARCHIVE_DEST_2=  

  'SERVICE=tms_st ASYNC  

   VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)  

   DB_UNIQUE_NAME=tms_pd'  

 LOG_ARCHIVE_DEST_STATE_1=ENABLE  

 LOG_ARCHIVE_DEST_STATE_2=ENABLE  

 REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE  

 LOG_ARCHIVE_FORMAT=%t_%s_%r.arc  

 FAL_SERVER=tms_pd  

 STANDBY_FILE_MANAGEMENT=AUTO

 LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/tms','/u01/app/oracle/oradata/tms'

  3.2启动备库到nomount

 SQL> startup nomount

 备注:此时若遇到ERROR:

 ORA-09925: Unable to create audit trail file

 Linux Error: 2: No such file or directory

 Additional information: 9925       

 原因是缺少目录

 *.audit_file_dest='/u01/app/oracle/admin/tms/adump'

 在/u01/app/oracle/admin/tms下创建adump,dpdump,pfile即可

  3.3传输主库的temp表空间到备库,并且启动主库

 [oracle@rac1 ~]$ cd $ORACLE_BASE/oradata/tms

 [oracle@rac1 tms]$ scp temp01.dbf 192.168.87.131:/$ORACLE_BASE/oradata/tms

 [oracle@rac1 tms]$ sqlplus / as sysdba

 SQL> startup force;

  3.4在备库开始使用RMAN进行ADG

 [oracle@rac2 ~]$ sqlplus / as sysdba

 SQL> startup nomount

 SQL> exit

 [oracle@rac2 ~]$ rman target sys/oracle@orcl_pd auxiliary sys/oracle@orcl_st

 RMAN> duplicate target database for standby from active database nofilenamecheck;

  3.5打开备库并开启apply service

 SQL> alter database open;

 SQL> select open_mode from v$database;  

      OPEN_MODE  

      --------------------  

      READ ONLY

 SQL> alter database recover managed standby database disconnect from session;

 4.验证

主库

SQL> create table test(id number(10),name varchar2(20));

SQL> insert into test values(1,'test1');

SQL> insert into test values(2,'test2');

SQL> commit;

SQL> alter system switch logfile;

备库

SQL> desc test;

SQL> select * from test;

5.查看备库启动的DG进程

SQL> select process,client_process,sequence#,status from v$managed_standby;

6.查看数据库的保护模式

SQL> select database_role,protection_mode,protection_level,open_mode from v$database;

7.查看DG的日志信息

SQL> select * from v$dataguard_status;


文章转载自初七的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论