分类: Oracle
2008-04-14 16:39:02
作者:Vincent Chan 来源:
对于那些具有有限操作经验的用户而言,实施 Oracle RAC 10g 的前景令人生畏。但事情并不一定如此。
本指南将提供明确的步骤,引导您在 RHEL3 上将单一实例 Oracle 10g 数据库转换为 Oracle RAC。我将 Oracle 自动存储管理 (ASM)(一个构建到 Oracle 数据库内核中的集成文件系统和卷管理解决方案)用于 RAC 数据库存储,因为它不但提供了存储可靠性和高性能,还简化了数据库存储管理。
总的说来,有多种方法可以将数据库转换为 RAC。如果数据库比较小,则可以考虑在 ASM 上安装一个新的 RAC 数据库,并将当前数据库中的数据导出/导入到 RAC 数据库。对于较大的数据库,首选的方法是使用 RMAN 将数据库文件移植到 ASM。这里所要说明的方法是一个分为两个阶段的方法:首先,将数据移植到 ASM,然后将单一实例数据库转换为 RAC。如果您是对 ASM 不了解,建议您采用此移植方法,先熟悉 ASM,然后再进一步运用 ASM 和 RAC。(有关 Oracle ASM 的更多信息,请访问 或参考。)
本指南要求您对 RAC 体系结构有一个基本了解,对 Oracle 数据库和 Red Hat Enterprise Linux 的管理较为熟悉。有关详细信息,请参考。
概述
RAC 集群由两台运行 RHEL3(内核 2.4.21-27)的 Intel x86 服务器组成。每个节点都可以访问共享存储器并可以连接到公共网络和专用网络。
本指南分为以下步骤:
除非另行指定,否则应在两个节点上执行所有步骤。
以下是在转换到 RAC 之前的单一实例数据库环境的情况介绍:
主机名 |
实例名 |
数据库名 |
$ORACLE_BASE |
数据库文件存储 |
---|---|---|---|---|
salmon1 | prod1 | prod1 | /u01/app/oracle | ext3 |
和 RAC 数据库环境情况介绍:
主机名 |
实例名 |
数据库名 |
$ORACLE_BASE |
数据库文件存储 |
OCR 和 CRS Voting Disk |
---|---|---|---|---|---|
salmon1 | prod1a | prod1 | /u01/app/oracle | ASM | 原始 |
salmon2 | prod1b | prod1 | /u01/app/oracle | ASM | 原始 |
您将在每个节点上安装 Oracle Home 以实现冗余。ASM 和 RAC 实例在每个节点上共享同一 Oracle Home。
第 1 步:准备安装
1a.检验软件程序包版本。
安装所需的程序包。其他信息可以从中获得。
[root@salmon1]# rpm -qa | grep -i compat compat-libstdc++-7.3-2.96.128 compat-gcc-c++-7.3-2.96.128 compat-libstdc++-devel-7.3-2.96.128 compat-db-4.0.14-5 compat-glibc-7.x-2.2.4.32.6 compat-slang-1.4.5-5 compat-gcc-7.3-2.96.128 compat-pwdb-0.62-3 [root@salmon1]# [root@salmon1]# rpm -qa | grep openmotif openmotif-2.2.3-3.RHEL3 [root@salmon1]# [root@salmon1]# rpm -qa | grep -i gcc gcc-gnat-3.2.3-42 gcc-c++-ssa-3.5ssa-0.20030801.48 compat-gcc-c++-7.3-2.96.128 libgcc-ssa-3.5ssa-0.20030801.48 gcc-3.2.3-42 gcc-g77-3.2.3-42 gcc-java-3.2.3-42 gcc-ssa-3.5ssa-0.20030801.48 gcc-g77-ssa-3.5ssa-0.20030801.48 gcc-objc-ssa-3.5ssa-0.20030801.48 libgcc-3.2.3-42 gcc-c++-3.2.3-42 gcc-objc-3.2.3-42 gcc-java-ssa-3.5ssa-0.20030801.48 compat-gcc-7.3-2.96.128
1b.检验内核参数。
检验以下内核参数。其他信息可以从中获得。
[root@salmon1]# sysctl -a | grep shm kernel.shmmni = 4096 kernel.shmall = 2097152 kernel.shmmax = 2147483648 [root@salmon1]# sysctl -a | grep sem kernel.sem = 250 32000 100 128 [root@salmon1]# sysctl -a | grep -i ip_local net.ipv4.ip_local_port_range = 1024 65000 [root@salmon1]# sysctl -a | grep -i file-max fs.file-max = 65536
1c.创建 Oracle Base 目录、oracle 用户和组。
在第一个节点上使用下面的信息,在第二个节点上创建 oracle 用户以及 oinstall 和 dba 组。
[oracle@salmon1]$ hostname salmon1.dbsconsult.com [oracle@salmon1]$ [oracle@salmon1]$ id uid=500(oracle) gid=500(dba) groups=500(dba),501(oinstall) [oracle@salmon1]$ [oracle@salmon1]$ echo $ORACLE_BASE /u01/app/oracle
1d.编辑 oracle 用户环境文件。
[oracle@salmon1]$ more .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi export PATH=$PATH:$HOME/bin export ORACLE_SID=prod1 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.1.0 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export PATH=$ORACLE_HOME/bin:$PATH umask 022
1e.配置 oracle 用户 shell 限制。
[root@salmon1]# more /etc/security/limits.conf * soft nproc 2047 * hard nproc 16384 * soft nofile 1024 * hard nofile 65536 [root@salmon1]# grep pam_limits /etc/pam.d/login session required /lib/security/pam_limits.so
1f.配置公共网络和专用网络。
使用下面的信息对网络接口设备 eth0(公共)和 eth1(专用)进行必需的更改。
[root@salmon1]# redhat-config-network
主机名 |
IP 地址 |
类型 |
---|---|---|
salmon1.dbsconsult.com | 192.168.0.184 | 公共 (eth0) |
salmon2.dbsconsult.com | 192.168.0.185 | 公共 (eth0) |
salmon1.dbsconsult.com | 10.10.10.84 | 专用 (eth1) |
salmon2.dbsconsult.com | 10.10.10.85 | 专用 (eth1) |
salmon1-vip.dbsconsult.com | 192.168.0.186 | 虚拟 |
salmon2-vip.dbsconsult.com | 192.168.0.187 | 虚拟 |
1g.编辑 the /etc/hosts 文件。
127.0.0.1 localhost.localdomain localhost 10.10.10.84 sallocal1.dbsconsult.com sallocal1 10.10.10.85 sallocal2.dbsconsult.com sallocal2 192.168.0.184 salmon1.dbsconsult.com salmon1 192.168.0.185 salmon2.dbsconsult.com salmon2 192.168.0.186 salmon1-vip.dbsconsult.com salmon1-vip 192.168.0.187 salmon2-vip.dbsconsult.com salmon2-vip
验证主机名和配置的网络接口设备。
[root@salmon1]# hostname salmon1.dbsconsult.com [root@salmon1]# /sbin/ifconfig
1h.使用 SSH 建立用户等效性。
在集群就绪服务 (CRS) 和 RAC 安装过程中,Oracle Universal Installer (OUI) 必须能够以 oracle 的身份将软件复制到所有 RAC 节点,而不提示输入口令。在 Oracle 10g 中,可以使用 ssh 代替 rsh 完成此操作。
要建立用户等效性,请在两个节点上以 oracle 用户的身份生成用户的公钥和私钥。
[oracle@salmon1]$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_dsa): Created directory '/home/oracle/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/oracle/.ssh/id_dsa. Your public key has been saved in /home/oracle/.ssh/id_dsa.pub. The key fingerprint is: 5d:8c:42:97:eb:42:ae:52:52:e9:59:20:2a:d3:6f:59 oracle@salmon1.dbsconsult.com
在每个节点上测试连接。验证当您再次运行以下命令时,系统是否不提示您输入口令。
ssh salmon1 date ssh salmon2 date ssh sallocal1 date ssh sallocal2 date ssh salmon1.dbsconsult.com date ssh salmon2.dbsconsult.com date ssh sallocal1.dbsconsult.com date ssh sallocal2.dbsconsult.com date
1i.配置 hangcheck timer 内核模块。
hangcheck timer 内核模块监控系统的运行情况,并重新启动出现故障的 RAC 节点。它使用两个参数,即 hangcheck_tick(定义系统检查频率)和 hangcheck_margin(定义在重置 RAC 节点前的最大挂起延时)来确定节点是否出现故障。
在 /etc/rc.d/rc.local 中添加以下行以自动加载 hangcheck 模块。
[root@salmon1]# grep insmod /etc/rc.d/rc.local insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
1j.重新创建数据库控制文件。
在转换到 RAC 之前,确保在控制文件中正确调整以下项的大小。如果需要,请使用正确的设置重新创建数据库控制文件。
MAXLOGFILES MAXLOGMEMBERS MAXDATAFILES MAXINSTANCES MAXLOGHISTORY
1k.调整数据库缓冲区高速缓存。
从单一实例数据库转换到 RAC 时,数据库缓冲区高速缓存需要额外的内存。在 RAC 中,为每个块缓冲区高速缓存中的全局高速缓存服务 (GCS) 分配空间。所需的额外内存量取决于应用程序访问数据的方式,即同一个块是否高速缓存到多个实例中。
在演示实验中,我观察到缓冲区高速缓存的使用率增加了大约 8%。使用缓冲区高速缓存顾问确定最佳的缓冲区高速缓存大小,或切换到 Oracle 自动共享内存管理 (ASMM) 让 Oracle 进行控制。
第 2 步:将数据库移植到 ASM
ASM 实例与数据库实例之间的同步需要 Oracle 集群同步服务 (CSS) 后台程序。要启动 ASM 实例,必须启动 CSS 后台程序。安装或升级到 Oracle 数据库 10g 时,应该已经为单节点版本配置了 CSS,并且 CSS 应在系统重新启动时自动启动。
[root@salmon1]# ps a