Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 集群(三)

上一篇 / 下一篇  2008-09-05 09:50:06 / 个人分类:Oracle

20. 安装 Oracle 10g集群软件

仅在集群的一个 Oracle RAC 节点 (linux1) 上执行下列安装过程!Oracle Universal Installer 将把 Oracle 集群件软件安装到集群中的两个 Oracle RAC 节点。

您现在就可以安装该环境的“集群”部分:Oracle 集群件。在上一节中,您将 Oracle 集群件的安装文件下载并解压缩到linux1的目录/u01/app/oracle/orainstall/clusterware中。这是唯一需要执行安装的节点。

在 Oracle 集群件的安装过程中,系统将提示您提供相关的并要在 RAC 集群中配置的节点。当实际的安装开始时,它将使用我们在第 14 节(“为远程访问配置 RAC 节点”)中配置的远程访问把所需的软件复制到所有节点。

那 Oracle 集群件究竟是用来干什么的呢?它包含所有集群和数据库配置元数据以及多个适用于 RAC 的系统管理特性。通过它,DBA 可以将一个 Oracle 实例(或多个实例)注册和调用到集群。在通常的操作中,Oracle 集群件将通过一种特殊的 ping 操作向集群中配置的所有节点发送消息(通常称作“心跳”)。如果对任何节点的心跳检测失败,则它将检查 Oracle 集群件配置文件(位于共享磁盘上)以辨别是节点故障还是网络故障。

安装 Oracle 集群件后,用于安装 Oracle 10g数据库软件(下一节)的 Oracle Universal Installer (OUI) 将自动识别这些节点。与您将在本节中执行的 Oracle 集群件安装一样,Oracle 数据库 10g软件只需要从一个节点中运行。OUI 将把此软件程序包复制到 RAC 集群中配置的所有节点。

Oracle 集群件共享文件

系统将把由 Oracle 集群件使用的两个共享文件(实际上是文件组)存储到我们在前面创建的 Oracle 集群文件系统第 2 版 (OFCS2) 中。这两个共享 Oracle 集群件文件组是:

  • Oracle 集群注册表(OCR)

    • 文件 1:/u02/oradata/orcl/OCRFile
    • 文件 2:/u02/oradata/orcl/OCRFile_mirror
    • 大小:(2 * 100MB) = 200M

  • CRS 表决磁盘

    • 文件 1:/u02/oradata/orcl/CSSFile
    • 文件 2:/u02/oradata/orcl/CSSFile_mirror1
    • 文件 3:/u02/oradata/orcl/CSSFile_mirror2
    • 大小:(3 * 20MB) = 60MB

注意:不能对这两个共享 Oracle 集群件文件使用自动存储管理 (ASM):Oracle 集群注册表(OCR) 或CRS 表决磁盘文件。问题是只有这两个文件就绪并可以访问后才可以启动 Oracle 实例。要使 ASM 可用,应首先运行 ASM 实例。

另请注意,可以将这两个共享文件存储到 OCFS2、共享的原始设备或其他供应商的集群化文件系统中。

验证终端 Shell 环境

在启动 Oracle Universal Installer 之前,您应该首先验证您已登录到要从其运行安装程序的服务器(例如linux1),然后从控制台以root运行xhost命令以允许建立 X Server 连接。接下来,以oracle用户帐户登录。如果您正在使用远程客户端来连接到执行安装的节点(从 X Server 所在的工作站通过 SSH/Telnet 连接linux1),您将需要将DISPLAY变量设置为指向本地工作站。最后,验证集群中所有节点的远程访问/用户等效性:

验证服务器并启用 X Server 访问

#hostname
linux1
#xhost +
access control disabled, clients can connect from any host

oracle用户帐户登录并设置 DISPLAY(如果需要)

#su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$DISPLAY=<your local workstation>:0.0
$export DISPLAY

验证远程访问/用户等效性

验证您能够在将要从中运行 Oracle Installer 的 Linux 服务器上,不使用口令对集群中的所有其他 Linux 服务器运行安全 Shell命令(sshscp)或远程 Shell命令(rshrcp)。

使用安全 shell方法时,需要首先在任何新的终端 shell 会话上启用用户等效性然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为每个键输入在提示时生成的通行短语):

$exec /usr/bin/ssh-agent $SHELL$/usr/bin/ssh-addEnter passphrase for /u01/app/oracle/.ssh/id_rsa:xxxxxIdentity added:/u01/app/oracle/.ssh/id_rsa (/u01/app/oracle/.ssh/id_rsa)
Identity added:/u01/app/oracle/.ssh/id_dsa (/u01/app/oracle/.ssh/id_dsa)
$ssh linux1 "date;hostname"Thu Jun 28 03:06:34 EDT 2007
linux1
$ssh linux2 "date;hostname"Thu Jun 28 03:07:08 EDT 2007
linux2

使用远程 shell方法时,用户等效性通常在oracle用户帐户的/etc/hosts.equiv文件中定义,在所有新的终端 shell 会话上启用:

$rsh linux1 "date;hostname"Thu Jun 28 03:04:25 EDT 2007
linux1
$rsh linux2 "date;hostname"Thu Jun 28 03:04:59 EDT 2007
linux2

安装集群就绪服务

执行以下任务安装 Oracle 集群件:

$cd ~oracle
$/u01/app/oracle/orainstall/clusterware/runInstaller -ignoreSysPrereqs

屏幕名称答复
欢迎屏幕单击 Next
指定 Inventory 目录和证书接受默认值:
  Inventory 目录:/u01/app/oracle/oraInventory
  操作系统组名称:dba
指定主目录详细信息为 ORACLE_HOME(实际上是 $ORA_CRS_HOME,我将在本文中使用它)设置NamePath,如下所示:
  名称:OraCrs10g_home
  路径:/u01/app/oracle/product/crs
产品特定的必要检查安装程序将执行一系列的检查以确定节点是否满足安装和配置 Oracle 集群件软件的最低要求。如果任何检查失败,您将需要通过单击该复选框手动验证失败的检查。我所执行的安装通过了所有检查,未出现任何问题。

单击 Next 继续。

指定集群配置集群名称:crs
公共节点名称专用节点名称虚拟节点名称
linux1linux1-privlinux1-vip
linux2linux2-privlinux2-vip
指定网络接口用法
接口名称子网接口类型
eth0192.168.1.0公用
eth1192.168.2.0专用
指定 OCR 位置从带有 RAC 的 Oracle 数据库 10g第 2 版 (10.2) 开始,Oracle 集群件支持创建镜像的 OCR 文件,从而增强了集群可靠性。就本示例而言,我选择了通过保留默认选项“Normal Redundancy”镜像 OCR 文件:

指定 OCR 位置:/u02/oradata/orcl/OCRFile
指定 OCR 镜像位置:/u02/oradata/orcl/OCRFile_mirror

指定表决磁盘位置从带有 RAC 的 Oracle 数据库 10g第 2 版 (10.2) 开始,已经修改了 CSS,使您可以为 CSS 配置多个表决磁盘。在第 1 版 (10.1) 中,您只能配置一个表决磁盘。通过启用多个表决磁盘配置,您可以使用冗余的表决磁盘在独立的共享物理磁盘上为 RAC 数据库配置多个表决磁盘。该选项简化了 iSCSI 网络协议以及其他网络附件存储 (NAS) 存储解决方案的使用。注意,要利用多个表决磁盘的好处,必须至少配置三个表决磁盘。就本示例而言,我选择了通过保留默认选项“Normal Redundancy”镜像表决磁盘:

表决磁盘位置:/u02/oradata/orcl/CSSFile
其它表决磁盘 1 位置:/u02/oradata/orcl/CSSFile_mirror1
其它表决磁盘 2 位置:/u02/oradata/orcl/CSSFile_mirror2

总结

单击 Install 开始安装!

执行配置脚本安装完成后,将提示您运行orainstRoot.shroot.sh脚本。以“root”用户帐户在集群的两个 Oracle RAC 节点(从执行安装的节点开始)上打开一个新控制台窗口。

导航到/u01/app/oracle/oraInventory目录,并在 RAC 集群的所有节点上运行orainstRoot.sh


在集群中两个 Oracle RAC 节点(从执行安装的节点开始)上的同一个新控制台窗口中,以“root”用户帐户登录。

导航到/u01/app/oracle/product/crs目录并在集群中的每个节点(从执行安装的节点开始)上找到root.sh文件。在 RAC 集群的所有节点上运行root.sh文件,一次一个

您在所有节点上运行root.sh时将收到多个警告。可以忽略这些警告,没什么问题。

可能需要等一会儿才会运行root.sh。在最后一个节点上运行 root.sh 时,您将收到一个严重错误,其输出如下所示:

...
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
    linux1
    linux2
CSS is active on all nodes.
Waiting for the Oracle CRSD and EVMD to start
Oracle CRS stack installed and running under init(1M)
Running vipca(silent) for configuring nodeapps
The given interface(s), "eth0" is not public.Public interfaces should be used to configure virtual IPs.

此问题为 Oracle 10.2.0.1(Metalink 文章338924.1中有说明)所特有,需要在继续操作之前将其解决。最简单的变通方法是从出现错误的上一个节点中以 root 用户的身份手动重新运行 vipca (GUI)。请记住,vipca 是一个 GUI,需要根据您的 X 服务器设置 DISPLAY 变量:

#$ORA_CRS_HOME/bin/vipca

出现“VIP Configuration Assistant”时,我按如下所示回应屏幕提示:

  欢迎页面:单击 Next
  网络接口:只选择公共接口 - eth0
  集群节点的虚拟 IP:
      节点名称:linux1
      IP 别名:linux1-vip
      IP 地址:192.168.1.200
      子网掩码:255.255.255.0

      节点名称:linux2
      IP 别名:linux2-vip
      IP 地址:192.168.1.201
      子网掩码:255.255.255.0

  摘要:单击 Finish
  配置助手进度对话框:配置完成后单击 OK。
  配置结果:单击 Exit

返回到 OUI 并确认“Execute Configuration scripts”对话框窗口。

安装结束安装结束时,退出 OUI。

验证 Oracle 集群件安装

安装 Oracle 集群件后,可以运行几个测试来验证安装是否成功。在 RAC 集群的两个节点上运行下列命令。

检查集群节点

$/u01/app/oracle/product/crs/bin/olsnodes -n
linux1 1
linux2 2
检查 Oracle 集群件自动启动脚本
$ls -l /etc/init.d/init.*-r-xr-xr-x  1 root root  1951 Jun 28 08:57 /etc/init.d/init.crs
-r-xr-xr-x  1 root root  4714 Jun 28 08:57 /etc/init.d/init.crsd
-r-xr-xr-x  1 root root 35394 Jun 28 08:57 /etc/init.d/init.cssd
-r-xr-xr-x  1 root root  3190 Jun 28 08:57 /etc/init.d/init.evmd

 


21. 安装 Oracle 数据库 10g软件

仅在集群 (linux1) 的一个 Oracle RAC 节点上执行下列安装过程!Oracle Universal Installer 将把 Oracle 数据库软件安装到集群中的两个 Oracle RAC 节点。

成功安装 Oracle 集群件软件后,下一步是安装具有 RAC 的 Oracle 数据库 10g第 2 版 (10.2.0.1.0)。

就本示例而言,您在安装该软件时将不使用“Create Database”选项。而是将在安装后使用数据库创建助手 (DBCA) 创建数据库。

与前面章节中的 Oracle 集群件安装一样,Oracle10g数据库软件只需从一个节点运行。OUI 将把此软件程序包复制到 RAC 集群中配置的所有节点。

验证终端 Shell 环境

如前面的章节(安装 Oracle10g 集群件软件)中所讨论的,需要首先为集群中所有节点的远程访问和用户等效性配置终端 shell 环境然后才能运行 Oracle Universal Installer。注意,您可以利用前面的小节中使用的同一终端 shell 会话,您不必采取下面描述的关于设置远程访问和DISPLAY变量的任何操作:

oracle用户帐户登录并设置 DISPLAY(如果需要)

#su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$DISPLAY=<your local workstation>:0.0
$export DISPLAY

验证远程访问/用户等效性

验证您能够在将要从中运行 Oracle Installer 的 Linux 服务器上,不使用口令对集群中的所有其他 Linux 服务器运行安全 Shell命令(sshscp)或远程 Shell命令(rshrcp)。

使用安全 shell方法时,需要首先在任何新的终端 shell 会话上启用用户等效性然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为每个键输入在提示时生成的通行短语):

$exec /usr/bin/ssh-agent $SHELL$/usr/bin/ssh-addEnter passphrase for /u01/app/oracle/.ssh/id_rsa:xxxxxIdentity added:/u01/app/oracle/.ssh/id_rsa (/u01/app/oracle/.ssh/id_rsa)
Identity added:/u01/app/oracle/.ssh/id_dsa (/u01/app/oracle/.ssh/id_dsa)
$ssh linux1 "date;hostname"Thu Jun 28 03:06:34 EDT 2007
linux1
$ssh linux2 "date;hostname"Thu Jun 28 03:07:08 EDT 2007
linux2

使用远程 shell方法时,用户等效性通常在oracle用户帐户的/etc/hosts.equiv文件中定义,在所有新的终端 shell 会话上启用:

$rsh linux1 "date;hostname"Thu Jun 28 03:04:25 EDT 2007
linux1
$rsh linux2 "date;hostname"Thu Jun 28 03:04:59 EDT 2007
linux2

运行 Oracle 集群验证实用程序

安装 Oracle 数据库软件之前,我们应该使用集群验证实用程序 (CVU) 运行以下数据库安装前检查。

注意:有关如何配置 CVU 的说明,可在本文前面的“使用集群验证实用程序的前提条件”一节中找到。

$cd /u01/app/oracle/orainstall/clusterware/cluvfy$./runcluvfy.sh stage -pre dbinst -n linux1,linux2 -r 10gR2 -verbose

查看 CVU 报表。注意,该报表将包含我们在检查 CRS 安装前任务时收到的错误:找不到一组合适的 VIP 接口,以及找不到 RHEL4 Update 中不存在的特定 RPM 程序包。可以忽略这两个错误,没什么问题。

安装 Oracle 数据库 10g第 2 版软件

使用以下命令安装 Oracle 数据库 10g第 2 版软件:

$cd ~oracle
$/u01/app/oracle/orainstall/database/runInstaller -ignoreSysPrereqs

屏幕名称答复
欢迎屏幕单击 Next
选择安装类型我选择了 Enterprise Edition 选项。
指定主目录详细信息为 ORACLE_HOME 设置NamePath,如下所示:
  名称:OraDb10g_home1
  路径:/u01/app/oracle/product/10.2.0/db_1
指定硬件集群安装模式选择 Cluster Installation 选项,然后选择所有可用节点。单击 Select All 选择所有服务器:linux1 和 linux2。

如果安装此时停止,且有 RAC 节点的状态显示为“Node not reachable”,则执行以下检查:

  • 确保 Oracle 集群件正在所讨论的节点上运行。
  • 确保您能够从执行安装的节点访问所讨论的节点。
产品特定的必要检查安装程序将执行一系列的检查以确定节点是否满足安装和配置 Oracle 数据库软件的最低要求。如果任何检查失败,您将需要通过单击该复选框手动验证失败的检查。

单击 Next 继续。

选择数据库配置选择选项“Install database software only”。

记住,我们将在单独的步骤中使用 DBCA 创建集群化数据库。

总结

单击 Install 开始安装!

Root 脚本窗口 - 运行 root.sh安装完成后,将提示您运行root.sh脚本。需要记住的是,需要在 RAC 集群的所有节点一次一个地(从运行数据库安装的节点开始)运行 root.sh 脚本。

首先,以 root 用户帐户在安装 Oracle 10g数据库软件的节点上打开一个新控制台窗口。我打开的是“linux1”。

导航到/u01/app/oracle/product/10.2.0/db_1目录,运行root.sh

在集群的所有节点上运行root.sh脚本后,返回 OUI 并确认“Execute Configuration scripts”对话框窗口。

安装结束安装结束时,退出 OUI。

 


22. 安装 Oracle 10g随附 CD 软件

仅在集群 (linux1) 的一个 Oracle RAC 节点上执行下列安装过程!Oracle 10g随附 CD 软件将由 Oracle Universal Installer 安装到集群的两个 Oracle RAC 节点。

成功安装 Oracle 数据库软件后,下一步是安装 Oracle 10g第 2 版随附 CD 软件 (10.2.0.1.0)。

请注意,这是一个可选步骤。就本指南而言,我的测试数据库将通常使用 Java 虚拟机 (Java VM) 和 OracleinterMedia,因此将需要安装 Oracle 数据库 10g随附 CD。要执行的安装类型将为Oracle Database 10g Products安装类型。

此安装类型包括用于提高 Java 性能的原生编译的 Java 库 (NCOMP) 文件。如果不安装 NCOMP 文件,则在使用 Java VM 的数据库升级为修补版时,将发生ORA-29558:JAccelerator (NCOMP) not installed错误。

验证终端 Shell 环境

如前面的章节(安装 Oracle10g 数据库软件)中所讨论的,需要首先为集群中所有节点的远程访问和用户等效性配置终端 shell 环境然后才能运行 Oracle Universal Installer。注意,您可以利用前面的小节中使用的同一终端 shell 会话,您不必采取下面描述的关于设置远程访问和DISPLAY变量的任何操作:

oracle用户帐户登录并设置 DISPLAY(如果需要)

#su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$DISPLAY=<your local workstation>:0.0
$export DISPLAY

验证远程访问/用户等效性

验证您能够在将要从中运行 Oracle Installer 的 Linux 服务器上,不使用口令对集群中的所有其他 Linux 服务器运行安全 Shell命令(sshscp)或远程 Shell命令(rshrcp)。

使用安全 shell方法时,需要首先在任何新的终端 shell 会话上启用用户等效性然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为每个键输入在提示时生成的通行短语):

$exec /usr/bin/ssh-agent $SHELL$/usr/bin/ssh-addEnter passphrase for /u01/app/oracle/.ssh/id_rsa:xxxxxIdentity added:/u01/app/oracle/.ssh/id_rsa (/u01/app/oracle/.ssh/id_rsa)
Identity added:/u01/app/oracle/.ssh/id_dsa (/u01/app/oracle/.ssh/id_dsa)
$ssh linux1 "date;hostname"Thu Jun 28 03:06:34 EDT 2007
linux1
$ssh linux2 "date;hostname"Thu Jun 28 03:07:08 EDT 2007
linux2

使用远程 shell方法时,用户等效性通常在oracle用户帐户的/etc/hosts.equiv文件中定义,在所有新的终端 shell 会话上启用:

$rsh linux1 "date;hostname"Thu Jun 28 03:04:25 EDT 2007
linux1
$rsh linux2 "date;hostname"Thu Jun 28 03:04:59 EDT 2007
linux2

安装 Oracle10g随附 CD 软件

使用以下命令安装 Oracle10g随附 CD 软件:

$cd ~oracle
$/u01/app/oracle/orainstall/companion/runInstaller -ignoreSysPrereqs

屏幕名称答复
欢迎屏幕单击 Next
选择要安装的产品选择“Oracle Database 10g Products 10.2.0.1.0”选项。
指定主目录详细信息将 ORACLE_HOMENamePath的目标设置为前面安装的 Oracle10g 数据库软件的目标,如下所示:
  名称:OraDb10g_home1
  路径:/u01/app/oracle/product/10.2.0/db_1
指定硬件集群安装模式默认情况下,将选择 Cluster Installation 选项以及集群中的所有可用节点。保留这些默认选项,然后单击 Next 继续。

如果安装此时停止,且有 RAC 节点的状态显示为“Node not reachable”,则执行以下检查:

  • 确保 Oracle 集群件正在所讨论的节点上运行。
  • 确保您能够从执行安装的节点访问所讨论的节点。
产品特定的必要检查安装程序将执行一系列的检查以确定节点是否满足安装和配置随附 CD 软件的最低要求。如果任何检查失败,您将需要通过单击该复选框手动验证失败的检查。我所执行的安装通过了所有检查,未出现任何问题。

单击 Next 继续。

总结在 Summary 屏幕上,单击 Install 开始安装!
安装结束安装结束时,退出 OUI。



23. 创建 TNS 监听器进程

仅在集群 (linux1) 的一个 Oracle RAC 节点上执行下列配置过程!Network Configuration Assistant (NETCA) 将在集群的两个 Oracle RAC 节点上的集群化配置中设置 TNS 监听器。

DBCA 需要在 RAC 集群的所有节点上配置并运行 Oracle TNS 监听器进程,然后它才能创建集群化数据库。

只需在集群的一个节点上执行 TNS 监听器创建过程。执行所有更改并将这些更改复制到集群的所有节点上。在一个节点(我将使用linux1)上,启动 NETCA 并执行创建新 TNS 监听器进程的过程,同时配置节点的本地访问权限。

验证终端 Shell 环境

如前面的章节(安装 Oracle10g CD 随附软件)中所讨论的,需要首先为集群中所有节点的远程访问和用户等效性配置终端 shell 环境然后才能运行 Network Configuration Assistant (NETCA)。注意,您可以利用前面的小节中使用的同一终端 shell 会话,您不必采取下面描述的关于设置远程访问和DISPLAY变量的任何操作:

oracle用户帐户登录并设置 DISPLAY(如果需要)

#su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$DISPLAY=<your local workstation>:0.0
$export DISPLAY

验证远程访问/用户等效性

验证您能够在将要从中运行 Oracle Installer 的 Linux 服务器上,不使用口令对集群中的所有其他 Linux 服务器运行安全 Shell命令(sshscp)或远程 Shell命令(rshrcp)。

使用安全 shell方法时,需要首先在任何新的终端 shell 会话上启用用户等效性然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为每个键输入在提示时生成的通行短语):

$exec /usr/bin/ssh-agent $SHELL$/usr/bin/ssh-addEnter passphrase for /u01/app/oracle/.ssh/id_rsa:xxxxxIdentity added:/u01/app/oracle/.ssh/id_rsa (/u01/app/oracle/.ssh/id_rsa)
Identity added:/u01/app/oracle/.ssh/id_dsa (/u01/app/oracle/.ssh/id_dsa)
$ssh linux1 "date;hostname"Thu Jun 28 03:06:34 EDT 2007
linux1
$ssh linux2 "date;hostname"Thu Jun 28 03:07:08 EDT 2007
linux2

使用远程 shell方法时,用户等效性通常在oracle用户帐户的/etc/hosts.equiv文件中定义,在所有新的终端 shell 会话上启用:

$rsh linux1 "date;hostname"Thu Jun 28 03:04:25 EDT 2007
linux1
$rsh linux2 "date;hostname"Thu Jun 28 03:04:59 EDT 2007
linux2

运行 Network Configuration Assistant

要启动 NETCA,请运行以下命令:

$netca &
下表将引导您为我们 RAC 环境创建一个新的 Oracle 监听器。

屏幕名称答复
选择 Oracle 类型
网络服务配置
选择 Cluster Configuration
选择要配置的节点选择所有节点:linux1 和 linux2。
配置类型选择 Listener configuration。
监听器配置 — 接下来 6 个屏幕后续屏幕现在与其他常规监听器配置相似。您只需接受后续 6 个屏幕的默认参数即可:
  What do you want to do:Add
  Listener name:LISTENER
  Selected protocols:TCP
  Port number:1521
  Configure another listener:No
  Listener configuration complete![ Next ]
您将返回到此 Welcome (Type of Configuration) 屏幕。
配置类型选择 Naming Methods configuration。
命名方法配置后续屏幕是:
  Selected Naming Methods:Local Naming
  Naming Methods configuration complete![ Next ]
您将返回到此 Welcome (Type of Configuration) 屏幕。
配置类型单击 Finish 退出 NETCA。

Oracle TNS 监听器进程现在应在 RAC 集群的所有节点上运行:

$hostname
linux1
$ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_LINUX1

=====================

$hostname
linux2
$ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_LINUX2

 


24. 创建 Oracle 集群数据库

仅在集群 (linux1) 的一个 Oracle RAC 节点上执行数据库创建过程!

我们将使用 DBCA 创建集群化数据库。

在执行 DBCA 前,确保为$ORACLE_BASE/product/10.2.0/db_1环境正确设置了$ORACLE_HOME$PATH

在试图开始创建集群化数据库之前,还应确保已安装的所有服务(Oracle TNS 监听器、Oracle 集群件进程等)正在运行。

验证终端 Shell 环境

如前面的章节(创建 TNS 监听器进程)中所讨论的,需要首先为集群中所有节点的远程访问和用户等效性配置终端 shell 环境然后才能运行 Database Configuration Assistant (DBCA)。注意,您可以利用前面的小节中使用的同一终端 shell 会话,您不必采取下面描述的关于设置远程访问和DISPLAY变量的任何操作:

oracle用户帐户登录并设置 DISPLAY(如果需要)

#su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$DISPLAY=<your local workstation>:0.0
$export DISPLAY

验证远程访问/用户等效性

验证您能够在将要从中运行 Oracle Installer 的 Linux 服务器上,不使用口令对集群中的所有其他 Linux 服务器运行安全 Shell命令(sshscp)或远程 Shell命令(rshrcp)。

使用安全 shell方法时,需要首先在任何新的终端 shell 会话上启用用户等效性然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为每个键输入在提示时生成的通行短语):

$exec /usr/bin/ssh-agent $SHELL$/usr/bin/ssh-addEnter passphrase for /u01/app/oracle/.ssh/id_rsa:xxxxxIdentity added:/u01/app/oracle/.ssh/id_rsa (/u01/app/oracle/.ssh/id_rsa)
Identity added:/u01/app/oracle/.ssh/id_dsa (/u01/app/oracle/.ssh/id_dsa)
$ssh linux1 "date;hostname"Thu Jun 28 03:06:34 EDT 2007
linux1
$ssh linux2 "date;hostname"Thu Jun 28 03:07:08 EDT 2007
linux2

使用远程 shell方法时,用户等效性通常在oracle用户帐户的/etc/hosts.equiv文件中定义,在所有新的终端 shell 会话上启用:

$rsh linux1 "date;hostname"Thu Jun 28 03:04:25 EDT 2007
linux1
$rsh linux2 "date;hostname"Thu Jun 28 03:04:59 EDT 2007
linux2

运行 Oracle 集群验证实用程序

创建 Oracle 集群化数据库之前,我们应该使用集群验证实用程序 (CVU) 运行以下数据库配置检查。

注意:有关如何配置 CVU 的说明,可在本文前面的“使用集群验证实用程序的前提条件”一节中找到。

$cd /u01/app/oracle/orainstall/clusterware/cluvfy$./runcluvfy.sh stage -pre dbcfg -n linux1,linux2 -d ${ORACLE_HOME} -verbose

查看 CVU 报表。注意,该报表将包含我们在检查 CRS 安装前任务时收到的错误:找不到一组合适的 VIP 接口。可以忽略该错误,没什么问题。

创建集群化数据库

要开始数据库创建过程,运行以下命令:

$dbca &
屏幕名称答复
欢迎屏幕选择“Oracle Real Application Clusters database”。
操作选择Create a Database
节点选择单击Select All按钮选择所有服务器:linux1 和 linux2。
数据库模板选择Custom Database
数据库标识选择:
  全局数据库名称:orcl.idevelopment.info
  SID 前缀:orcl

我将 idevelopment.info 用于数据库域。您可以使用任何域。请记住,此域不必为有效的 DNS 域。

管理选项保留此处的默认选项,即“Configure the Database with Enterprise Manager / Use Database Control for Database Management”。
数据库证书我选择Use the Same Password for All Accounts。输入口令(两次)并确保此口令不是以数字开头。
存储选项对于本指南,我们将选择use Automatic Storage Management (ASM)
创建 ASM 实例提供要用于新 ASM 实例的 SYS 口令。

此外,从 Oracle 10g 第 2 版开始,ASM 实例服务器参数文件 (SPFILE) 需要位于共享磁盘上。您将需要修改“Create server parameter file (SPFILE)”的默认条目以驻留在 OCFS2 分区上,如下所示:/u02/oradata/orcl/dbs/spfile+ASM.ora。所有其他选项可以保留其默认值。

然后将有一个对话框询问您是否要创建并启动 ASM 实例。选择OK按钮确认此对话框。

OUI 将立即在 RAC 集群的所有节点上创建并启动 ASM 实例。

ASM 磁盘组

首先,单击Create New按钮。这将弹出“Create Disk Group”窗口,其中显示了我们在前面使用 ASMLib 创建的四个卷。

如果在本文前面部分创建的卷没有显示在“Select Member Disks”窗口中:(ORCL:VOL1、ORCL:VOL2、ORCL:VOL3 和 ORCL:VOL4),则单击“Change Disk Discovery Path”按钮并输入“ORCL:VOL*”。

对于第一个“Disk Group Name”,我使用了字符串“ORCL_DATA1”。在“Select Member Disks”窗口中选择前两个 ASM 卷(ORCL:VOL1 和 ORCL:VOL2)。将“Redundancy”设置为“Normal”。

确认此窗口中的所有值均正确后,单击[OK]按钮。这将显示“ASM Disk Group Creation”对话框。完成 ASM 磁盘组创建过程时,您将返回到“ASM Disk Groups”窗口。

再次单击Create New按钮。对于第二个“Disk Group Name”,我使用了字符串“FLASH_RECOVERY_AREA”。在“Select Member Disks”窗口中选择后两个 ASM 卷(ORCL:VOL3 和 ORCL:VOL4)。将“Redundancy”设置为“Normal”。

确认此窗口中的所有值均正确后,单击[OK]按钮。这将显示“ASM Disk Group Creation”对话框。

完成 ASM 磁盘组创建过程后,您将返回到“ASM Disk Groups”窗口,其中创建并选择了两个磁盘组。使用新建的磁盘组名称“ORCL_DATA1”旁边的复选框选择一个磁盘组(确保未选择“FLASH_RECOVERY_AREA”的磁盘组),然后单击[Next]继续。

数据库文件位置

我选择使用默认值,即使用 Oracle Managed Files:

数据库区域:+ORCL_DATA1

恢复配置选中“Specify Flash Recovery Area”选项。

对于 Flash Recovery Area,单击 [Browse] 按钮并选择磁盘组名“+FLASH_RECOVERY_AREA”。

我使用的磁盘组的大小约为 118GB。我的快速恢复区大小为 (118620MB - 10%) = 106758 MB。

数据库内容我将所有数据库组件(和目标表空间)设置为它们的默认值,但选择 Example Schemas 也完全可以。由于我们安装了 Oracle 随附 CD 软件,因此该选项可用。
数据库服务对于此测试配置,单击Add,然后输入orcl_taf作为“Service Name”。将这两个实例设置为 Preferred,并为“TAF Policy”选择“Basic”。
初始化参数根据您的环境更改任意参数。我保留了所有这些参数的默认设置。
数据库存储根据您的环境更改任意参数。我保留了所有这些参数的默认设置。
创建选项保留默认选项 Create Database。另外,我总是会选上 "Generate Database Creation Scripts"。单击Finish启动数据库创建过程。在确认数据库创建报告和脚本生成对话框后,数据库创建过程将启动。

在“Summary”屏幕上单击OK

数据库创建结束在数据库创建结束时,退出 DBCA。

退出 DBCA 时,将弹出另一对话框,指示它正在启动所有 Oracle 实例以及 HA 服务“orcl_taf”。这可能需要几分钟的时间才能完成。完成时,所有窗口和对话框将关闭。

完成 DBCA 后,您就启动了一个功能完善的 Oracle RAC 集群!

创建orcl_taf服务

在创建 Oracle 集群化数据库的过程中,您添加了一个名为orcl_taf的服务,我们将用它来连接启用了 TAF 的数据库。在我的多个安装中,均将此服务添加到了tnsnames.ora中,但从未将其作为每个 Oracle 实例的服务更新过。

使用以下命令来验证已成功添加orcl_taf服务:

SQL>show parameter serviceNAME                 TYPE        VALUE
-------------------- ----------- --------------------------------
service_names        string      orcl.idevelopment.info, orcl_taf
如果定义的唯一服务是用于orcl.idevelopment.info的,则您将需要手动将此服务添加到两个实例中:
SQL>show parameter serviceNAME                 TYPE        VALUE
-------------------- ----------- --------------------------
service_names        string      orcl.idevelopment.info

SQL>alter system set service_names =2'orcl.idevelopment.info, orcl_taf.idevelopment.info' scope=both;

 


25. 验证 TNS 联网文件

确保在集群的两个 Oracle RAC 节点上配置 TNS 联网文件!

listener.ora

我们已经在第 23 节中介绍了如何为集群化环境创建 TNS 监听器配置文件 (listener.ora)。应正确配置listener.ora文件且无需对它修改。

为清楚起见,我将节点linux1listener.ora文件副本包含在了本指南的支持文件中。我还包含了tnsnames.ora文件的副本,该文件由 Oracle 配置并可以用于测试透明应用程序故障切换 (TAF)。此文件应已在集群的两个 Oracle RAC 节点上进行了配置。

您可以将这些条目中的任何条目包含在需要访问集群化数据库的其他客户端计算机上。

从外部客户端连接集群化数据库

这是一个可选步骤,但我要执行它以便确认正确配置了 TNS 文件。使用其他安装了 Oracle(9i或 10g)的计算机(例如,连接网络的 Windows 计算机)并从集群的任一节点添加为集群化数据库创建的 TNS 条目(位于tnsnames.ora中)。

然后使用在tnsnames.ora文件中定义的所有可用服务名称连接集群化数据库:

C:\>sqlplus system/manager@orcl2C:\>sqlplus system/manager@orcl1C:\>sqlplus system/manager@orcl_tafC:\>sqlplus system/manager@orcl

 


26. 创建/更改表空间

创建集群化数据库时,我们将所有表空间设置为它们的默认大小。如果您将一个大型驱动器用作共享存储,则可能想创建一个大小可以调整的测试数据库。

以下是几个可为测试数据库修改和创建所有表空间的 SQL 命令。请记住,此示例中使用的数据库文件名称(OMF 文件)可能与 Oracle 为您的环境创建的数据库文件名称不同。可以使用以下查询确定环境的文件名:

SQL>select tablespace_name, file_name2from dba_data_files3union4select tablespace_name, file_name5from dba_temp_files;TABLESPACE_NAME     FILE_NAME
--------------- --------------------------------------------------
EXAMPLE         +ORCL_DATA1/orcl/datafile/example.257.570913311
INDX            +ORCL_DATA1/orcl/datafile/indx.270.570920045
SYSAUX          +ORCL_DATA1/orcl/datafile/sysaux.260.570913287
SYSTEM          +ORCL_DATA1/orcl/datafile/system.262.570913215
TEMP            +ORCL_DATA1/orcl/tempfile/temp.258.570913303
UNDOTBS1        +ORCL_DATA1/orcl/datafile/undotbs1.261.570913263
UNDOTBS2        +ORCL_DATA1/orcl/datafile/undotbs2.265.570913331
USERS           +ORCL_DATA1/orcl/datafile/users.264.570913355

$sqlplus "/ as sysdba"SQL>create user scott identified by tiger default tablespace users;SQL>grant dba, resource, connect to scott;SQL>alter database datafile '+ORCL_DATA1/orcl/datafile/users.264.570913355' resize 1024m;SQL>alter tablespace users add datafile '+ORCL_DATA1' size 1024m autoextend off;SQL>create tablespace indx datafile '+ORCL_DATA1' size 1024m2autoextend on next 50m maxsize unlimited3extent management local autoallocate4segment space management auto;SQL>alter database datafile '+ORCL_DATA1/orcl/datafile/system.262.570913215' resize 800m;SQL>alter database datafile '+ORCL_DATA1/orcl/datafile/sysaux.260.570913287' resize 500m;SQL>alter tablespace undotbs1 add datafile '+ORCL_DATA1' size 1024m2autoextend on next 50m maxsize 2048m;SQL>alter tablespace undotbs2 add datafile '+ORCL_DATA1' size 1024m2autoextend on next 50m maxsize 2048m;SQL>alter database tempfile '+ORCL_DATA1/orcl/tempfile/temp.258.570913303' resize 1024m;
以下是我为我的测试数据库环境定义的表空间快照:
Status    Tablespace Name TS Type      Ext. Mgt.Seg.Mgt.Tablespace Size  Used (in bytes) Pct.Used
--------- --------------- ------------ ---------- --------- ------------------ ------------------ ---------
ONLINE    UNDOTBS1        UNDO         LOCAL      MANUAL       1,283,457,024      85,065,728        7
ONLINE    SYSAUX          PERMANENT    LOCAL      AUTO           524,288,000      275,906,560        53
ONLINE    USERS           PERMANENT    LOCAL      AUTO         2,147,483,648          131,072         0
ONLINE    SYSTEM          PERMANENT    LOCAL      MANUAL         838,860,800      500,301,824        60
ONLINE    EXAMPLE         PERMANENT    LOCAL      AUTO             157,286,400         83,820,544        53
ONLINE    INDX            PERMANENT    LOCAL      AUTO         1,073,741,824           65,536         0
ONLINE    UNDOTBS2        UNDO         LOCAL      MANUAL       1,283,457,024        3,801,088         0
ONLINE    TEMP            TEMPORARY    LOCAL      MANUAL       1,073,741,824       27,262,976         3
                                                            ------------------ ------------------ ---------
avg                                                                                                  22
sum                                                            8,382,316,544      976,355,328

8 rows selected.

 


27. 验证 RAC 集群和数据库配置

应在集群的两个 Oracle RAC 节点上执行以下 RAC 验证检查!然而,对于本文,我将只从linux1执行检查。

本节提供了几个可用于验证 Oracle RAC 10g配置的srvctl命令和 SQL 查询。

有五个为 SRVCTL 定义的节点级任务:

  • 添加和删除节点级应用程序
  • 设置和取消设置节点级应用程序的环境
  • 管理节点应用程序
  • 管理 ASM 实例
  • 启动和停止一组包含虚拟 IP 地址、监听器、Oracle 通知服务和 Oracle 企业管理器代理的程序(出于维护目的)。

所有实例和服务的状态

$srvctl status database -d orclInstance orcl1 is running on node linux1
Instance orcl2 is running on node linux2

单个实例的状态

$srvctl status instance -d orcl -i orcl2Instance orcl2 is running on node linux2

在数据库全局命名服务的状态

$srvctl status service -d orcl -s orcl_tafService orcl_taf is running on instance(s) orcl2, orcl1

特定节点上节点应用程序的状态

$srvctl status nodeapps -n linux1VIP is running on node:linux1
GSD is running on node:linux1
Listener is running on node:linux1
ONS daemon is running on node:linux1

ASM 实例的状态

$srvctl status asm -n linux1ASM instance +ASM1 is running on node linux1.

列出配置的所有数据库

$srvctl config databaseorcl

显示 RAC 数据库的配置

$srvctl config database -d orcllinux1 orcl1 /u01/app/oracle/product/10.2.0/db_1
linux2 orcl2 /u01/app/oracle/product/10.2.0/db_1

显示指定集群数据库的所有服务

$srvctl config service -d orclorcl_taf PREF:orcl2 orcl1 AVAIL:

显示节点应用程序的配置 —(VIP、GSD、ONS、监听器)

$srvctl config nodeapps -n linux1 -a -g -s -lVIP exists.:/linux1-vip/192.168.1.200/255.255.255.0/eth0:eth1
GSD exists.
ONS daemon exists.
Listener exists.

显示 ASM 实例的配置

$srvctl config asm -n linux1+ASM1 /u01/app/oracle/product/10.2.0/db_1

集群中所有正在运行的实例

SELECT
inst_id
, instance_number inst_no
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;INST_ID  INST_NO INST_NAME  PAR STATUS  DB_STATUS    STATE     HOST
-------- -------- ---------- --- ------- ------------ --------- -------
1        1 orcl1      YES OPEN    ACTIVE       NORMAL    linux1
2        2 orcl2      YES OPEN    ACTIVE       NORMAL    linux2

位于磁盘组中的所有数据文件

select name from v$datafile
union
select member from v$logfile
union
select name from v$controlfile
union
select name from v$tempfile;NAME
-------------------------------------------
+FLASH_RECOVERY_AREA/orcl/controlfile/current.258.570913191
+FLASH_RECOVERY_AREA/orcl/onlinelog/group_1.257.570913201
+FLASH_RECOVERY_AREA/orcl/onlinelog/group_2.256.570913211
+FLASH_RECOVERY_AREA/orcl/onlinelog/group_3.259.570918285
+FLASH_RECOVERY_AREA/orcl/onlinelog/group_4.260.570918295
+ORCL_DATA1/orcl/controlfile/current.259.570913189
+ORCL_DATA1/orcl/datafile/example.257.570913311
+ORCL_DATA1/orcl/datafile/indx.270.570920045
+ORCL_DATA1/orcl/datafile/sysaux.260.570913287
+ORCL_DATA1/orcl/datafile/system.262.570913215
+ORCL_DATA1/orcl/datafile/undotbs1.261.570913263
+ORCL_DATA1/orcl/datafile/undotbs1.271.570920865
+ORCL_DATA1/orcl/datafile/undotbs2.265.570913331
+ORCL_DATA1/orcl/datafile/undotbs2.272.570921065
+ORCL_DATA1/orcl/datafile/users.264.570913355
+ORCL_DATA1/orcl/datafile/users.269.570919829
+ORCL_DATA1/orcl/onlinelog/group_1.256.570913195
+ORCL_DATA1/orcl/onlinelog/group_2.263.570913205
+ORCL_DATA1/orcl/onlinelog/group_3.266.570918279
+ORCL_DATA1/orcl/onlinelog/group_4.267.570918289
+ORCL_DATA1/orcl/tempfile/temp.258.570913303

21 rows selected.

属于“ORCL_DATA1”磁盘组的所有 ASM 磁盘

SELECT path
FROM   v$asm_disk
WHERE  group_number IN (select group_number
from v$asm_diskgroup
where name = 'ORCL_DATA1');PATH
----------------------------------
ORCL:VOL1
ORCL:VOL2

 


28. 启动/停止集群

此时,我们已经完全安装并配置了 Oracle RAC 10g并拥有了一个功能完善的集群化数据库。

至此完成所有工作后,您可能会问“那我又怎样启动和停止服务呢?”如果您遵循了本指南中的说明,则所有服务(包括 Oracle 集群件、所有 Oracle 实例、企业管理器数据库控制台等)应在 Linux 节点每次重新引导时自动启动。

但有时您可能想要关闭某个节点,然后手动重新启动它。或者,您可能发现企业管理器没有启动它而需要启动它。本节提供了启动和停止集群环境的命令(使用SRVCTL)。

确保您是以oracleUNIX 用户登录的。我们将从linux1运行本节中的所有命令:

#su - oracle
$hostname
linux1

停止 Oracle RAC 10g环境

第一步是停止 Oracle 实例。当此实例(和相关服务)关闭后,关闭 ASM 实例。最后,关闭节点应用程序(虚拟 IP、GSD、TNS 监听器和 ONS)。

$export ORACLE_SID=orcl1$emctl stop dbconsole$srvctl stop instance -d orcl -i orcl1$srvctl stop asm -n linux1$srvctl stop nodeapps -n linux1

启动 Oracle RAC 10g环境

第一步是启动节点应用程序(虚拟 IP、GSD、TNS 监听器和 ONS)。当成功启动节点应用程序后,启动 ASM 实例。最后,启动 Oracle 实例(和相关服务)以及企业管理器数据库控制台。

$export ORACLE_SID=orcl1$srvctl start nodeapps -n linux1$srvctl start asm -n linux1$srvctl start instance -d orcl -i orcl1$emctl start dbconsole

使用 SRVCTL 启动/停止所有实例

启动/停止所有实例及其启用的服务。我只是觉得有意思就把此步骤作为关闭所有实例的一种方法加进来了!

$srvctl start database -d orcl$srvctl stop database -d orcl

 


29. 透明的应用程序故障切换 (TAF)

企业通常需要他们的企业应用程序提供 99.99%(甚至 99.999%)的可用性。想一想,要确保全年停机时间不超过 0.5 小时或者甚至没有停机时间得花费多大代价!为了满足众多这种高可用性要求,企业正投资于可以在一个参与系统出现故障时提供自动故障切换的机制。就 Oracle 数据库的可用性而言,Oracle RAC 10g通过它的高级故障切换机制提供了一个卓越的解决方案。Oracle RAC 10g包含了提供持续可用性所需的必要组件,这些组件均在一个集群配置中工作;当集群中的某个参与系统出现故障时,将把用户自动移植到其他可用系统。

透明的应用程序故障切换 (TAF) 选件是 Oracle RAC 10g一个负责处理故障切换的主要组件。它将把所有断开的数据库连接(和进程)重新连接到集群的其他节点上。故障切换对用户是完全透明的。

这最后一节简短介绍了 TAF 在 Oracle RAC 10g中的工作方式。请注意,对 Oracle RAC 10g中的故障切换进行全面介绍可能需要单独的一篇文章,我在此处只想提供一个简短概述。

一个重要的说明是,TAF 自动在 OCI 库中发生。也就是说,您的应用程序(客户端)代码不需要更改便可以利用 TAF。但您需要在 Oracle TNS 文件 tnsnames.ora 中执行某些配置步骤。(请记住,直到编写本文时,由于 Java 瘦客户端从不读取 tnsnames.ora,因此它将无法参与 TAF。)

设置 tnsnames.ora 文件

在演示 TAF 之前,我们需要验证在一个非 RAC 客户端计算机(如果您有一台安装了 Windows 计算机)上的 tnsnames.ora 文件中存在一个有效的条目。确保您安装了 Oracle RDBMS 软件。(实际上,您只需要在客户端上安装 Oracle 软件。)

在本指南的创建集群化数据库过程中,我们创建了一个将用于测试 TAF 的名为 ORCL_TAF 的新服务。它为负载均衡和故障切换提供了所有必需的配置参数。可以将此条目的内容复制到客户端计算机(本示例中使用了我的 Windows 便携式计算机)上的 %ORACLE_HOME%\network\admin\tnsnames.ora 文件中:

...
ORCL_TAF =
(DESCRIPTION=
(ADDRESS = (PROTOCOL = TCP)(HOST = linux1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = linux2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME = orcl_taf.idevelopment.info)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
      )
    )
  )
...
查看会话的故障切换信息的 SQL 查询

以下 SQL 查询可以用来查看一个会话的故障切换类型、故障切换方法和是否发生了故障切换。我们将在这个例子中自始至终使用这个查询。

COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11

SELECT
instance_name
, host_name
, NULL AS failover_type
, NULL AS failover_method
, NULL AS failed_over
FROM v$instance
UNION
SELECT
NULL
, NULL
, failover_type
, failover_method
, failed_over
FROM v$session
WHERE username = 'SYSTEM';

TAF 演示

从 Windows 计算机(或其他非 RAC 客户端计算机)中,以SYSTEM用户登录使用orcl_taf服务的集群化数据库:

C:\> sqlplus system/manager@orcl_taf

COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11

SELECT
instance_name
, host_name
, NULL AS failover_type
, NULL AS failover_method
, NULL AS failed_over
FROM v$instance
UNION
SELECT
NULL
, NULL
, failover_type
, failover_method
, failed_over
FROM v$session
WHERE username = 'SYSTEM';

INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------- ------------- --------------- -----------
orcl1         linux1
SELECT        BASIC           NO

不要注销上面的 SQL*Plus 会话!

我们已经运行了上面的查询,现在我们应该使用abort选项来关闭linux1上的orcl1实例。要执行这一操作,您可以使用srvctl命令行实用程序,如下所示:

# su - oracle
$ srvctl status database -d orcl
Instance orcl1 is running on node linux1
Instance orcl2 is running on node linux2

$ srvctl stop instance -d orcl -i orcl1 -o abort

$ srvctl status database -d orcl
Instance orcl1 is not running on node linux1
Instance orcl2 is running on node linux2
现在我们返回到我们的 SQL 会话,然后重新运行缓冲中的 SQL 语句:
COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11

SELECT
instance_name
, host_name
, NULL AS failover_type
, NULL AS failover_method
, NULL AS failed_over
FROM v$instance
UNION
SELECT
NULL
, NULL
, failover_type
, failover_method
, failed_over
FROM v$session
WHERE username = 'SYSTEM';


INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------- ------------- --------------- -----------
orcl2         linux2
SELECT        BASIC           YES

SQL> exit

从上面的演示中,我们可以看到现在已将上述会话故障切换到了linux2的实例orcl2上。

 


30. 故障诊断

确保 RAC 节点名没有出现在回送地址中

确保在/etc/hosts文件的回送地址中包含节点名(linux1linux2)。如果该机器名出现在回送地址条目中,如下所示:

127.0.0.1linux1localhost.localdomain localhost
需要按如下所示将其删除:
127.0.0.1 localhost.localdomain localhost

如果 RAC 节点名出现在回送地址中,您在 RAC 安装期间将接收到以下错误信息:

ORA-00603:ORACLE server session terminated by fatal error
或者
ORA-29702:error occurred in Cluster Group Service operation

确保在 /etc/hosts 文件中为回送地址定义了本地主机

确保环回地址的localhost.localdomainlocalhost条目包括在每个 Oracle RAC 节点的/etc/hosts文件中:

127.0.0.1        localhost.localdomain   localhost
如果/etc/hosts文件中不存在localhost条目,Oracle 集群件将不能启动应用程序资源,尤其是 ONS 进程。系统将显示错误信息“Failed to get IP for localhost”,并将其写入到 ONS 日志文件中。例如:
CRS-0215 could not start resource 'ora.linux1.ons'.Check log file
"/u01/app/oracle/product/crs/log/linux1/racg/ora.linux1.ons.log"
for more details.
ONS 日志文件会包含类似如下的内容:

Oracle Database 10g CRS Release 10.2.0.1.0 Production Copyright 1996, 2005 Oracle.All rights reserved.
2007-04-14 13:10:02.729: [ RACG][3086871296][13316][3086871296][ora.linux1.ons]:Failed to get IP for localhost (1)
Failed to get IP for localhost (1)
Failed to get IP for localhost (1)
onsctl:ons failed to start
...

在所有的集群节点上设置正确的日期和时间

在安装 Oracle 集群件、数据库以及随附 CD 期间,Oracle Universal Installer (OUI) 将首先将软件安装到运行该安装程序的本地节点(即 linux1)。然后,将该软件以远程方式复制到集群中的其余节点(即 linux2)。在远程复制过程中,OUI 将在每个远程节点上执行 UNIX“tar”命令,以提取进行了存档和复制的文件。如果执行安装的节点上的日期和时间大于其要进行复制的节点上的日期和时间,那么 OUI 将在“tar”中引发一个错误,以指示其在试图提取带有时间戳的文件时失败。

Error while copying directory 
/u01/app/oracle/product/crs with exclude file list 'null' to nodes 'linux2'.
[PRKC-1002 :All the submitted commands did not execute successfully]
---------------------------------------------
linux2:
/bin/tar:./bin/lsnodes:time stamp 2006-09-13 09:21:34 is 735 s in the future
/bin/tar:./bin/olsnodes:time stamp 2006-09-13 09:21:34 is 735 s in the future
...(more errors on this node)

请注意,尽管这看起来像 OUI 中一个严重的错误,但您完全可以将其看作是一个警告而忽略。“tar”命令 DOES 确实提取了文件;然而,当您在远程节点上执行文件列表时(使用ls -l),它们将缺少时间字段,直到服务器上的时间大于该文件的时间戳。

在启动以上任何一个所述安装之前,确保尽可能将集群的每个成员节点设置为相同的时间和日期。由于两个 Oracle RAC 节点使用相同的参考 Network Time Protocol 服务器,因此 Oracle 强烈建议使用多数操作系统的Network Time Protocol功能来执行该操作。

然而,访问 Network Time Protocol 服务器并非始终可用。在这种情况下,为集群中的节点手动设置日期和时间,确保要从其中执行软件安装的节点 (linux1) 的时间和日期小于集群中所有其他节点 (linux2)。我一般使二者之间相差 20 秒,如以下示例所示:

设置 linux1 的日期和时间:

#date -s "6/25/2007 23:00:00"

设置 linux2 的日期和时间:

#date -s "6/25/2007 23:00:20"

本文中所述的双节点 RAC 配置没有使用 Network Time Protocol 服务器。

OCFS2 — 调整 O2CB 心跳阈值

在本文之前的版本中(与将 iSCSI 用作共享存储相反,将 FireWire 用作共享存储),我能够安装和配置 OCFS2、格式化新卷并最后安装位于新 OCFS2 卷上的 Oracle 集群件(及其所需的两个共享文件,即表决磁盘和 OCR 文件)。我能够安装 Oracle 集群件并可以使用 FireWire 看到共享驱动器,但当集群件软件在两个节点上运行大约 15 分钟后,我收到了许多锁定和挂起。挂起的节点总是变化不定(在我的示例中为linux1linux2)。此外,无论是 I/O 负载较高还是根本没有,对该节点崩溃(挂起)都没有影响。

查看 OCFS2 的跟踪文件后,对表决磁盘的访问显然太慢(超过了 O2CB 心跳阈值)并导致 Oracle 集群件软件(以及节点)崩溃。控制台会显示类似如下的一条消息:

...
Index 0:took 0 ms to do submit_bio for read
Index 1:took 3 ms to do waiting for read completion
Index 2:took 0 ms to do bio alloc write
Index 3:took 0 ms to do bio add page write
Index 4:took 0 ms to do submit_bio for write
Index 5:took 0 ms to do checking slots
Index 6:took 4 ms to do waiting for write completion
Index 7:took 1993 ms to do msleep
Index 8:took 0 ms to do allocating bios for read
Index 9:took 0 ms to do bio alloc read
Index 10:took 0 ms to do bio add page read
Index 11:took 0 ms to do submit_bio for readIndex 12:took 10006 ms to do waiting for read completion
(13,3):o2hb_stop_all_regions:1888 ERROR:stopping heartbeat on all active regions.
Kernel panic - not syncing:ocfs2 is very sorry to be fencing this system by panicing

我所采用的解决方案是,将 O2CB 的心跳阈值从其默认值 7 提高到 61。(有些设置可能需要将该阈值设为更高的值。)这是一个可配置参数,用于计算节点“隔离”自身所用的时间。在“将 O2CB 配置为在引导时启动并调整 O2CB 心跳阈值”一节中,我们在 OCFS2 的安装与配置过程中调整了该值。如果在 OCFS2 中您遇到了核心的严重问题并需提高该心跳阈值,请使用“将 O2CB 配置为在引导时启动并调整 O2CB 心跳阈值”一节中的所述过程。 如果您当前使用的是 OCFS2 工具的早期版本(ocfs2-tools 1.2.2-1 之前的版本),可以按以下方法来手工调整 O2CB 心跳阈值。

首先,我们了解一下如何确定 O2CB 心跳阈值的当前设置。为此,可以查询/proc文件系统,如下所示:

#cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold7
我们可以看到,该阈值为 7,但该值的具体含义是什么?其实,它用在以下公式中确定隔离时间(秒):
[隔离时间(秒)] = (O2CB_HEARTBEAT_THRESHOLD - 1) * 2
因此,如果 O2CB 心跳阈值为 7,则隔离时间将为:
(7 - 1) * 2 = 12 秒
如果我们需要一个更大的阈值 (如 120 秒),则需将 O2CB_HEARTBEAT_THRESHOLD 调整为 61:
(61 - 1) * 2 = 120 秒

现在我们了解一下如何手动将 O2CB 心跳阈值从 7 增大为 61。这需要在集群的所有 Oracle RAC 节点上执行以下操作。首先需要修改文件/etc/sysconfig/o2cb

TAG: enterprise Enterprise linux Linux LINUX oracle Oracle RAC 集群

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2009-01-08  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 3903
  • 日志数: 67
  • 建立时间: 2007-10-12
  • 更新时间: 2008-11-11

RSS订阅

Open Toolbar