第 1 页   第 2 页   第 3 页


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

仅用于开发和测试;不支持生产部署!


20. 安装 Oracle 11g 集群件软件

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

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

在 Oracle 集群件的安装过程中,系统将提示您提供要在 Oracle RAC 集群中配置的节点。将软件安装到本地节点后,它将使用我们在第 14 节(“使用 SSH 为远程访问配置 RAC 节点”)中配置的远程访问把所需的软件复制到所有其余节点。

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

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

Oracle 集群件共享文件

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

 

  • Oracle 集群注册表 (OCR)

     

    • 文件 1:/u02/oradata/orcl/OCRFile
    • 文件 2:/u02/oradata/orcl/OCRFile_mirror
    • 大小:(2 * 250 MB) = 500 MB

     

  • CRS 表决磁盘

     

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


不能对这两个共享 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 方法时,需要首先在终端 shell 会话上启用用户等效性 然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为 RSA 键输入在提示时生成的通行短语):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)

$ ssh linux1 "date;hostname"
Fri Oct 12 14:44:31 EDT 2007
linux1

$ ssh linux2 "date;hostname"
Fri Oct 12 14:45:02 EDT 2007
linux2
                                

安装 Oracle 集群件

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

$ cd ~oracle
$ /home/oracle/orainstall/clusterware/runInstaller
                              

 

屏幕名称 答复
Welcome 屏幕 单击 Next
Specify Inventory directory and credentials 接受默认值:
   Inventory directory:/u01/app/oraInventory
   Operating System group name:oinstall
Specify Home Details 为 ORACLE_HOME(实际上是 $ORA_CRS_HOME,我将在本文中使用它)设置 NamePath,如下所示:
   Name:OraCrs11g_home
   Path:/u01/app/crs
Product-Specific Prerequisite Checks 安装程序将执行一系列的检查以确定节点是否满足安装和配置 Oracle 集群件软件的最低要求。如果任何检查失败,您将需要通过单击该复选框手动验证失败的检查。我所执行的安装通过了所有检查,未出现任何问题。

单击 Next 继续。

Specify Cluster Configuration Cluster Name:linux_cluster

 

Public Node Name Private Node Name Virtual Host Name
linux1 linux1-priv linux1-vip
linux2 linux2-priv linux2-vip
Specify Network Interface Usage
Interface Name Subnet Interface Type
eth0 192.168.1.0 Public
eth1 192.168.2.0 Private
Specify OCR Location 从带有 RAC 的 Oracle 数据库 10g 第 2 版 (10.2) 开始,Oracle 集群件支持创建镜像的 OCR 文件,从而增强了集群可靠性。通过启用多个 OCR 文件配置,您可以使用冗余的 OCR 文件在独立的共享物理磁盘上为 RAC 数据库配置多个 OCR 文件。就本示例而言,我选择了通过保留默认选项“Normal Redundancy”镜像 OCR 文件:

Specify OCR Location:/u02/oradata/orcl/OCRFile
Specify OCR Mirror Location:/u02/oradata/orcl/OCRFile_mirror

Specify Voting Disk Location 从带有 RAC 的 Oracle 数据库 10g 第 2 版 (10.2) 开始,已经修改了 CSS,使您可以为 CSS 配置多个表决磁盘。在第 1 版 (10.1) 中,您只能配置一个表决磁盘。通过启用多个表决磁盘配置,您可以使用冗余的表决磁盘在独立的共享物理磁盘上为 RAC 数据库配置多个表决磁盘。注意,要利用多个表决磁盘的好处,必须至少配置三个表决磁盘。就本示例而言,我选择了通过保留默认选项“Normal Redundancy”镜像表决磁盘:

Voting Disk Location:/u02/oradata/orcl/CSSFile
Additional Voting Disk 1 Location:/u02/oradata/orcl/CSSFile_mirror1
Additional Voting Disk 2 Location:/u02/oradata/orcl/CSSFile_mirror2

Summary

单击 Install 开始安装!

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

导航到 /u01/app/oraInventory 目录,在 RAC 集群的所有节点上运行 orainstRoot.sh(从执行安装的节点开始,每次一个)。

在两个节点上执行 orainstRoot.sh 之后,验证“/etc/oraInst.loc”文件的权限为 644 (-rw-r--r--) 且所有者为 root。如果 oracle 用户帐户不具备该文件的读权限,在 Oracle 安装期间可能会出现问题 —“the location of the oraInventory directory cannot be determined”。例如,在 Oracle 集群件安装后(运行 Oracle 集群验证实用程序时),将出现以下错误:“CRS is not installed on any of the nodes。”如果 /etc/oraInst.loc 的权限设置不当,则运行 root.sh 之前,您无法在两个节点上运行 orainstRoot.sh。此外,umask 设置可能为 off — 应该为 0022。如果 /etc/oraInst.loc 的权限设置不当,在 Oracle RAC 集群中的两个节点上运行以下命令以解决此问题:

# chmod 644 /etc/oraInst.loc
# ls -l /etc/oraInst.loc
-rw-r--r-- 1 root root 56 Oct 12 21:52 /etc/oraInst.loc
                                      

 




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

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

如果 Oracle 集群件主目录是 ORACLE_BASE 目录的子目录(这种情况永远不应出现!),您将在运行两个节点上的 root.sh 脚本时收到有关权限的几个警告。可以安全地忽略任何有关非 root 拥有的目录的警告。

可能需要等一会儿才会运行 root.sh 脚本。在最后一个节点上运行 root.sh 时,您将收到类似以下的输出,指明安装成功:

...
Cluster Synchronization Services is active on these nodes.
        linux1
        linux2
Cluster Synchronization Services is active on all the 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

Creating VIP application resource on (2) nodes...
Creating GSD application resource on (2) nodes...
Creating ONS application resource on (2) nodes...
Starting VIP application resource on (2) nodes...
Starting GSD application resource on (2) nodes...
Starting ONS application resource on (2) nodes...


Done.

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

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

验证 Oracle 集群件安装

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

检查集群节点

$ $ORA_CRS_HOME/bin/olsnodes -n
linux1 1
linux2 2
                                

配置 Oracle 集群件功能

$ $ORA_CRS_HOME/bin/crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host
----------------------------------------------------------------------
ora.linux1.gsd application    0/5    0/0    ONLINE    ONLINE    linux1
ora.linux1.ons application    0/3    0/0    ONLINE    ONLINE    linux1
ora.linux1.vip application    0/0    0/0    ONLINE    ONLINE    linux1
ora.linux2.gsd application    0/5    0/0    ONLINE    ONLINE    linux2
ora.linux2.ons application    0/3    0/0    ONLINE    ONLINE    linux2
ora.linux2.vip application    0/0    0/0    ONLINE    ONLINE    linux2
                                

检查 CRS 状态

$ $ORA_CRS_HOME/bin/crsctl check crs
Cluster Synchronization Services appears healthy
Cluster Ready Services appears healthy
Event Manager appears healthy
                                

检查 Oracle 集群件自动启动脚本

$ ls -l /etc/init.d/init.*
-rwxr-xr-x 1 root root  2236 Oct 12 22:08 /etc/init.d/init.crs
-rwxr-xr-x 1 root root  5290 Oct 12 22:08 /etc/init.d/init.crsd
-rwxr-xr-x 1 root root 49416 Oct 12 22:08 /etc/init.d/init.cssd
-rwxr-xr-x 1 root root  3859 Oct 12 22:08 /etc/init.d/init.evmd
                                

 


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

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

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

就本示例而言,您在安装 Oracle 数据库软件时将不使用“Create Database”选项。所有安装完成后,您将使用 Database Configuration Assistant (DBCA) 创建数据库。

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

验证终端 Shell 环境

如前面的章节(安装 Oracle 11g 集群件软件)中所讨论的,需要首先为集群中所有节点的远程访问和用户等效性配置终端 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 方法时,需要首先在终端 shell 会话上启用用户等效性 然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为 RSA 键输入在提示时生成的通行短语):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)

$ ssh linux1 "date;hostname"
Fri Oct 12 14:44:31 EDT 2007
linux1

$ ssh linux2 "date;hostname"
Fri Oct 12 14:45:02 EDT 2007
linux2
                                

运行 Oracle 集群验证实用程序

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

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

$ cd /home/oracle/orainstall/clusterware
$ ./runcluvfy.sh stage -pre dbinst -n linux1,linux2 -r 11gR1 -verbose
                              

查看 CVU 报表。注意,CVU 执行的所有检查都应报告为 已通过,然后才能继续 Oracle RAC 安装。

安装 Oracle 数据库 11g 第 1 版软件

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

$ cd ~oracle
$ /home/oracle/orainstall/database/runInstaller
                              

 

屏幕名称 答复
Welcome 屏幕 单击 Next
Select Installation Type 选择要执行的安装类型:“Enterprise Standard Edition”、“Standard Edition”或“Custom”。

针对本文,我选择了“Custom”选项。

Install Location 选择 Oracle BaseNamePath,如下所示:

   Oracle Base:/u01/app/oracle

   Name:OraDb11g_home1
   Path:/u01/app/oracle/product/11.1.0/db_1

Specify Hardware Cluster Installation Mode 选择“Cluster Installation”选项,然后选择所有可用节点。单击“Select All”选择所有服务器:linux1 和 linux2。

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

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

可能会收到一个关于可用的交换空间不满足其最低要求的错误:

                                         
Checking available swap space requirements...
Expected result: 3036MB
Actual Result: 1983MB

大多数情况下,您会具有所需的最小交换空间(如上所示),可以安全地忽略该错误。只需单击“Checking available swap space requirements...”复选框,然后单击 Next 继续。

Available Product Components 选择您打算用于数据库环境的组件。
Privileged Operating System Groups 选择将用于每个 Oracle 组名的 UNIX 组,如下所示:

   Database Administrator (OSDBA) Group:dba
   Database Operator (OSOPER) Group:oper
   ASM Administrator (OSASM) Group:asm

Create Database 选择选项“Install database software only”。

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

Oracle Configuration Manager Registration 我保留了默认选项,不启用 Oracle 配置管理器。
Summary

单击 Install 开始安装!

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

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

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

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

 


22. 安装 Oracle 数据库 11g 示例(以前的随附 CD)

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

成功安装 Oracle 数据库软件后,下一步是安装 Oracle 数据库 11g 示例 (11.1.0.6.0)。请注意,这是一个可选步骤。

验证终端 Shell 环境

如前面的章节(安装 Oracle 数据库 11g 软件)中所讨论的,需要首先为集群中所有节点的远程访问和用户等效性配置终端 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 方法时,需要首先在终端 shell 会话上启用用户等效性 然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为 RSA 键输入在提示时生成的通行短语):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)

$ ssh linux1 "date;hostname"
Fri Oct 12 14:44:31 EDT 2007
linux1

$ ssh linux2 "date;hostname"
Fri Oct 12 14:45:02 EDT 2007
linux2
                                

安装 Oracle 数据库 11g 示例

使用以下命令安装 Oracle 数据库 11g 示例:

$ cd ~oracle
$ /home/oracle/orainstall/examples/runInstaller
                              

 

屏幕名称 答复
Welcome 屏幕 单击 Next
Specify Home Details 将 ORACLE_HOME NamePath 的目标设置为前面安装的 Oracle11g 数据库软件的目标,如下所示:
   Name:OraDb11g_home1
   Path:/u01/app/oracle/product/11.1.0/db_1
Specify Hardware Cluster Installation Mode 默认情况下,将选择 Cluster Installation 选项以及集群中的所有可用节点。保留这些默认选项,然后单击 Next 继续。

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

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

单击 Next 继续。

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

 


23. 创建 TNS 监听器进程

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

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

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

验证终端 Shell 环境

如前面的章节(安装 Oracle 数据库 11g 示例)中所讨论的,需要首先为集群中所有节点的远程访问和用户等效性配置终端 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 方法时,需要首先在终端 shell 会话上启用用户等效性 然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为 RSA 键输入在提示时生成的通行短语):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)

$ ssh linux1 "date;hostname"
Fri Oct 12 14:44:31 EDT 2007
linux1

$ ssh linux2 "date;hostname"
Fri Oct 12 14:45:02 EDT 2007
linux2
                                

运行 Network Configuration Assistant

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

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

 

屏幕名称 答复
Select the Type of Oracle
Net Services Configuration
选择“Cluster configuration”。
Select the nodes to configure 选择所有节点:linux1 和 linux2。
Type of Configuration 选择“Listener configuration”。
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) 屏幕。
Type of Configuration 选择“Naming Methods configuration”。
Naming Methods Configuration 后续屏幕是:
   Selected Naming Methods: Local Naming
   Naming Methods configuration complete![ Next ]
您将返回到此 Welcome (Type of Configuration) 屏幕。
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

$ $ORA_CRS_HOME/bin/crs_stat ora.linux1.LISTENER_LINUX1.lsnr
NAME=ora.linux1.LISTENER_LINUX1.lsnr
TYPE=application
TARGET=ONLINE
STATE=ONLINE on linux1

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

$ hostname
linux2

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



$ $ORA_CRS_HOME/bin/crs_stat ora.linux2.LISTENER_LINUX2.lsnr
NAME=ora.linux2.LISTENER_LINUX2.lsnr
TYPE=application
TARGET=ONLINE
STATE=ONLINE on linux2
                              

 


24. 创建 Oracle 集群数据库

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

我们将使用 Database Configuration Assistant (DBCA) 创建集群化数据库。

在执行 DBCA 前,确保为 $ORACLE_BASE/product/11.1.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 方法时,需要首先在终端 shell 会话上启用用户等效性 然后再尝试运行 OUI。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为 RSA 键输入在提示时生成的通行短语):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)

$ ssh linux1 "date;hostname"
Fri Oct 12 14:44:31 EDT 2007
linux1

$ ssh linux2 "date;hostname"
Fri Oct 12 14:45:02 EDT 2007
linux2
                                

运行 Oracle 集群验证实用程序

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

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

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

查看 CVU 报表。注意,CVU 执行的所有检查都应报告为 已通过,然后才能创建 Oracle 集群化数据库。

创建集群化数据库

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

$ dbca &
                              

 

屏幕名称 答复
Welcome 屏幕 选择 Oracle Real Application Clusters database
Operations 选择 Create a Database
Node Selection 单击 Select All 按钮选择所有服务器:linux1 和 linux2。
Database Templates 选择 Custom Database
Database Identification 选择:
   Global Database Name: orcl.idevelopment.info
   SID Prefix:orcl

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

Management Option 保留默认选项 Configure Enterprise Manager / Configure Database Control for local management
Database Credentials 我选择 Use the Same Administrative Password for All Accounts。输入口令(两次)并确保此口令不是以数字开头。
Storage Options 对于本指南,我们将选择 use Automatic Storage Management (ASM)
Create ASM Instance 提供要用于新 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 Disk Groups

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

 

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

对于第一个“Disk Group Name”,我使用了 ORCL_DATA1。在“Select Member Disks”窗口中选择前两个 ASM 卷(ORCL:VOL1ORCL: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:VOL3ORCL:VOL4)。将“Redundancy”设置为 Normal

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

使用新建的磁盘组名称“ORCL_DATA1”旁边的复选框选择一个磁盘组(确保未选择“FLASH_RECOVERY_AREA”的磁盘组),然后单击 [Next] 继续。

Database File Locations

保留默认选项,使用 Oracle 管理文件:

Database Area: +ORCL_DATA1

Recovery Configuration 选中 Specify Flash Recovery Area 选项。

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

我使用的磁盘组的大小约为 118GB。定义快速恢复区大小时,使用整个卷减去 10% — (118-10%=106 GB)。我使用了 106 GB 的 Flash Recovery Area Size (108544 MB)。

Database Content 我将所有数据库组件(和目标表空间)设置为它们的默认值,但选择 Sample Schemas 也完全可以。自从我们安装了 Oracle Database 11g 示例,就有该选项。
Initialization Parameters 根据您的环境更改任意参数。我保留了所有这些参数的默认设置。
Security Settings Oracle 强烈建议使用 Oracle 11g 新的、增强的安全设置。对于本文,我选择默认设置 Keep the enhanced 11g default security settings 。注意,使用 DBCA 创建数据库后可以修改这些安全设置。
Automatic Maintenance Tasks 我保留了默认设置 Enable automatic maintenance tasks
Database Storage 根据您的环境更改任意参数。我保留了所有这些参数的默认设置。
Creation Options 保留默认选项 Create Database。我还始终选择 Generate Database Creation Scripts。单击 Finish 启动数据库创建过程。出现数据库创建报表和脚本生成对话框后,数据库创建将启动。

在“Summary”屏幕上单击 OK

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

退出 DBCA 后,在大约 30-60 秒内,您不会收到来自对话框窗口的任何反馈。一段时间后,将出现另一个对话框,指明系统正在启动集群数据库及其所有实例。这可能需要几分钟的时间才能完成。完成时,所有窗口和对话框将关闭。



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

 


25. 安装后任务 —(可选)

本章描述可应用于新的 Oracle 11g 以增强可用性和数据库管理的几个可选任务。

在 RAC 环境中启用存档日志

无论是单个实例还是集群化数据库,Oracle 都会跟踪对数据库块的所有更改并记录到联机重做日志文件 中。在 Oracle RAC 环境中,每个实例将具有自己的联机重做日志文件集,称为线程。每个 Oracle 实例将以循环方式使用其联机重做日志组。一个联机重做日志填充之后,Oracle 将转至下一个联机重做日志。如果数据库处于“存档日志模式”,Oracle 将创建该联机重做日志的一个副本,然后再对其进行重用。一个线程至少必须包含两个联机重做日志(或联机重做日志组)。对于单个实例的配置也同样如此。单个实例至少必须包含两个联机重做日志(或联机重做日志组)。

联机重做日志文件的大小完全独立于另一个实例的重做日志大小。尽管在大多数配置中该大小是相同的,但是该大小可能会随每个节点的负载和备份/恢复注意事项而异。还值得一提的是,每个实例都具有对自己的联机重做日志文件的独占式写访问权限。但是在正确配置的 RAC 环境中,如果某个实例异常中断,每个实例都可以读取该实例的当前联机重做日志文件以执行实例恢复。因此,联机重做日志需要位于一个共享存储设备上(就像数据库文件一样)。

正如本文前面所提到的那样,Oracle 以循环方式写入其联机重做日志文件。当前的联机重做日志填充之后,Oracle 将切换到下一个联机重做日志。为简化介质恢复,Oracle 允许 DBA 将数据库置于“存档日志模式”,以在联机重做日志填充后(并且得到重用之前)创建它的副本。该过程称为存档。

利用 Database Configuration Assistant (DBCA),用户可以将一个新数据库配置为存档日志模式,但是大多数 DBA 在最初创建数据库期间选择跳过该选项。在这种情况下,数据库没有处于存档日志模式,只需将数据库置于存档日志模式。但是请注意,这将需要短暂的数据库中断。从 Oracle RAC 配置的一个节点,执行以下任务将支持 RAC 的数据库置于存档日志模式。对于本文,我将使用节点 linux1 运行 orcl1 实例:

 

  1. 登录到一个节点(即 linux1),通过在当前实例中将 cluster_database 设置为 FALSE 来禁用集群实例参数:
    $ sqlplus "/ as sysdba"
    SQL> alter system set cluster_database=false scope=spfile sid='orcl1';
                                      
  2. 关闭所有 访问集群化数据库的实例:
    $ srvctl stop database -d orcl
                                      
  3. 使用本地实例,挂载 数据库:
    $ sqlplus "/ as sysdba"
    SQL> startup mount
                                      
  4. 启用存档:
    SQL> alter database archivelog;
                                      
  5. 通过在当前实例中将实例参数 cluster_database 修改为 TRUE,重新启用对集群的支持:
    SQL> alter system set cluster_database=true scope=spfile sid='orcl1';
                                      
  6. 关闭本地实例:
    SQL> shutdown immediate
                                      
  7. 使用 srvctl 备份所有 实例:
    $ srvctl start database -d orcl
                                      
  8. 登录到本地实例,验证存档日志模式已启用:
    $ sqlplus "/ as sysdba"
    SQL> archive log list
    Database log mode               Archive Mode
    Automatic archival Enabled
    Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 58 Next log sequence to archive 59 Current log sequence 59


启用存档日志模式后,RAC 配置中的每个实例都可以自动存档重做日志!

下载并安装自定义 Oracle 数据库脚本

DBA 依赖 Oracle 的数据字典视图和动态性能视图以支持并更好地管理他们的数据库。尽管这些视图提供一个简单方便的机制来查询有关数据库的重要信息,但是拥有一个用于查询这些视图的准确、随时可用的 SQL 脚本集合还是有帮助的。

在本节中,您将下载并安装 Oracle DBA 脚本集合,用于管理数据库的多个方面,包括空间管理、性能、备份、安全性和会话管理。可以使用以下链接 http://www.idevelopment.info/data/Oracle/DBA_scripts/common.zip 下载 Oracle DBA 脚本存档。使用 oracle 用户帐户将 common.zip 存档下载到集群中每个节点的 $ORACLE_BASE 目录。对于本文,将 common.zip 存档复制到 /u01/app/oracle。接下来,将存档文件解压缩到 $ORACLE_BASE 目录。

例如,使用 oracle 用户帐户在 Oracle RAC 集群中的每个节点上执行以下命令:

$ mv common.zip /u01/app/oracle
$ cd /u01/app/oracle
$ unzip common.zip
                              

最后一步是验证(或设置)当前 UNIX shell 相应的环境变量,以确保在任何目录中 Oracle SQL 脚本都可以从 SQL*Plus 内运行。对于 UNIX,验证以下环境变量已设置并包含在您的登录 shell 脚本中:

ORACLE_PATH= $ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
export ORACLE_PATH
                              

ORACLE_PATH 环境变量应该已在 .bash_profile 登录脚本中设置,该登录脚本是在为 oracle 用户帐户创建登录脚本一节中创建的。

既然 Oracle DBA 脚本已解压缩并且 UNIX 环境变量 ($ORACLE_PATH) 已设置为相应的目录,现在您登录到 SQL*Plus 后应该能够在 $ORACLE_BASE/common/oracle/sql 中运行任何 SQL 脚本。例如,要在以 DBA 用户身份登录到 Oracle 数据库后查询表空间信息,使用以下命令:

SQL> @dba_tablespaces

Status    Tablespace  TS         Ext.   Seg.     Tablespace     Used         Pct. 
          Name        Type       Mgt.   Mgt.     Size           (in bytes)   Used
--------- ----------- ---------- ------ -------- -------------  ------------ ------
ONLINE    SYSAUX      PERMANENT  LOCAL  AUTO     692,846,592    659,816,448   95
ONLINE    UNDOTBS1    UNDO       LOCAL  MANUAL   367,001,600     20,250,624    6
ONLINE    USERS       PERMANENT  LOCAL  AUTO       5,242,880         65,536    1
ONLINE    SYSTEM      PERMANENT  LOCAL  MANUAL   734,003,200    732,233,728  100
ONLINE    EXAMPLE     PERMANENT  LOCAL  AUTO     157,286,400     83,886,080   53
ONLINE    UNDOTBS2    UNDO       LOCAL  MANUAL   209,715,200     24,313,856   12
ONLINE    TEMP        TEMPORARY  LOCAL  MANUAL    48,234,496     39,845,888   83
                                   ------------------ ------------------ ---------
avg                                                                           50
sum                                            2,214,330,368  1,560,412,160

7 rows selected.
                              

要在登录到 SQL*Plus 后获得所有可用 Oracle DBA 脚本的列表,运行 help.sql 脚本:

SQL> @help.sql

========================================
Automatic Shared Memory Management
========================================
asmm_components.sql

========================================
Automatic Storage Management
========================================
asm_alias.sql
asm_clients.sql
asm_diskgroups.sql
asm_disks.sql
asm_disks_perf.sql
asm_drop_files.sql
asm_files.sql
asm_files2.sql
asm_templates.sql

                                 
< --- SNIP --- > 
perf_top_sql_by_buffer_gets.sql
perf_top_sql_by_disk_reads.sql

========================================
Workspace Manager
========================================
wm_create_workspace.sql
wm_disable_versioning.sql
wm_enable_versioning.sql
wm_freeze_workspace.sql
wm_get_workspace.sql
wm_goto_workspace.sql
wm_merge_workspace.sql
wm_refresh_workspace.sql
wm_remove_workspace.sql
wm_unfreeze_workspace.sql
wm_workspaces.sql
                              

创建共享 Oracle 口令文件

在本节中,我将介绍配置一个在 Oracle 集群化数据库的所有实例之间共享的 Oracle 口令文件所需的步骤。UNIX 中每个实例的数据库口令文件位于 $ORACLE_HOME/dbs/orapw<ORACLE_SID>,包含所有具有 SYSDBA 权限的数据库用户的列表。当一个数据库用户被授予 SYSDBA 角色时,实例会将此记录在您登录到的实例的数据库口令文件中。但是,集群中的其他实例怎么样呢?其他实例上的数据库口令文件没有得到更新,不包含刚被授予 SYSDBA 角色的用户。因此,类似 RMAN 之类的尝试以这个具有 SYSDBA 权限的新用户身份登录的程序如果尝试使用的口令文件不包含该用户名的实例,将会失败。

解决此问题的常见方法是将一个数据库口令文件放到一个共享的/集群化文件系统上,然后创建从每个实例到该单一版本数据库口令文件的符号链接。由于本文描述的环境使用 Oracle 集群文件系统 (OCFS2),因此我们将使用它来存储该单一版本的数据库口令文件。

在本节中,我们将 ASM 实例的 Oracle 口令文件也包括在内。

 

  1. 在挂载在 /u02/oradata/orcl 上的集群文件系统上创建数据库口令目录。仅从集群中的一个节点使用 oracle 用户帐户 (linux1) 执行以下命令:
    $ mkdir -p /u02/oradata/orcl/dbs
                                      
  2. 从集群中的一个节点 (linux1),将数据库口令文件移至集群文件系统上的数据库口令目录。选择一个节点,该节点应该包含具有最新的 SYSDBA 添加内容的数据库口令文件。大多数情况下,这不会有什么问题,因为任何缺少的项都可以通过授予它们 SYSDBA 角色来添加(而且这是一个全新的安装,此时您不可能创建了任何 SYSDBA 用户)。注意,执行以下操作时,无需关闭数据库服务器。在 linux1 中使用 oracle 用户帐户执行以下命令:
    $ mv $ORACLE_HOME/dbs/orapw+ASM1 /u02/oradata/orcl/dbs/orapw+ASM
    $ mv $ORACLE_HOME/dbs/orapworcl1 /u02/oradata/orcl/dbs/orapworcl
    
    $ ln -s /u02/oradata/orcl/dbs/orapw+ASM $ORACLE_HOME/dbs/orapw+ASM1
    $ ln -s /u02/oradata/orcl/dbs/orapworcl $ORACLE_HOME/dbs/orapworcl1
                                      
  3. 在集群的第二个节点 (linux2) 中执行以下命令:
    $ rm $ORACLE_HOME/dbs/orapw+ASM2
    $ rm $ORACLE_HOME/dbs/orapworcl2
    
    $ ln -s /u02/oradata/orcl/dbs/orapw+ASM $ORACLE_HOME/dbs/orapw+ASM2
    $ ln -s /u02/oradata/orcl/dbs/orapworcl $ORACLE_HOME/dbs/orapworcl2
                                      

现在,当一个用户被授予 SYSDBA 角色后,所有实例都可以访问相同的口令文件:

SQL> GRANT sysdba TO scott;
                              

26. 验证 TNS 联网文件

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

listener.ora

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

为清楚起见,我将每个 Oracle RAC 节点的 listener.ora 文件副本包含在了本指南的支持文件中。我还包含了 Oracle 配置的 tnsnames.ora 文件的副本。此文件应已在集群的两个 Oracle RAC 节点上进行了配置。

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

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

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

验证您从其进行连接的计算机对所有主机名的解析与它们在 listener.oratnsnames.ora 文件中的显示完全一样。对于本文档,您从其连接的计算机应该能够在本地主机文件中或通过 DNS 解析以下主机名:

192.168.1.100    linux1
192.168.1.101    linux2
192.168.1.200    linux1-vip
192.168.1.201    linux2-vip

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

C:\> sqlplus system/manager@orcl2
C:\> sqlplus system/manager@orcl1
C:\> sqlplus system/manager@orcl
                              

 


27. 创建/更改表空间

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

以下是几个可为测试数据库修改和创建所有表空间的 SQL 命令。请记住,此示例中使用的数据库文件名称(OMF 文件)可能与 Oracle Database Configuration Assistant (DBCA) 为您的环境创建的数据库文件名称不同。完成本节后,在适合的地方替换在您的环境中创建的数据文件名。可以使用以下查询确定环境的文件名:

SQL> select tablespace_name, file_name
  2 from dba_data_files
  3 union
  4 select tablespace_name, file_name
  5 from dba_temp_files;

TABLESPACE_NAME     FILE_NAME
--------------- --------------------------------------------------
EXAMPLE         +ORCL_DATA1/orcl/datafile/example.263.635876607
SYSAUX          +ORCL_DATA1/orcl/datafile/sysaux.260.635876529
SYSTEM          +ORCL_DATA1/orcl/datafile/system.259.635876483
TEMP            +ORCL_DATA1/orcl/tempfile/temp.262.635876577
UNDOTBS1        +ORCL_DATA1/orcl/datafile/undotbs1.261.635876549
UNDOTBS2        +ORCL_DATA1/orcl/datafile/undotbs2.264.635876629
USERS           +ORCL_DATA1/orcl/datafile/users.265.635876657

7 rows selected.
                              

 

$ 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.265.635876657' resize 1024m;
SQL> alter tablespace users add datafile '+ORCL_DATA1' size 1024m autoextend off;

SQL> create tablespace indx datafile '+ORCL_DATA1' size 1024m
  2 autoextend on next 50m maxsize unlimited
  3 extent management local autoallocate
  4 segment space management auto;

SQL> alter database datafile '+ORCL_DATA1/orcl/datafile/system.259.635876483' resize 800m;

SQL> alter database datafile '+ORCL_DATA1/orcl/datafile/sysaux.260.635876529' resize 1024m;

SQL> alter database datafile '+ORCL_DATA1/orcl/datafile/undotbs1.261.635876549' resize 1024m;

SQL> alter database datafile '+ORCL_DATA1/orcl/datafile/undotbs2.264.635876629' resize 1024m;

SQL> alter database tempfile '+ORCL_DATA1/orcl/tempfile/temp.262.635876577' resize 1024m;
                              
以下是我为我的测试数据库环境定义的表空间快照:
                                 
Status    Tablespace  TS         Ext.   Seg.    Tablespace       Used         Pct. 
          Name        Type       Mgt.   Mgt.    Size             (in bytes)   Used
--------- ----------- ---------- ------ ------- ---------------- ------------ -----
ONLINE    SYSAUX      PERMANENT  LOCAL  AUTO    1,073,741,824    660,275,200   61
ONLINE    UNDOTBS1    UNDO       LOCAL  MANUAL  1,073,741,824     20,250,624    2
ONLINE    USERS       PERMANENT  LOCAL  AUTO    2,147,483,648        131,072    0
ONLINE    SYSTEM      PERMANENT  LOCAL  MANUAL    838,860,800    732,430,336   87
ONLINE    EXAMPLE     PERMANENT  LOCAL  AUTO      157,286,400     83,886,080   53
ONLINE    INDX        PERMANENT  LOCAL  AUTO    1,073,741,824         65,536    0
ONLINE    UNDOTBS2    UNDO       LOCAL  MANUAL  1,073,741,824     22,544,384    2
ONLINE    TEMP        TEMPORARY  LOCAL  MANUAL  1,073,741,824     39,845,888    4
                                     ------------------ ------------------ ---------
avg                                                                             26
sum                                             8,512,339,968  1,559,429,120

8 rows selected.
                              

 


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

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

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

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

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

所有实例和服务的状态

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

单个实例的状态

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

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

$ srvctl status nodeapps -n linux1
VIP 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 linux1
ASM instance +ASM1 is running on node linux1.
                              

列出配置的所有数据库

$ srvctl config database
orcl
                              

显示 RAC 数据库的配置

$ srvctl config database -d orcl
linux1 orcl1 /u01/app/oracle/product/11.1.0/db_1
linux2 orcl2 /u01/app/oracle/product/11.1.0/db_1
                              

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

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

显示 ASM 实例的配置

$ srvctl config asm -n linux1
+ASM1 /u01/app/oracle/product/11.1.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.256.635876425 +FLASH_RECOVERY_AREA/orcl/onlinelog/group_1.257.635876443 +FLASH_RECOVERY_AREA/orcl/onlinelog/group_2.258.635876469 +FLASH_RECOVERY_AREA/orcl/onlinelog/group_3.259.635885447 +FLASH_RECOVERY_AREA/orcl/onlinelog/group_4.260.635885473 +ORCL_DATA1/orcl/controlfile/current.256.635876421 +ORCL_DATA1/orcl/datafile/example.263.635876607 +ORCL_DATA1/orcl/datafile/indx.270.635995051 +ORCL_DATA1/orcl/datafile/sysaux.260.635876529 +ORCL_DATA1/orcl/datafile/system.259.635876483 +ORCL_DATA1/orcl/datafile/undotbs1.261.635876549 +ORCL_DATA1/orcl/datafile/undotbs2.264.635876629 +ORCL_DATA1/orcl/datafile/users.265.635876657 +ORCL_DATA1/orcl/datafile/users.269.635994857 +ORCL_DATA1/orcl/onlinelog/group_1.257.635876431 +ORCL_DATA1/orcl/onlinelog/group_2.258.635876457 +ORCL_DATA1/orcl/onlinelog/group_3.266.635885435 +ORCL_DATA1/orcl/onlinelog/group_4.267.635885461 +ORCL_DATA1/orcl/tempfile/temp.262.635876577 19 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

 


29. 启动/停止集群

此时,Oracle RAC 11g 的安装和配置已全部完成。我们已安装并配置了所需的所有软件,并拥有一个功能齐备的集群化数据库。

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

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

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

# su - oracle
$ hostname
linux1
                              

停止 Oracle RAC 11g 环境

第一步是停止 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 11g 环境

第一步是启动节点应用程序(虚拟 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
                              

 


30. 故障诊断

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

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

127.0.0.1 linux1 localhost.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
                                  


                                

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

在安装 Oracle 集群件、数据库以及示例期间,Oracle Universal Installer (OUI) 将首先将软件安装到运行该安装程序的本地节点(即 linux1)。然后,将该软件以远程方式复制到集群中的其余节点(即 linux2)。在远程复制过程中,OUI 将在每个远程节点上执行 UNIX“tar”命令,以提取进行了存档和复制的文件。如果执行安装的节点上的日期和时间大于其要进行复制的节点上的日期和时间,那么 OUI 将在“tar”中引发一个错误,以指示其在试图提取带有时间戳的文件时失败。
Error while copying directory 
    /u01/app/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 2007-10-14 09:21:34 is 735 s in the future
   /bin/tar: ./bin/olsnodes: time stamp 2007-10-14 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 "10/09/2007 23:00:00"
                                

设置 linux2 的日期和时间:

# date -s "10/09/2007 23:00:20"
                                

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

Openfiler — 逻辑卷在引导时未激活

使用连接到 Openfiler 服务器的 USB 驱动器时,出现了一个我多次遇到的问题。重新引导 Openfiler 服务器后,系统能够识别 USB 驱动器,但是无法加载逻辑卷,也无法将以下消息写入 /var/log/messages —(也可通过 dmesg 获得):
iSCSI Enterprise Target Software - version 0.4.14
iotype_init(91) register fileio
iotype_init(91) register blockio
iotype_init(91) register nullio
open_path(120) Can't open /dev/rac1/crs -2
fileio_attach(268) -2
open_path(120) Can't open /dev/rac1/asm1 -2
fileio_attach(268) -2
open_path(120) Can't open /dev/rac1/asm2 -2
fileio_attach(268) -2
open_path(120) Can't open /dev/rac1/asm3 -2
fileio_attach(268) -2
open_path(120) Can't open /dev/rac1/asm4 -2
fileio_attach(268) -2


请注意,我不是说只有与 Openfiler 服务器连接的 USB 驱动器才会出现该问题。其他类型的驱动器也可能会出现该问题,但是,我只看到了 USB 驱动器出现了该问题!

如果您确实收到该错误,首先应在 Openfiler 服务器中使用 lvscan 命令检查所有逻辑卷的状态:

# lvscan                                      
inactive
'/dev/rac1/crs' [2.00 GB] inherit
inactive '/dev/rac1/asm1' [115.94 GB] inherit
inactive '/dev/rac1/asm2' [115.94 GB] inherit
inactive '/dev/rac1/asm3' [115.94 GB] inherit
inactive '/dev/rac1/asm4' [115.94 GB] inherit

注意,每个逻辑卷的状态设置为 inactive —(工作系统上每个逻辑卷的状态将设置为 ACTIVE)。

目前,我知道有两种方法可以让 Openfiler 在重新引导时自动加载逻辑卷,下面将对这两种方法进行描述。

方法 1

首先,关闭集群中的两个 Oracle RAC 节点(linux1linux2)。然后,在 Openfiler 服务器中,针对每个连续的重新引导,手动将每个逻辑卷设置为 ACTIVE

# lvchange -a y /dev/rac1/crs
# lvchange -a y /dev/rac1/asm1
# lvchange -a y /dev/rac1/asm2
# lvchange -a y /dev/rac1/asm3
# lvchange -a y /dev/rac1/asm4
                                  

也可以使用卷组更改命令将所有逻辑卷的状态设置为 active,如下所示:

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "rac1" using metadata type lvm2

# vgchange -ay
  5 logical volume(s) in volume group "rac1" now active
                                  

将每个逻辑卷设置为 active 后,使用 lvscan 命令再次验证状态:

# lvscan                                        
ACTIVE
'/dev/rac1/crs' [2.00 GB] inherit
ACTIVE '/dev/rac1/asm1' [115.94 GB] inherit
ACTIVE '/dev/rac1/asm2' [115.94 GB] inherit
ACTIVE '/dev/rac1/asm3' [115.94 GB] inherit
ACTIVE '/dev/rac1/asm4' [115.94 GB] inherit

作为最后的测试,重新引导 Openfiler 服务器以确保引导过程后每个逻辑卷将设置为 ACTIVE。验证每个逻辑卷在引导时都将激活之后,检查 iSCSI 目标服务是否正在运行:

# service iscsi-target status
ietd (pid 2668) is running...
                                  

最后,重新启动集群中的每个 Oracle RAC 节点(linux1linux2)。

方法 2

该方法由 Martin Jones 友情提供。他的方法包括修正 /etc/rc.sysinit 脚本,主要是等待 USB 磁盘(在本例中为 /dev/sda)得到检测。对 /etc/rc.sysinit 脚本(下面将进行描述)进行更改之后,验证外部驱动器已打开电源,然后重新引导 Openfiler 服务器。

以下是 Openfiler 服务器上的 /etc/rc.sysinit 脚本的一小部分,其中包含 Martin 建议的更改(用蓝色高亮显示):

..............................................................
# LVM2 initialization, take 2
        if [ -c /dev/mapper/control ]; then
                if [ -x /sbin/multipath.static ]; then
                        modprobe dm-multipath >/dev/null 2>&1
                        /sbin/multipath.static -v 0
                        if [ -x /sbin/kpartx ]; then
                                /sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a"
                        fi
                fi
 

                if [ -x /sbin/dmraid ]; then
                        modprobe dm-mirror > /dev/null 2>&1
                        /sbin/dmraid -i -a y
                fi

                                     
#-----
#----- MJONES - Customisation Start
#-----

# Check if /dev/sda is ready
while [ ! -e /dev/sda ]
do
echo "Device /dev/sda for first USB Drive is not yet ready."
echo "Waiting..."
sleep 5
done
echo "INFO - Device /dev/sda for first USB Drive is ready."

#-----
#----- MJONES - Customisation END
#-----
if [ -x /sbin/lvm.static ]; then if /sbin/lvm.static vgscan > /dev/null 2>&1 ; then action $"Setting up Logical Volume Management:" /sbin/lvm.static vgscan --mknodes --ignorelockingfailure && /sbin/lvm.static vgchange -a y --ignorelockingfailure fi fi fi # Clean up SELinux labels if [ -n "$SELINUX" ]; then for file in /etc/mtab /etc/ld.so.cache ; do [ -r $file ] && restorecon $file >/dev/null 2>&1 done fi ..............................................................

最后,重新启动集群中的每个 Oracle RAC 节点(linux1linux2)。

OCFS2 — o2cb_ctl:创建节点时无法访问集群服务

使用 ocfs2console 为 OCFS2 配置节点时,可能会遇到以下错误:

                                      
o2cb_ctl: Unable to access cluster service while creating node

当您首次启动 ocfs2console 时,该错误不会显示。当集群配置有问题或者您在使用 ocfs2console 进行最初的集群配置后没有保存 该设置时,将出现该消息。这是一个错误!

解决方法是退出 ocfs2console,卸载 o2cb 模块,并删除 ocfs2 集群配置文件 /etc/ocfs2/cluster.conf。我还希望删除 /config 目录。删除 ocfs2 集群配置文件后,重新启动 ocfs2console 程序。

例如:

# /etc/init.d/o2cb offline ocfs2
# /etc/init.d/o2cb unload
Unmounting ocfs2_dlmfs filesystem: OK
Unloading module "ocfs2_dlmfs": OK
Unmounting configfs filesystem: OK
Unloading module "configfs": OK

# rm -f /etc/ocfs2/cluster.conf
# rm -rf /config

# ocfs2console &
                                

这一次,将添加节点!

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 read                                      
Index 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 心跳阈值由默认值 31(在 OCFS2 的早期版本中通常为 7)增加到 61。某些设置可能需要更高的设置。这是一个可配置参数,用于计算节点“隔离”自身所用的时间。在 OCFS2 的安装和配置期间,我们在“将 O2CB 配置为在引导时启动并调整 O2CB 心跳阈值”一节中调整了该值。如果您遇到来自 OCFS2 的内核错误并需要增加心跳阈值,使用“将 O2CB 配置为在引导时启动并调整 O2CB 心跳阈值”一节中描述的过程。

下面将描述如何手动调整 O2CB 心跳阈值。

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

# cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold
31
                                

我们看到值为 31,但该值表示什么呢?其实,它用在以下公式中确定隔离时间(秒):

[fence time in seconds] = (O2CB_HEARTBEAT_THRESHOLD - 1) * 2

因此,如果 O2CB 心跳阈值为 31,则隔离时间将为:

(31 - 1) * 2 = 60 seconds

如果我们需要一个更大的阈值(如 120 秒),则需将 O2CB_HEARTBEAT_THRESHOLD 调整为 61,如下所示:

(61 - 1) * 2 = 120 seconds

现在我们了解一下如何手动将 O2CB 心跳阈值从 31 增大为 61。该任务需要在集群的所有 Oracle RAC 节点上执行。首先需要修改 /etc/sysconfig/o2cb 文件并将 O2CB_HEARTBEAT_THRESHOLD 设置为 61:

#
# This is a configuration file for automatic startup of the O2CB
# driver.  It is generated by running /etc/init.d/o2cb configure.
# Please use that method to modify this file
#

# O2CB_ENABELED: 'true' means to load the driver on boot.
O2CB_ENABLED=true

# O2CB_BOOTCLUSTER: If not empty, the name of a cluster to start.
O2CB_BOOTCLUSTER=ocfs2

# O2CB_HEARTBEAT_THRESHOLD: Iterations before a node is considered dead. O2CB_HEARTBEAT_THRESHOLD=61                                     

# O2CB_IDLE_TIMEOUT_MS: Time in ms before a network connection is considered dead.
O2CB_IDLE_TIMEOUT_MS=30000

# O2CB_KEEPALIVE_DELAY_MS: Max time in ms before a keepalive packet is sent
O2CB_KEEPALIVE_DELAY_MS=2000

# O2CB_RECONNECT_DELAY_MS: Min time in ms between connection attempts
O2CB_RECONNECT_DELAY_MS=2000
                                  

修改 /etc/sysconfig/o2cb 文件后,需要更改 o2cb 配置。同样,需要在集群的所有 Oracle RAC 节点上执行该操作。

# umount /u02/oradata/orcl/
# /etc/init.d/o2cb offline ocfs2
# /etc/init.d/o2cb unload
# /etc/init.d/o2cb configure
Configuring the O2CB driver.

This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot.  The current values will be shown in brackets ('[]').  Hitting
<enter> without typing an answer will keep that current value.  Ctrl-C
will abort.

Load O2CB driver on boot (y/n) [n]: y
Cluster to start on boot (Enter "none" to clear) [ocfs2]: ocfs2
Specify heartbeat dead threshold (>=7) [31]: 61
Specify network idle timeout in ms (>=5000) [30000]: 30000
Specify network keepalive delay in ms (>=1000) [2000]: 2000
Specify network reconnect delay in ms (>=2000) [2000]: 2000
Writing O2CB configuration: OK
Loading module "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading module "ocfs2_nodemanager": OK
Loading module "ocfs2_dlm": OK
Loading module "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK
                                

我们现在可以再次检查以确保这些设置应用于 o2cb 集群堆栈:

# cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold
61
                                

必须注意,用作 O2CB 心跳阈值的 61 并不适用于所有配置。在某些情况下,O2CB 心跳阈值可能需要增加到 601 以防止 OCFS2 惊扰内核。

 


31. 结论

Oracle11g RAC 允许 DBA 配置一个拥有优越的容错和负载平衡功能的数据库解决方案。然而,对于那些希望更熟悉 Oracle11g RAC 的特性和优势的 DBA 而言,他们将发现即使一个小型 RAC 集群的配置成本也在 15,000 美元到 20,000 美元之间。

本文希望为您提供一个低成本的解决方案,通过该方案可使用 Oracle Enterprise Linux 和 iSCSI 技术安装和配置经济实惠的 Oracle11g 第 1 版 RAC 集群。本文介绍的 RAC 解决方案总共需要大约 2,600 美元,但可以为 DBA 提供一个功能完善的 Oracle11g 第 1 版 RAC 集群。虽然本文使用的硬件对于教学目的而言足够稳定,但永远不应认为其适用于生产环境。

 


32. 致谢

像这样篇幅和复杂程度的文章通常并非出自一人之手。尽管本人能够编写并成功演示构成此配置的组件的有效性,但我还是要感谢其他几个帮助我成功编写本文的人。

首先,我要感谢来自 Oracle 的 Server BDE 团队的 Bane Radulovic。Bane 不仅向我介绍了 Openfiler,还与我共享了他对于该产品以及如何针对 Oracle RAC 最好地利用它的经验和知识。他的研究和辛苦工作使得配置 Openfiler 的任务得以圆满完成。Bane 还参与了硬件建议和测试。

特别感谢 K Gopalakrishnan,他帮助提供了本文的 Oracle RAC 11g 概述一节。在本节中,有关 Oracle RAC 历史的大量内容可以在他的畅销书《Oracle Database 10g Real Application Clusters Handbook》中找到。本书受到希望成功实施 Oracle RAC 以及完全理解 缓冲融合全局资源目录 等多种高级服务的运行方式的 DBA 和开发人员的极力推荐。

接下来,我要感谢 Oracle ACE Werner Puschitz 在“在 Red Hat Enterprise Linux Advanced Server 3 上安装具有真正应用服务器集群 (RAC) 的 Oracle 数据库 10g”一文中所做的杰出贡献。本文以及他撰写的其他几篇文章提供的有关 Oracle RAC 的信息在任何其他 Oracle 文档中都是无法找到的。没有他的辛苦工作以及对配置 OCFS2 和 ASMLib 等问题的研究,本文可能根本无法完成。如果您有兴趣拜读 Werner Puschitz 撰写的有关 Linux 内部结构以及 Oracle 深入配置方面的技术文章,请访问他的网站 www.puschitz.com

另外,还要感谢 Tzvika Lemel 就如何使用 Oracle 的集群验证实用程序 (CVU) 提出的意见和建议。

最后,我想表达对以下供应商的感谢,他们慷慨地为本文提供了硬件:MaxtorAvocent CorporationIntelD-LinkSIIGLaCie

 


Jeffrey Hunter [www.idevelopment.info] 毕业于位于特洛克的加利福尼亚州立大学的 Stanislaus 分校,获得了计算机科学学士学位,曾经当过 13 年以上的高级 DBA 和软件工程师。他是一位 Oracle 认证专家、Java 开发认证专家、Oracle ACE 和作家,当前作为高级数据库管理员就职于 The DBA Zone, Inc.。Jeff 的工作包括高级性能调节、Java 和 PL/SQL 编程、容量规划、数据库安全性以及 UNIX、Linux 和 Windows NT 环境中的物理/逻辑数据库设计。Jeff 的其他兴趣还涉及数学加密理论、Java 和 C 的编程语言处理器(编译器和解释器)、LDAP、编写基于 Web 的数据库管理工具,当然还有 Linux。

将您的意见发送给我们

 

第 1 页   第 2 页   第 3 页