数据库读写分离解决方案----oracle 11G ADG实施方案1.项目背景介绍1.1目的通过DG实现主库与备库同步,主库作为业务应用库,备库作为查询库,应用根据不同需求配置对应数据库;1.2测试环境在2台RedHat5.4上使用ORACLE 的DataGuard组件实现容灾。
设备配置(VMWare虚拟机环境)清单如下:2.Oracle DataGuard 介绍备用数据库(standby database)是ORACLE 推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份,可以实现快速切换与灾难性恢复。
STANDBY DATABASE的类型:有两种类型的STANDBY:物理STANDBY和逻辑STANDBY两种类型的工作原理可通过如下图来说明:physical standby提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。
它是可以直接应用REDO实现同步的。
l ogical standby则不是这样,在logical standby中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。
逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表,但其数据库用户相关对象均需要有主键。
✧本次实施将选择物理STANDBY(physical standby)方式●对主库的保护模式可以有以下三种模式:–Maximum protection (最高保护)–Maximum availability (最高可用性)–Maximum performance (最高性能)✧基于项目应用的特征及需求,本项目比较适合采用Maximum availability (最高可用性)模式实施。
3.Dataguard 实施前提条件和注意事项:●灾备环境中的所有节点必须安装相同的操作系统,尽可能令详细补丁也保持相同。
●灾备环境中的所有节点必须安装完全相同版本的Oracle数据库软件,包括版本号和发布号,比如必须都是Oracle 11.2.0.1●主库必须处于归档(ARCHIVELOG)模式。
●灾备环境中所有节点的硬件和操作系统架构必须相同●主库可以是单实例,也可以是RAC。
●主节点和备用节点之间的硬件配置可以不同,比如CPU数量,内存数量,存储的配置等等。
●配置灾备环境的数据库用户必须具有SYSDBA权限。
4.Oracle软件安装1.要实施DataGurad的前,需要在主机RedHat-Primary和备机RedHat-Standby上进行ORACLE软件的基础安装。
2.备机基础软件的安装有两种方式供选择:1)源始安装介质安装采用ORACLE数据库安装介质进行软件安装。
2)“克隆”主站源数据库分别对主站源数据库进行tar压缩并FTP/rcp至备机上,然后展开压缩文件。
通常出于便捷的原因,备机的Oracle初始建立可采用上述的第二种方式。
测试环境中直接对虚拟机进行了拷贝,因此相当于采用了第二种方式。
现场环境下,如果主节点不是RAC环境,也可以采用第二种方式。
4.1环境配置RedHat5-Primary (primary , IP 192.168.204.131)以下简称主库4.2系统硬件环境检查4.2.1检查内存相关项检查服务器的内存,可以通过下列命令:[root@localhost ~]# grep MemTotal /proc/meminfo另外与内存相关的swap 交换分区的设置也很重要,通常有下列的规则:实际内存建议swap 交换空间大小-------------- -----------------------------1G-2G 1.5 倍于内存2G-16G 与内存相同超过16G 设置为16G 即可查看当前服务器swap 交换分区大小,可以通过下列命令:[root@localhost ~]# grep SwapTotal /proc/meminfo查看系统当前共享内存,可以通过df 命令,例如:[root@localhost ~]# df -h /dev/shm4.2.2查看系统架构本步用来查看处理器的架构类型,需要确认ORACLE 安装包与处理器架构相符,不然安装时必然报错。
查看当前系统的处理器架构可以通过下列命令:[root@localhost ~]# uname –mi6864.2.3检查磁盘空闲空间首先/tmp 至少要有1g 的空闲空间,查看/tmp 的磁盘空间,也可以通过df 命令查看,例如:[root@localhost ~]# df -h /tmp在执行安装之前,建议执行df -h 命令,查看当前是否有充裕的空闲空间来安装和创建数据库。
[root@jssnode1 ~]# df –h4.3安装操作系统软件包(32位RedHat5.4)binutils-2.17.50.0.6compat-libstdc++-33-3.2.3elfutils-libelf-0.125elfutils-libelf-devel-0.125elfutils-libelf-devel-static-0.125gcc-4.1.2gcc-c++-4.1.2glibc-2.5-24glibc-common-2.5glibc-devel-2.5ksh-20060214libaio-0.3.106libaio-devel-0.3.106libgcc-4.1.2libgomp-4.1.2libstdc++-4.1.2libstdc++-devel-4.1.2make-3.81sysstat-7.0.2查看软件包是否已经安装:[root@localhost ~]# rpm -aq binutils compat-libstdc++-33[root@localhost ~]# rpm -aq | grep elfutils-libelf[root@localhost ~]# rpm -aq | grep gcc[root@localhost ~]# rpm -aq | grep glibc[root@localhost ~]# rpm -aq | grep ksh[root@localhost ~]# rpm -aq | grep libaio[root@localhost ~]# rpm -aq | grep libgcc[root@localhost ~]# rpm -aq | grep libgomp[root@localhost ~]# rpm -aq | grep libstdc++[root@localhost ~]# rpm -aq | grep make-3[root@localhost ~]# rpm -aq | grep sysstat[root@localhost ~]# rpm -aq | grep unixODBC通过以上命令来查看是否有未安装的软件包,可将未安装的软件包放到~/rpm下,因有些包会相互依赖,最简单的方式是将rpm包下的软件包一起安装:[root@localhost ~]#cd rpm[root@localhost rpm]#pwd/root/rpm[root@localhost rpm]#lscompat-libstdc++-33-3.2.3-61.i386.rpmelfutils-libelf-devel-0.137-3.el5.i386.rpmelfutils-libelf-devel-static-0.137-3.el5.i386.rpmgcc-4.1.2-46.el5.i386.rpmgcc-c++-4.1.2-46.el5.i386.rpmglibc-devel-2.5-42.i386.rpmglibc-headers-2.5-42.i386.rpmkernel-headers-2.6.18-164.el5.i386.rpmlibaio-devel-0.3.106-3.2.i386.rpmlibgomp-4.4.0-6.el5.i386.rpmlibstdc++-devel-4.1.2-46.el5.i386.rpmsysstat-7.0.2-3.el5.i386.rpmunixODBC-2.2.11-7.1.i386.rpmunixODBC-devel-2.2.11-7.1.i386.rpm[root@localhost rpm]#rpm –Uvh *64位需安装的操作系统软件包binutils-2.17.50.0.6compat-libstdc++-33-3.2.3compat-libstdc++-33-3.2.3 (32 bit)elfutils-libelf-0.125elfutils-libelf-devel-0.125gcc-4.1.2gcc-c++-4.1.2glibc-2.5-24glibc-2.5-24 (32 bit)glibc-common-2.5glibc-devel-2.5glibc-devel-2.5 (32 bit)glibc-headers-2.5ksh-20060214libaio-0.3.106libaio-0.3.106 (32 bit)libaio-devel-0.3.106libaio-devel-0.3.106 (32 bit)libgcc-4.1.2libgcc-4.1.2 (32 bit)libstdc++-4.1.2libstdc++-4.1.2 (32 bit)libstdc++-devel 4.1.2make-3.81sysstat-7.0.2unixODBC-2.2.11unixODBC-2.2.11 (32 bit)unixODBC-devel-2.2.11unixODBC-devel-2.2.11 (32 bit)4.4修改内核参数下列将要进行配置的核心参数均拥有默认值(或者说最小值),需要对其进行配置的原因,是为了获得更好了性能,因此对于产品服务器来说,务必根据实际情况进行配置,不适当的值反倒可能适得其反。
使用vi 命令编辑/etc/sysctl.conf 文件,例如:[root@localhost ~]# vi /etc/sysctl.conf将下列内容加入该文件:fs.aio-max-nr = 1048576fs.file-max = 6815744kernel.shmall = 2097152kernel.shmmax = 536870912kernel.shmmni = 4096kernel.sem = 250 32000 100 128net.ipv4.ip_local_port_range = 9000 65500net.core.rmem_default = 262144net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048586注意,某些参数可能已经存在于该文件,注意修改参数值即可。