您当前的位置:首页 > 新闻资讯 > 产品动态 > 正文

【新东网技术大咖带您走进ADG】Oracle Active Data Guard(ADG)实现数据层读写分离

发布时间: 2016-12-30 14:53:39  
分享到:

 

/ 华西研发

 

 

 

 
专栏介绍

新东网自2001年成立以来,掌握大数据、云计算、通信、物联网及区块链等信息技术,拥有一支逾16年经验的强大IT团队。为沉淀企业技术实力,继续发挥行业优势,《东网快讯》特邀新东网技术大咖带您走进这些先进信息技术,揭秘新东网16年来的技术成果,每周五发布

 

环境准备
 

 

资源划分:

 

虚拟机

划分资源

IP_DB1192.168.1.10

12C/32G/1.2T硬盘

IP_DB2192.168.1.20

12C/32G/1.2T硬盘

 

系统结构

 

 

 

ADG介绍
 

 

容灾系统主要包括数据保护和应用切换两大方面,其中最为重要的是数据保护部分。除了要将这些数据存放在高可用的存储设备上之外,最重要的是这些关键数据应该在异地之间保持一致,以使灾难发生后,系统可以尽快恢复。下面是几种主要的数据保护技术。 

 

实现数据的异地复制,有软件方式和硬件方式两种途径。软件方式,是通过主机端软件来实现,如第三方软件或者数据库厂家提供的远程数据容灾工具来实现业务数据的远程复制。硬件方式,是基于智能存储系统的控制器的远程拷贝,可以在主、备存储系统之间通过硬件实现复制。 

 

在实际的容灾系统中,由于系统的环境不同,安全性要求不同以及采用的软硬件产品不同,数据复制过程中的工作机制也不尽相同。概括地讲,数据复制工作机制主要包括同步和异步两种。同步远程镜像(同步复制技术)是指通过远程镜像软件,将本地数据以完全同步的方式复制到异地,每一本地的I/O事务均需等待远程复制的完成确认信息,方予以释放。异步远程镜像(异步复制技术)保证在更新远程存储视图前完成向本地存储系统的基本I/O操作,而由本地存储系统提供给请求镜像主机的I/O操作完成确认信息,远程的数据复制以后台同步的方式进行。因为带宽等因素限制,本次容灾方案仅包括了异步复制的方式的讨论。

 

 ADG实现原理 

 

Oracle Active Data Guard 是当今保护企业核心资产(数据)的最有效解决方案,它能够使数据在 24x7 的基础上可用,而无论是否发生灾难或其它中断。 

 

Oracle Active Data Guard 是管理、监控和自动化软件的基础架构,它创建、维护和监控一个或多个备用数据库,以保护企业数据结构不受故障、灾难、错误和崩溃的影响。    

 

Oracle Active Data Guard 使备用数据库保持为与生产数据库在事务上一致的副本。这些备用数据库可能位于距生产数据中心数千公里的远程灾难恢复站点,或者可能位于同一城市、同一校园乃至同一建筑物内。当生产数据库由于计划中断或意外中断而变得不可用时,Oracle Active Data Guard 可以将任意备用数据库切换到生产角色,从而使与中断相关的停机时间减到最少,并防止任何数据丢失。  

 

作为 Oracle 数据库企业版的一个特性推出的 Oracle Active Data Guard 能够与其它的 Oracle 高可用性 (HA) 解决方案(如真正应用集群 (RAC) 和恢复管理器 (RMAN))结合使用,以提供业内前所未有的高水平数据保护和数据可用性。

 

Oracle Active Data Guard 包括一个生产数据库,也称为主数据库,以及一个或多个备用数据库,这些备用数据库是与主数据库在事务上一致的副本。Data Guard 利用重做数据保持这种事务一致性。当主数据库中发生事务时,则生成重做数据并将其写入本地重做日志文件中。通过 Oracle Active Data Guard,还将重做数据传输到备用站点上,并应用到备用数据库中,从而使备用数据库与主数据库保持同步。Oracle Active Data Guard 允许管理员选择将重做数据同步还是异步地发送到备用站点上。

 

备用数据库的底层技术是 Oracle Active Data Guard 重做应用(物理备用数据库)。物理备用数据库在磁盘上拥有和主数据库逐块相同的数据库结构,并且使用 Oracle 介质恢复进行更新。  

 

Oracle Active Data Guard 简化了主数据库和选定的备用数据库之间的转换和故障切换,从而减少了由计划停机和计划外故障所导致的总停机时间。

 

实现过程
 

 

实现前准备工作

 

a. 参数文件/etc/sysctl.conf中添加:

fs.file-max = 6815744

kernel.sem = 250 32000 100 128

kernel.shmmni = 4096

kernel.shmall = 1073741824

kernel.shmmax = 4398046511104

kernel.panic_on_oops = 1

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

net.ipv4.conf.all.rp_filter = 2

net.ipv4.conf.default.rp_filter = 2

fs.aio-max-nr = 1048576

net.ipv4.ip_local_port_range = 9000 65500

执行sysctl -p应用修改内核参数。

b. 在文件/etc/security/limits.conf末尾添加:

oracle   soft   nofile    1024

oracle   hard   nofile    65536

oracle   soft   nproc    16384

oracle   hard   nproc    16384

oracle   soft   stack    10240

oracle   hard   stack    32768

c. 修改oracle的环境变量,Oracle家目录/.bash_profile下添加一下变量:

export ORACLE_BASE=/home/oracle/app/oracle

export ORACLE_HOME=/home/oracle/app/oracle/datadb

export ORACLE_SID=prim

export PATH=$ORACLE_HOME/bin:$PATH

执行:source .bash_profile应用环境变量

d. 创建oracle用户和组:

Groupadd oinstall

Groupadd dba

Useradd -g oinstall -G dba oracle

 

开始安装数据库

 

1) Grid安装:

解压grid安装包,进入解压目录执行:./runInstaller,根据提示安装好grid

2) Database安装:

解压database安装包,进入解压目录执行:./runInstaller,根据提示安装好database并建好主库。

 

开始配置dg

 

a. 配置前准备:

主库:192.168.1.10

备库:192.168.1.20

主备在/etc/hosts添加:

192.168.1.10 primary.com primary

192.168.1.20 standby.com standby

主备的实例名:prim(环境变量里面的ORACLE_SID)

b. 主库启动force logging

c. 主库启动归档模式

d. 在主库添加standby redo logfile

添加主库redo个数+1standby redo logfile

查看主库redo个数:

SQL>select member from v$logfile;

添加standby redo logfile

SQL>Alter database add standby logfile '和主库redo路径一样' size 50M;

e. 分别在主备和备库配置监听并启动

f. 在备库创建必要目录

mkdir  -p  /home/oracle/app/oracle/oradata/

mkdir  -p  /home/oracle/app/oracle/fast_recovery_area/

mkdir  -p  /home/oracle/app/oracle/admin/prim/adump

g. 在主库创建pfile文件并修改怕file内容

*.db_unique_name='prim'

*.log_archive_config='dg_config=(prim,stan)'

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=prim'

*.log_archive_dest_2='service=stan valid_for=(online_logfiles,primary_role) lgwr sync affirm  db_unique_name=stan'

*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

*.standby_file_management='auto'

*.fal_server='stan'

h. 用新参数重启数据库

i. 将主库的口令文件copy到备库

j. 将主库的参数文件copy到备库并修改

*.db_unique_name='stan'

*.log_archive_config='dg_config=(prim,stan)'

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=stan'

*.log_archive_dest_2='service=prim valid_for=(online_logfiles,primary_role) lgwr sync affirm  db_unique_name=prim'

*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

*.standby_file_management='auto'

*.fal_server='stan'

k. spfile将备库启动到nomount状态

l. 开始建立dg备库

rman target sys/oracle auxiliary sys/oracle@stan

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

10、打开备库并启动apply

m. 打开备库并启动apply

duplicate 完成之后,备库是mount的。

SQL> alter database open;

SQL> alter pluggable database primpdb open;

备库:--启动real-time apply:

SQL> alter database recover managed standby database using current logfile disconnect from session;

 

 

应用
 

 

主库是事物库,平时操作默认都是使用主库,当需要查询大量数据或则数据导出备份时可以切换到备库(查询库)操作。(如:分查询库和事物库,应用通过spring拦截器拦截到查询操作,使用查询库,默认使用事物库)。

 

分享到:
地址:福建省福州市铜盘路软件大道89号软件园A区26号楼 电话:0591-83519233 传真:0591-87882335 E-mail:doone@doone.com.cn
版权所有 新东网科技有限公司 闽ICP备07052074号-1 闽公网安备 35010202001006号