oracle11grac 参考文档
ORACLE 高可用性(RAC) 技术解决方案及实现过程
目录 一、基础知识介绍 4 1. RAC是什么 4 2. RAC的优缺点 4 3. Oracle RAC原理 5 二、 RAID存储技术介绍 6 三、 RAC系统结构设计 9 1. RAC系统拓扑结构基本如下图所示: 9 2. 主机操作系统系统 10 1) 用户组规划 10 2) 用户规划 11 3) 主机文件系统规划 11 3. 存储规划 11 4. 数据库RAC环境数据库规划 12 1) RAC环境信息 12 2) Oracle RAC软件组件 12 3) Oracle RAC网络规划 12 4) Oracle用户组信息 13 5) 表空间规划 13 6) 数据库备份规划 13 四、 Oracle数据库及RAC配置清单 14 1. 硬件清单 14 2. 软件清单 14 3. 网络硬件需求 14 4. 网络规划 16 5. 系统安装规划 17 6. 系统环境需求 18 7. 查所需软件包 19 五、 安装工作 22 1. 修改主机名称,在所有节点执行; 22 2. 创建用户和组 22 3. 修改用户密码 22 4. 修改gird 用户的环境变量 22 5. 修改oracle 用户的环境变量 24 6. 创建软件目录 26 7. 修改系统参数 27 8. 配置用户等效性 29 9. 配置NTPD服务 30 10. 安装并配置 ASM 驱动 31 11. 安装 cvuqdisk 软件包 35 12. 安装 Grid前检查 36 13. 安装Grid Infrastructure 39 14. 确认群集安装成功 57 15. 创建 asm 磁盘组 58 16. 安装 oracle 软件 60 17. 创建数据库 70 18. 数据库管理工作 80 一、 基础知识介绍 1. RAC是什么 RAC,全称real application clusters,译为“实时应用集群”, 是Oracle新版数据库中采用的一项新技术,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。 2. RAC的优缺点 优点: Oracle RAC主要支持Oracle9i、10g、11g版本,可以支持24 x 7 有效的数据库应用系统,在低成本服务器上构建高可用性数据库系统,并且自由部署应用,无需修改代码。在Oracle RAC环境下,Oracle集成提供了集群软件和存储管理软件,为用户降低了应用成本。当应用规模需要扩充时,用户可以按需扩展系统,以保证系统的性能。 (1)多节点负载均衡; (2)提供高可用:故障容错和无缝切换功能,将硬件和软件错误造成的影响最小化; (3)通过并行执行技术提高事务响应时间----通常用于数据分析系统; (4)通过横向扩展提高每秒交易数和连接数----通常对于联机事务系统; (5)节约硬件成本,可以用多个廉价PC服务器代替昂贵的小型机或大型机, 同时节约相应维护成本; (6)可扩展性好,可以方便添加删除节点,扩展硬件资源。 缺点: (1)相对单机,管理更复杂,要求更高; (2)可能会增加软件成本(如果使用高配置的pc服务器,Oracle一般按照CPU个数收费)。 3. Oracle RAC原理 在一个应用环境当中,所有的服务器使用和管理同一个数据库,目的是为了分散每一台服务器的工作量,硬件上至少需要两台以上的服务器,而且还需要一个共享存储设备。同时所有服务器上的OS都应该是同一类OS,根据负载均衡的配置策略,当一个客户端发送请求到某一台服务的listener后,这台服务器根据我们的负载均衡策略,会把请求发送给本机的RAC组件处理也可能会发送给另外一台服务器的RAC组件处理,处理完请求后,RAC会通过集群软件来访问共享存储设备. 逻辑结构上看: 每一个参加集群的节点有一个独立的instance,这些instance访问同一个数据库。 每一个节点的linstance都有自己的SGA。 每一个节点的linstance都有自己的background process。 每一个节点的linstance都有自己的redo logs。 每一个节点的instance都有自己的undo表空间。 所有节点都共享一份datafiles和controlfiles。 三类Resource: VIP - 虚拟IP地址(Virtual IP) OCR - Oracle Cluster Registry(集群注册文件),记录每个节点的相关信息 Voting Disk,仲裁机制用于仲裁多个节点向共享节点同时写的行为,这样做是为了避免发生冲突。 二、 RAID存储技术介绍 独立冗余磁盘阵列(Redundant Array of Independent Disk,RAID)是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能与数据备份能力的技术。RAID特色是N块硬盘同时读取速度加快及提供容错性。可以将RAID分为不同级别,级别并不代表技术高低,选择哪一种RAID产品纯视用户的操作环境及应用而定,与级别高低没有必然关系。 RAID 0:无差错控制的带区组 要实现RAID0必须要有两个以上硬盘驱动器,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。因为将数据分布在不同驱动器上,所以数据吞吐率大大提高,驱动器的负载也比较平衡。它的缺点是它没有数据差错控制,如果一个驱动器中的数据发生错误,即使其它盘上的数据正确也无济于事了。不应该将它用于对数据稳定性要求高的场合。在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。 RAID 1:镜象结构 对于使用这种RAID1结构的设备来说,RAID控制器必须能够同时对两个盘进行读操作和对两个镜象盘进行写操作。镜象结构是在一组盘出现问题时,可以使用镜象磁盘,提高系统的容错能力。每读一次盘只能读出一块数据,也就是说数据块传送速率与单独的盘的读取速率相同。当您的系统需要极高的可靠性时,如进行数据统计,那么使用RAID1比较合适。而且RAID1技术支持“热替换”,即不断电的情况下对故障磁盘进行更换,更换完毕只要从镜像盘上恢复数据即可。当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。镜像硬盘相当于一个备份盘,这种硬盘模式的安全性是非常高的,RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。 RAID5:分布式奇偶校验的独立磁盘结构 RAID 5将数据分散存放于多个硬盘上面,同时使用一定的编码技术产生奇偶校验码来提供错误检查及恢复能力,数据段的校验位交互存放于各个硬盘上。因为奇偶校验码在不同的磁盘上,所以提高了可靠性,允许单个磁盘出错。任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。硬盘的利用率为n-1。优点是提供了冗余性(支持一块盘掉线后仍然正常运行),磁盘空间利用率较高(N-1/N),读写速度较快(N-1倍)。RAID5是RAID级别中最常见的一个类型。 RAID10:高可靠性与高效磁盘结构 这种结构是一个带区结构加一个镜象结构,因为两种结构各有优缺点,因此可以相互补充,达到既高效又高速还可以互为镜像的目的。大家可以结合两种结构的优点和缺点来理解这种新结构。这种新结构的价格高,可扩充性不好。主要用于容量不大,但要求速度和差错控制的数据库中。 RAID 10是先镜射再分区数据。是将所有硬盘分为两组,然后将这两组各自视为RAID 1运作。RAID 10有着不错的读取速度,而且拥有比RAID 0更高的数据保护性。 三、 RAC系统结构设计 1. RAC系统拓扑结构基本如下图所示: 2. 主机操作系统系统 RAC支持常用的linux、AIX、windows、solaris等操作系统,本文以linux操作为例。 数据库服务器Redhat Linux系统规划 1) 用户组规划 GroupName GroupID 说明 HOST oinstall 501 Oracle清单和软件所有者 rac1 rac2 rac3 rac4 asmadmin 504 Oracle自动存储管理组 rac1 rac2 rac3 rac4 asmdba 506 ASM数据库管理员组 rac1 rac2 rac3 rac4 asmopen 507 ASM操作员组 rac1 rac2 rac3 rac4 dba 502 数据库管理员 rac1 rac2 rac3 rac4 2) 用户规划 UserID PrimaryGroup Group 说明 HOST 默认口令 501 Grid Oinstall Asmadmin Asmdba asmopen Oracle Cluster用户 rac1 rac2 oracle 502 Oracle Oinstall Asmdba Oracle数据管理员 rac1 rac2 oracle 3) 主机文件系统规划 物理硬盘数 RAID方式 文件系统 挂载点 文件系统 大小 2*300GB 1 /home ext3 100GB /boot boot 200MB /swap swap 32GB / ext3 剩下所有空间 3. 存储规划 存储一般采用RAID 5存储方式。 硬盘总数 物理大小 RAID方式 逻辑大小(可用空间大小) HotSpare 10 600GB*10 5 4.2TB 1 存储组件 Block Device ASMlib Name Size Comments 系统路径 OCR /dev/sda OCR_VOL1 1G OCR and Voting Disks /dev/oracleasm/ORC /dev/sdb OCR_VOL2 1G 数据文件 /dev/sdb DATA_VOL1 1T ASM Data Diskgroup /dev/oracleasm/DATA_VOL1 文件备份 /dev/sda BACK_VOL1 800G ASM Recovery\Backup Diskgroup /dev/oracleasm/BACK_VOL1 4. 数据库RAC环境数据库规划 1) RAC环境信息 节点名称 实例名称 处理器 内存 操作系统 数据库版本 rac1 orcl 4 32GB RedhatRedhat 5.5企业版 64位 Oracle 11.2.0.3 rac2 4 32GB RedhatRedhat 5.5企业版 64位 Oracle 11.2.0.3 2) Oracle RAC软件组件 软件组件名称 OS用户 主组 辅组 用户目录 Oracle基目录 grid grid oinstall asmadmin, asmoper asmdba /home/grid /u01/grid/11.2.0/grid oracle rac Oracle oinstall dba asmdba /home/oracle /u01/app /oracle/product/11.2.0/db_1 3) Oracle RAC网络规划 节点 Public IP VIP PRIVATE IP scan名称 scan ip rac1 192.168.221.61 192.168.221.11 10.0.0.11 rac-scan 192.168.221.20 rac2 192.168.221.62 192.168.221.12 10.0.0.12 rac3 192.168.221.63 192.168.221.13 10.0.0.13 rac4 192.168.221.64 192.168.221.14 10.0.0.14 4) Oracle用户组信息 组名 属组用户 Oracle权限 Oracle组名 描述 oinstall grid\oracle Oracle清单和软件所有者 asmadmin Grid SYSTEM OSASM Oracle自动存储管理组 asmdba grid\oracle ASM SYSDBA OSDBA FOR ASM ASM数据库管理员组 asmopen Grid ASM SYSOPER OSOPER FOR ASM ASM操作员组 dba oracle SYSDBA OSDBA 数据库管理员 5) 表空间规划 用户 表空间名 规划 (GB) 说 明 100 初始表空间大小为100GB,并且以自增扩展的方式添加; Others Control Files 20mb 控制文件(共2个) 文件存放位置:数据库默认 Redo Log Files 40mb 重做日志文件(3组×2成员×10M) Redo本地位置:数据库默认位置 Redo存储位置:+BACK_VOL1/redo/ Archive Log Files 40GB 归档日志文件系统 +BACK_VOL1/archivelog/ 6) 数据库备份规划 建议策略 归档模式 启用 备份方式 热备 建议策略 每周做一次0级备份; 全备作业天以外每天:增量备份 增量备份后清除归档日志 根据平台业务特性及考虑到节约硬件成本,建议每周作一次完全备份,每天做一次增量备份。恢复时,首先恢复最近一次完全备份的数据,然后再依次恢复服务器硬盘上增量备份的数据,最后通过归档的日志文件将数据恢复到故障点处; 四、 Oracle数据库及RAC配置清单 1. 硬件清单 数据库服务器两台,主要配置如下: CPU 2*Intel Xeon 内存 8*2GB 硬盘 2*146GB 数据库服务器磁盘阵列 RAID 5 2. 软件清单 Red Hat Enterprise Linux AS release 5 Oracle Database 11g Release 2 (11.2.0.1.0) for Linux x86 linux_11gR2_database_1of2.zip linux_11gR2_database_2of2.zip linux_11gR2_grid.zip oracleasmlib-2.0.4-1.el5.x86_64.rpm(11gR2后非必须) 3. 网络硬件需求 每个 Oracle RAC 节点必须至少有两个网络适配器(即网络接口卡 (NIC)):一个用于公共网络接口,另一个用于专用网络接口(互连)。要对公共网络或专用网络使用多个NIC,Oracle 建议采用 NIC 绑定。对公共网络和专用网络使用不同的绑定(即对公共网络使用 bond0,对专用网络使用 bond1),这是因为在安装过程中,每个接口要么定义为公共接口,要么定义为专用接口。本文不讨论 NIC 绑定。 每个网络中网络适配器的相关公共接口名称在所有节点上都应相同,网络适配器的相关专用接口名称在所有节点上都应相同。 对于公共网络,每个网络适配器必须支持 TCP/IP。 对于专用网络,互连必须支持用户数据报协议 (UDP),使用支持 TCP/IP(最小要求为 1 Gb 以太网)的高速网络适配器和交换机。 TCP 是 Oracle Clusterware 的互连协议。对于此互连,必须使用一个交换机。Oracle 建议您使用一个专用交换机。 对于专用网络,所有指定互连接口的端点在网络上必须完全可达。每个节点均应连接到所有的专用网络接口。可以使用 ping 命令测试一个互连接口是否可达。 在 Oracle Grid Infrastructure 的安装过程中,系统都会要求您标识OUI在您的集群节点上检测到的每个网络接口计划使用方式。必须将每个接口标识为 public interface、private interface 或 not used。 可将若干独立的接口绑定为一个公共接口,这样可在某个 NIC 出现故障时提供冗余性。但是,Oracle 建议您不要为 Oracle Clusterware 和 Oracle RAC 创建不同的接口。如果您对专用互连使用多个 NIC,Oracle 建议您使用 NIC 绑定。请注意,多个专用接口提供负载平衡,但不提供故障切换功能,只有将它们绑定在一起时才提供故障切换功能。 从 Oracle Clusterware 11g 第 2 版开始,无需再为互连提供专用名称或 IP 地址。标识为专用的子网上的 IP 地址将被分配作为集群成员节点的专用 IP 地址。无需在 hosts 目录中手动配置这些地址。如果需要针对互连进行名称解析,可在 hosts 文件或 DNS 上配置专用 IP 名称。而 Oracle Clusterware 会为安装期间定义为专用接口的那个接口(如 eth1)分配互连地址,并将该地址分配给用作专用子网的那个子网。实际上,在本指南中,我会继续在每个节点包括一个专用名称和 IP 地址以用于 RAC 互连。这在专用网络上提供了自我文档编制的方法和一组端点,可供故障排除之用。 4. 网络规划 服务器 1 (rac1) 设备 IP 地址 子网 备注 Eth0 192.168.11.11 255.255.255.0 Public IP Eth1 10.0.0.1 255.255.255.0 PRIVATE IP 192.168.11.23 255.255.255.0 VIP /etc/hosts #eth0-Public IP 192.168.11.11 rac1 192.168.11.12 rac2 #eth1 – PRIVATE IP 10.0.0.1 rac1-priv 10.0.0.2 rac2-priv #VIP 192.168.11.23 rac1-vip 192.168.11.24 rac2-vip #SCAN 192.168.11.13 rac-cluster-scan 服务器 2 (rac2) 设备 IP 地址 子网 目的 Eth0 192.168.11.11 255.255.255.0 Public IP Eth1 10.0.0.2 255.255.255.0 PRIVATE IP 192.168.11.14 255.255.255.0 VIP /etc/hosts #eth0-Public IP 192.168.11.11 rac1 192.168.11.12 rac2 #eth1 – PRIVATE IP 10.0.0.1 rac1-priv 10.0.0.2 rac2-priv #VIP 192.168.11.23 rac1-vip 192.168.11.24 rac2-vip #SCAN 192.168.11.13 rac-cluster-scan 5. 系统安装规划 业务数据库配置参数 ORACLE_BASE /u01/app CRS_HOME /u01/grid/11.2.0/grid ORACLE_HOME (Unix) /u01/app/oracle/product/11.2.0/db_1 DB_NAME orcl ORACLE_SID rac1,rac2 TNS_ADMIN $ORACLE_HOME/network/admin Oracle管理帐户的口令 sys/oracle system/oracle 数据库存放位置 ASM 是否使用归档方式运行数据库 Enable 备份方式说明 RMAN 注意:服务器的主机名必须全部都是小写,并且不要有下划线。 6. 系统环境需求 环境需求 内存 Between 4 GB and 16 GB Equal to the size of RAM 磁盘空间 Enterprise Edition 5GB Standard Edition 5GB 7. 查所需软件包 如果是 64bit,需要检查以下的 Packages。以下重复包名称的部分是64bit,注明 32bit的是 32bit packages。如果是32bit OS,那么重复包名的只需要32bit 部分的包。注意不同版本Linux 系统后面的版本不太一样。 binutils‐2.15.92.0.2 compat‐libstdc++‐33‐3.2.3 compat‐libstdc++‐33‐3.2.3 (32 bit) elfutils‐libelf‐0.97 elfutils‐libelf‐devel‐0.97 expat‐1.95.7 gcc‐3.4.6 gcc‐c++‐3.4.6 glibc‐2.3.4‐2.41 glibc‐2.3.4‐2.41 (32 bit) glibc‐common‐2.3.4 glibc‐devel‐2.3.4 glibc‐headers‐2.3.4 libaio‐0.3.105 libaio‐0.3.105 (32 bit) libaio‐devel‐0.3.105 libaio‐devel‐0.3.105 (32 bit) libgcc‐3.4.6 libgcc‐3.4.6 (32‐bit) libstdc++‐3.4.6 libstdc++‐3.4.6 (32 bit) libstdc++‐devel 3.4.6 make‐3.80 pdksh‐5.2.14 sysstat‐5.0.5 unixODBC‐2.2.11 unixODBC‐2.2.11 (32 bit) unixODBC‐devel‐2.2.11 unixODBC‐devel‐2.2.11 (32 bit) 检查方法: [root@rac02 grid]# rpm ‐q ‐‐qf '%{NAME}‐%{VERSION}‐%{RELEASE} (%{ARCH})\n' binutils \ 然后输入: compat‐libstdc++‐33 \ elfutils‐libelf \ elfutils‐libelf‐devel \ expat \ gcc \ gcc‐c++ \ glibc \ glibc‐common \ glibc‐devel \ glibc‐headers \ ksh \ libaio \ libaio‐devel \ libgcc \ libstdc++ \ libstdc++‐devel \ make \ pdksh \ sysstat \ unixODBC \ unixODBC‐devel 结果如下: binutils‐2.17.50.0.6‐9.el5 (i386) compat‐libstdc++‐33‐3.2.3‐61 (i386) elfutils‐libelf‐0.137‐3.el5 (i386) elfutils‐libelf‐devel‐0.137‐3.el5 (i386) expat‐1.95.8‐8.2.1 (i386) gcc‐4.1.2‐44.el5 (i386) gcc‐c++‐4.1.2‐44.el5 (i386) glibc‐2.5‐34 (i686) glibc‐common‐2.5‐34 (i386) glibc‐devel‐2.5‐34 (i386) glibc‐headers‐2.5‐34 (i386) ksh‐20080202‐2.el5 (i386) libaio‐0.3.106‐3.2 (i386) libaio‐devel‐0.3.106‐3.2 (i386) libgcc‐4.1.2‐44.el5 (i386) libstdc++‐4.1.2‐44.el5 (i386) libstdc++‐devel‐4.1.2‐44.el5 (i386) make‐3.81‐3.el5 (i386) package pdksh is not installed ‐‐‐ pdksh 没有安装 sysstat‐7.0.2‐3.el5 (i386) unixODBC‐2.2.11‐7.1 (i386) unixODBC‐devel‐2.2.11‐7.1 (i386) 查询一些文档,pdksh 这个包可以不用安装。 五、 安装工作 1. 修改主机名称,在所有节点执行; [root@rac1 ~]# vi /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=rac1 #此处为主机名 GATEWAY=192.9.100.251 2. 创建用户和组 创建RAC相关用户和组,在所有节点执行; [root@rac1 ~]# groupadd -g 501 oinstall [root@rac1 ~]# groupadd -g 502 dba [root@rac1 ~]# groupadd -g 504 asmadmin [root@rac1 ~]# groupadd -g 506 asmdba [root@rac1 ~]# groupadd -g 507 asmoper [root@rac1 ~]# useradd -u 501 -g oinstall -G asmadmin,asmdba,asmoper grid [root@rac1 ~]# useradd -u 502 -g oinstall -G dba,asmdba oracle [root@rac1 ~]# id grid [root@rac1 ~]# id oracle 3. 修改用户密码 [root@rac1 ~]# passwd oracle [root@rac1 ~]# passwd grid 4. 修改gird 用户的环境变量 切换到 grid 用户,准备安装 grid Infrastructure . 首先需要修改所有节点 grid 用户的环境变量.bash_profile [root@rac01 init.d]# su ‐ grid [grid@rac01 ~]$ cd /home/grid/ [grid@rac01 ~]$ vi .bash_profile 以下 grid 的 bash_profile, 仅供参考,还有一些参数可以自行加入。 TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR ORACLE_SID=+ASM1; export ORACLE_SID ORACLE_BASE=/u01/app/grid; export ORACLE_BASE ORACLE_HOME=/u01/app/11.2.0/grid/product/db_1; export ORACLE_HOME # 这里注意: 测试发现安装RAC的时候, grid用户的ORACLE_BASE不能包含ORACLE_HOME, # 比如 /u01/grid , /u01/grid/11.2 就不行。 NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT THREADS_FLAG=native; export THREADS_FLAG PATH=$ORACLE_HOME/bin:$PATH; export PATH THREADS_FLAG=native; export THREADS_FLAG PATH=$ORACLE_HOME/bin:$PATH; export PATH if [ $USER = "oracle" ] || [ $USER = "grid" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi umask 022 fi 使配置文件生效,同样在其他节点的Grid用户.bash_profile 中加入,并注意修改 ORACLE_SID=+ASM2 $source .bash_profile 5. 修改oracle 用户的环境变量 Oracle 用户也需要设置.bash_profile [root@rac01 init.d]# su ‐ oracle [grid@rac01 ~]$ cd /home/oracle/ [grid@rac01 ~]$ vi .bash_profile 以下 Oracle的 bash_profile, 仅供参考 TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME ORACLE_SID=racdb1; export ORACLE_SID ORACLE_TERM=xterm; export ORACLE_TERM PATH=/usr/sbin:$PATH; export PATH PATH=$ORACLE_HOME/bin:$PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"; export NLS_DATE_FORMAT NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;export NLS_LANG if [ $USER = "oracle" ] || [ $USER = "grid" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi umask 022 fi 使配置文件生效, 同样在其他节点的Oracle用户.bash_profile 中加入,并注意修改 ORACLE_SID=orcl2 $source .bash_profile 6. 创建软件目录 创建Oracle RAC所使用的目录,并修改相应的权限,在所有节点执行; [root@rac1 ~]# # Creating the Oracle Directory [root@rac1 ~]# mkdir -p /u01/app/grid/ [root@rac1 ~]# mkdir -p /u01/app/11.2.0/grid/product/db_1 [root@rac1 ~]# mkdir -p /u01/app/oraInventory [root@rac1 ~]# chown -R grid:oinstall /u01/app [root@rac1 ~]# mkdir -p /u01/app/oracle/product/11.2.0/db_1 [root@rac1 ~]#chown –R oracle:oinstall /u01/app/oracle [root@rac1 ~]# chmod -R 775 /u01 7. 修改系统参数 修改操作系统相关参数,在所有节点执行; vi /etc/sysctl.conf fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 536870912 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048586 sysctl -p vi /etc/security/limits.conf grid soft nproc 2047 grid hard nproc 16384 grid soft nofile 1024 grid hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 vi /etc/pam.d/login session required pam_limits.so vi /etc/profile if [ $USER = "oracle" ] || [ $USER = "grid" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi umask 022 fi vi /etc/csh.login if ( $USER = "oracle" || $USER = "grid" ) then limit maxproc 16384 limit descriptors 65536 endif EOFCSH 修改/etc/hosts 文件,在所有节点添加以下内容 [grid@rac1 ~]$ vi /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. #eth0-Public IP 192.9.100.31 rac1 192.9.100.32 rac2 #eth1 – PRIVATE IP 10.0.0.1 rac1-priv 10.0.0.2 rac2-priv #VIP 192.9.100.33 rac1-vip 192.9.100.35 rac2-vip #SCAN 192.9.100.36 rac-cluster-scan 8. 配置用户等效性 使用Oracle用户,配置Oracle用户等效性,在所有节点执行; [oracle@rac1 ~]$ ssh-keygen -t rsa [oracle@rac1 ~]$ ssh-keygen -t dsa 使用Oracle用户,配置Oracle用户等效性,在节点1执行 [oracle@rac1 ~]$ cat /home/oracle/.ssh/*.pub >> /home/oracle/.ssh/authorized_keys [oracle@rac1 ~]$ ssh rac2 cat /home/oracle/.ssh/*.pub >> /home/oracle/.ssh/authorized_keys [oracle@rac1 ~]$ scp /home/oracle/.ssh/authorized_keys rac2:/home/oracle/.ssh/authorized_keys 验证oracle用户等效性,在所有节点执行; [oracle@rac1 ~]$ ssh rac2 date [oracle@rac2 ~]$ ssh rac1 date 使用Grid用户,配置Grid用户等效性,在所有节点执行; [grid@rac1 ~]$ ssh-keygen -t rsa [grid@rac1 ~]$ ssh-keygen -t dsa 配置Grid用户等效性,在节点1执行; [grid@rac1 ~]$ cat /home/grid/.ssh/*.pub >> /home/grid/.ssh/authorized_keys [grid@rac1 ~]$ ssh rac2 cat /home/grid/.ssh/*.pub >> /home/grid/.ssh/authorized_keys [grid@rac1 ~]$ scp /home/grid/.ssh/authorized_keys rac2:/home/grid/.ssh/authorized_keys 验证Grid用户等效性,在所有节点执行; [grid@rac1 ~]$ ssh rac2 date [grid@rac2 ~]$ ssh rac1 date 9. 配置NTPD服务 各个节点时间同步 (所有节点设置,两个节点相互同步,不设置时间服务器) 方法一: 1.rac1节点以rac1主要做NTP Server的方式 #vi /etc/ntp.conf server rac1 restrict rac1 mask 255.255.255.255 nomodify notrap noquery server 127.127.1.0 2.rac2节点 server rac1 restrict rac1 mask 255.255.255.255 nomodify notrap noquery 3.修改NTPD参数文件(rac1,rac2) #vi /etc/sysconfig/ntpd SYNC_HWCLOCK=yes OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid" #RAC安装时需要检测的-x参数 4.启动服务(rac1,rac2) #service ntpd restart 5.系统启动自动加载(rac1,rac2) #chkconfig ntpd on 方法二: 通过 nptdate或 rdate 设置各个节点时间同步 [root@rac01 etc]# chkconfig time‐stream on [root@rac01 etc]# date Tue Dec 28 13:23:40 CST 2010 然后在节点 2 设置与节点1 的时间同步排程。 [root@rac02 etc]# crontab ‐e */2 * * * * rdate ‐s 192.168.5.111 10. 安装并配置 ASM 驱动 检查操作系统版本,确认安装与操作系统相匹配的 asmlib,在所有节点执行; [root@rac1 ~]# uname -a Linux rac1 2.6.18-92.el5 #1 SMP Tue Apr 29 13:16:15 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux [root@rac1 ~]# lsb_release -a LSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch Distributor ID: RedHatEnterpriseServer Description: Red Hat Enterprise Linux Server release 5.2 (Tikanga) Release: 5.2 Codename: Tikanga Oracle ASMlib下载地址: http://www.oracle.com/technetwork/server-storage/linux/downloads/index.html [root@rac1 asmlib]# rpm -ivh oracleasm-support-2.1.3-1.el5.x86_64.rpm warning: oracleasm-support-2.1.3-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:oracleasm-support ########################################### [100%] [root@rac1asmlib]#rpm-ivh oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm warning: oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:oracleasm-2.6.18-194.el########################################### [100%] [root@rac1 asmlib]# rpm -ivh oracleasmlib-2.0.4-1.el5.x86_64.rpm warning: oracleasmlib-2.0.4-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:oracleasmlib ########################################### [100%] [root@rac1 asmlib]# rpm -qa |grep asm oracleasm-2.6.18-194.el5-2.0.5-1.el5 oracleasmlib-2.0.4-1.el5 oracleasm-support-2.1.3-1.el5 初始化 asmlib,在所有节点执行; [root@rac1 asmlib]# /usr/sbin/oracleasm configure -i Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting <ENTER> without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: grid Default group to own the driver interface []: asmadmin Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: Writing Oracle ASM library driver configuration: done ASMlib加载到内核,在所有节点执行; [root@rac1 asmlib]# /usr/sbin/oracleasm init Creating /dev/oracleasm mount point: /dev/oracleasm Loading module "oracleasm": oracleasm Mounting ASMlib driver filesystem: /dev/oracleasm 磁盘分区 [root@rac1 2.6.18-92.e15]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help): p Disk /dev/sdb: 1048 MB, 1048576000 bytes 64 heads, 32 sectors/track, 1000 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1000, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1000, default 1000): Using default value 1000 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 创建 asm 磁盘,在节点1执行; [root@rac1 ~]# /usr/sbin/oracleasm createdisk OCR_VOL1 /dev/sdb1 Writing disk header: done Instantiating disk: done [root@rac1 ~]# /usr/sbin/oracleasm createdisk OCR_VOL2 /dev/sdc1 Writing disk header: done Instantiating disk: done [root@rac1 ~]# /usr/sbicd n/oracleasm createdisk OCR_VOL3 /dev/sdd1 Writing disk header: done Instantiating disk: done [root@rac1 ~]# /usr/sbin/oracleasm createdisk DATA_VOL1 /dev/sde1 Writing disk header: done Instantiating disk: done [root@rac1 ~]# /usr/sbin/oracleasm createdisk BACK_VOL1 /dev/sdf1 Writing disk header: done Instantiating disk: done [root@rac2 ~]# /usr/sbin/oracleasm listdisks BACK_VOL1 DATA_VOL1 OCR_VOL1 OCR_VOL2 OCR_VOL3 在节点二执行扫描,识别 asm 盘 [root@rac2 2.6.18-92.e15]# /usr/sbin/oracleasm scandisks Reloading disk partitions: done Cleaning any stale ASM disks... Scanning system for ASM disks... Instantiating disk "OCR_VOL1" Instantiating disk "OCR_VOL2" Instantiating disk "OCR_VOL3" Instantiating disk "DATA_VOL1" Instantiating disk "BACK_VOL1" [root@rac2 ~]# /usr/sbin/oracleasm listdisks BACK_VOL1 DATA_VOL1 OCR_VOL1 OCR_VOL2 OCR_VOL3 11. 安装 cvuqdisk 软件包 cvuqdisk软件包用于发现共享存储,在grid 安装软件的rpm目录中,在所有节点执行; [root@rac1 rpm]# export CVUQDISK_GRP=oinstall [root@rac1 rpm]# rpm -ivh cvuqdisk-1.0.7-1.rpm Preparing... ########################################### [100%] 1:cvuqdisk ########################################### [100%] 12. 安装 Grid前检查 在所有节点执行,并且检查通过; 检查参数: -post hwos : 后期检查硬件和操作系统 -pre cfs : 预检查 CFS 设置 -post cfs : 后期检查 CFS 设置 -pre crsinst : 预检查 CRS 安装 -post crsinst : 后期检查 CRS 安装 -pre hacfg : 预检查 HA 配置 -post hacfg : 后期检查 HA 配置 -pre dbinst : 预检查数据库安装 -pre acfscfg : 预检查 ACFS 配置。 -post acfscfg : 后期检查 ACFS 配置。 -pre dbcfg : 预检查数据库配置 -pre nodeadd : 预检查添加节点。 -post nodeadd : 后期检查添加节点。 -post nodedel : 后期检查节点删除。 [grid@rac1 grid]$ cvu stage -post hwos -n rac1,rac2 -verbose 执行 硬件和操作系统设置 的后期检查 正在检查节点的可访问性... 检查: 节点 "rac1" 的节点可访问性 目标节点 是否可访问? ------------------------------------ ------------------------ rac2 是 rac1 是 结果:节点 "rac1" 的节点可访问性检查已通过 正在检查等同用户... 检查: 用户 "grid" 的等同用户 节点名 注释 ------------------------------------ ------------------------ rac2 通过 rac1 通过 结果:用户 "grid" 的等同用户检查已通过 正在检查节点的连接性... 正在检查主机配置文件... 节点名 状态 注释 ------------ ------------------------ ------------------------ rac2 通过 rac1 通过 主机配置文件的验证成功 节点 "rac2" 的接口信息 名称 IP 地址 子网 网关 默认网关 HW 地址 MTU ------ --------------- --------------- --------------- --------------- ----------------- ------ eth0 192.9.100.222 192.9.100.0 0.0.0.0 192.9.100.251 00:50:56:8F:00:1C 1500 eth1 10.0.0.2 10.0.0.0 0.0.0.0 192.9.100.251 00:50:56:8F:00:1D 1500 节点 "rac1" 的接口信息 名称 IP 地址 子网 网关 默认网关 HW 地址 MTU ------ --------------- --------------- --------------- --------------- ----------------- ------ eth0 192.9.100.221 192.9.100.0 0.0.0.0 192.9.100.251 00:50:56:8F:00:1A 1500 eth1 10.0.0.1 10.0.0.0 0.0.0.0 192.9.100.251 00:50:56:8F:00:1B 1500 检查: 子网 "192.9.100.0" 的节点连接性 源 目标 是否已连接? ------------------------------ ------------------------------ ---------------- rac2:eth0 rac1:eth0 是 结果:含有节点 rac2,rac1 的子网 "192.9.100.0" 的节点连接性检查已通过 检查: 子网 "192.9.100.0" 的 TCP 连接性 源 目标 是否已连接? ------------------------------ ------------------------------ ---------------- rac1:192.9.100.221 rac2:192.9.100.222 通过 结果:子网 "192.9.100.0" 的 TCP 连接性检查通过 检查: 子网 "10.0.0.0" 的节点连接性 源 目标 是否已连接? ------------------------------ ------------------------------ ---------------- rac2:eth1 rac1:eth1 是 结果:含有节点 rac2,rac1 的子网 "10.0.0.0" 的节点连接性检查已通过 检查: 子网 "10.0.0.0" 的 TCP 连接性 源 目标 是否已连接? ------------------------------ ------------------------------ ---------------- rac1:10.0.0.1 rac2:10.0.0.2 通过 结果:子网 "10.0.0.0" 的 TCP 连接性检查通过 在子网 "192.9.100.0" 上找到的很可能是用于 VIP 的候选接口的接口为: rac2 eth0:192.9.100.222 rac1 eth0:192.9.100.221 在子网 "10.0.0.0" 上找到的很可能是用于专用互连的候选接口的接口为: rac2 eth1:10.0.0.2 rac1 eth1:10.0.0.1 结果:节点的连接性检查已通过 检查 UID 值为 0 的多个用户 结果:对 UID 值为 0 的多个用户进行的检查已通过 硬件和操作系统设置 的后期检查成功。 13. 安装Grid Infrastructure 登陆到grid 用户,执行安装文件,在节点1执行; [grid@rac1 grid]$ ./runInstaller Starting Oracle Universal Installer... Checking Temp space: must be greater than 120 MB. Actual 87606 MB Passed Checking swap space: must be greater than 150 MB. Actual 31996 MB Passed Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed Preparing to launch Oracle Universal Installer from /tmp/OraInstall2010-12-10_12-51-07PM. Please wait ... 选择安装并配置一个集群 选择高级安装 将中文添加到右侧边框,添加中文可避免在使用 em 时乱码 填写集群名称和scan 的解析名称及端口,点击 next 在弹出的界面中,点击 add 填写节点二的信息 添加完成后显示如下: 在下图界面中选择各个网卡的用途 为OCR和表决盘选择 ASM 存储方式 选择crsvol,并填写磁盘组名称,点击下一步 配置ASM System口令 不配置IPMI 为asm 的各种角色分配属组 默认grid 的目录,点击 next 点击next 接下来,软件进行安装检测 检测通过后,点击 install,开始安装 安装进行中。。 安装完成,弹出窗口,提示需要以 root 依次在两个节点执行脚本 脚本执行如下: [root@rac2 u01]# /u01/oraInventory/orainstRoot.sh 更改权限/u01/oraInventory. 添加组的读取和写入权限。 删除全局的读取, 写入和执行权限。 更改组名/u01/oraInventory 到 oinstall. 脚本的执行已完成。 [root@rac2 u01]# /u01/grid/11.2.0/grid/root.sh Running Oracle 11g root.sh script... The following environment variables are set as: ORACLE_OWNER= grid ORACLE_HOME= /u01/grid/11.2.0/grid Enter the full pathname of the local bin directory: [/usr/local/bin]: Copying dbhome to /usr/local/bin ... Copying oraenv to /usr/local/bin ... Copying coraenv to /usr/local/bin ... Creating /etc/oratab file... 执行完毕后,点击 ok,弹出如下界面,点击 close,grid 安装完成 出现以下错误时,是因为在Hosts配置文件里配置了SCAN,未启用DNS解析,不影响RAC正常运行; 点关闭完成安装 14. 确认群集安装成功 15. 创建 asm 磁盘组 本次任务将创建 3 个asm 磁盘组,分别为:ARCH,DATA,FLASH。其中DATA 将存放数据库文件;FLASH 存放闪回文件;ARCH磁盘组将创建ACFS 文件系统,分别挂载到两个节点,用来存放归档日志。 在grid 用户下,执行 asmca,启动 asm 磁盘组创建向导 点击create 按钮,在弹出的创建界面中填写磁盘组名称,选择外边存储方,并勾选成员,选择完毕后点击 ok; 以同样的方法创建 BACKUP磁盘组,创建完毕后如下 16. 安装 oracle 软件 以oracle 用户登录到节点一,切换到软件安装目录,执行安装 [oracle@rac1 database]$ ./runInstaller & 在弹出的安装界面中,点击 next 选择“install software only”,点击 next 选择两个节点,点击 next 将简体中文添加到安装选项 选择企业版,点击 next 保持默认的目录,点击 next 保持默认的属组信息,点击 next 安装过程自动进行安装检查 检查通过后,点击 install 开始安装 安装完成,跳出一个界面,提示需要以 root 在两个节点上执行脚本 以root 用户,在两个节点上执行脚本 [root@rac1 ~]# /oracle/oracle/product/11.2.0/dbhome_1/root.sh Running Oracle 11g root.sh script... 执行完毕后,点击 ok,返回如下界面 至此,oracle 数据库软件安装完毕。 17. 创建数据库 本节操作在节点1执行; 以oracle 用户登录,执行 dbca 命令,选择 rac数据库点击next 选择通用类型,点击 next 填写数据库名称,选择两个节点,点击 next 默认,点击next 为所有用户设置统一密码,点击 next 选择ASM 存储方式,并选择相应的磁盘组,点击 next 注:如果此处无法找到“ASM DISKGROUP”,使用root用户,则执行以下操作,然后再次执行“dbca”; [root@rac1 ~]# cd /u01/grid/11.2.0/bin [root@rac1 ~]# chmod +s oracle 弹出ASM 用户密码窗口,输入在安装 grid 时设置的密码 选择闪回磁盘组,勾选归档 点击编辑归档模式参数,在归档路径出输入:+BACK/archive 下一步 使用自动内存管理 点击字符集选项,选择 ZHS16GBK 类型 显示概览,默认不变,点击 next 点击finish 出现安装概要 点击ok,开始安装过程 等待一段时间后,安装结束,弹出如下界面 至此,数据库创建完毕。 18. 数据库管理工作 RAC的启停 oracle rac默认会开机自启动,如需维护时可使用以下命令: 关闭: crsctl stop cluster 停止本节点集群服务 crsctl stop cluster –all 停止所有节点服务 开启 crsctl start cluster 开启本节点集群服务 crsctl stop cluster –all 开启所有节点服务 注:以上命令需以 root用户执行 RAC检查运行状况 以grid 用户运行 [grid@rac1 ~]$ crsctl check cluster CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online Database检查例状态 [oracle@rac1 ~]$ srvctl status database -d orcl Instance rac1 is running on node rac1 Instance rac2 is running on node rac2 检查节点应用状态及配置 [oracle@rac1 ~]$ srvctl status nodeapps VIP rac1-vip is enabled VIP rac1-vip is running on node: rac1 VIP rac2-vip is enabled VIP rac2-vip is running on node: rac2 Network is enabled Network is running on node: rac1 Network is running on node: rac2 GSD is disabled GSD is not running on node: rac1 GSD is not running on node: rac2 ONS is enabled ONS daemon is running on node: rac1 ONS daemon is running on node: rac2 eONS is enabled eONS daemon is running on node: rac1 eONS daemon is running on node: rac2 [oracle@rac1 ~]$ srvctl config nodeapps -a -g -s -l -l homeion has been deprecated and will be ignored. VIP exists.:rac1 VIP exists.: /rac1-vip/10.160.1.106/255.255.255.0/eth0 VIP exists.:rac2 VIP exists.: /rac2-vip/10.160.1.107/255.255.255.0/eth0 GSD exists. ONS daemon exists. Local port 6100, remote port 6200 Name: LISTENER Network: 1, Owner: grid Home: /oracle/11.2.0/grid on node(s) rac2,rac1 End points: TCP:1521 查看数据库配置 [oracle@rac1 ~]$ srvctl config database -d orcl -a Database unique name: orcl Database name: orcl.lottemart.cn Oracle home: /oracle/oracle/product/11.2.0/dbhome_1 Oracle user: oracle Spfile: +ORCL_DATA/orcl/spfileorcl.ora Domain: idevelopment.info Start homeions: open Stop homeions: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: orcl Database instances: rac1,rac2 Disk Groups: DATA,FLASH Services: Database is enabled Database is administrator managed 检查 ASM状态及配置 [oracle@rac1 ~]$ srvctl status asm ASM is running on rac1,rac2 [oracle@rac1 ~$ srvctl config asm -a ASM home: /oracle/11.2.0/grid ASM listener: LISTENER ASM is enabled. 检查 TNS的状态及配置 [oracle@rac1 ~]$ srvctl status listener Listener LISTENER is enabled Listener LISTENER is running on node(s): rac1,rac2 [oracle@rac1 ~]$ srvctl config listener -a Name: LISTENER Network: 1, Owner: grid Home: /oracle/11.2.0/grid on node(s) rac2,rac1 End points: TCP:1521 检查 SCAN 的状态及配置 [oracle@rac1 ~]$ srvctl status scan SCAN VIP scan1 is enabled SCAN VIP scan1 is running on node rac1 [oracle@rac1 ~]$ srvctl config scan SCAN name: rac-cluster-scan.rac.localdomain, Network: 1/192.168.1.0/255.255.255.0/eth0 SCAN VIP name: scan1, IP: /rac-cluster-scan.rac.localdomain 检查 VIP的状态及配置 [oracle@rac1 ~]$ srvctl status vip -n rac1 VIP rac1-vip is enabled VIP rac1-vip is running on node: rac1 [oracle@rac1 ~]$ srvctl status vip -n rac2 VIP rac2-vip is enabled VIP rac2-vip is running on node: rac2 [oracle@rac1 ~]$ srvctl config vip -n rac1 VIP exists.:rac1 VIP exists.: /rac1-vip/192.168.11.14/255.255.255.0/eth0 [oracle@rac1 ~]$ srvctl config vip -n rac2 VIP exists.:rac2 VIP exists.: /rac2-vip/192.168.15/255.255.255.0/eth0