二维码

Oracle-RAC安装部署手册

2323 人阅读 | 时间:2020年01月04日 12:31

Oracle Real Application Cluster 安装部署手册

目录

摘要

随着IT技术不断发展,广电行业借助于IT的新技术和新特性,越来越强调生产系统的自动化、网络化、网格化。这就决定了数据库成为了一个广电机构的业务核心,数据库的性能、安全性和可维护性直接影响一个生产系统的日常工作。目前大量应用的数据库系统无非以下几个品牌:SQL SERVER、DB2、MySQL、Sybase、Oracle。而由于Oracle耦合结构松散,性能稳定,服务全面,所以广电行业普遍使用的是Oracle品牌的数据库,而作为Oracle在广电行业的一种典型应用,Real Application Cluster(以下简称RAC)以其卓越的网格计算性能,Active-Active的高可用性,复杂精密的Load Balance技术,为业务需求提供了强有力的技术保障。

本文介绍的RAC安装部署,并未完全指定系统环境,力求作为一种通用的安装手段,文中的斜体加粗字内容为屏幕的输入内容,斜体普通字为屏幕显示的返回信息内容,红色加粗字内容为容易导致安装失败而要求读者特别注意的内容。

1.总述

随 Oracle9i 一同推出的 Oracle RAC 是 Oracle 并行服务器 (OPS) 的后续版本。Oracle RAC 允许多个实例同时访问同一数据库(存储)。RAC 通过允许系统进行扩展,提供了容错、负载均衡和性能效益,同时,由于所有节点访问同一数据库,一个实例的故障不会导致无法访问数据库。

Oracle10g RAC 的核心是共享磁盘子系统。集群中的所有节点必须能够访问集群中所有节点的所有数据、重做日志文件、控制文件和参数文件。为了使所有节点都能够访问数据库,数据磁盘必须全局可用。每个节点都拥有自己的重做日志文件和 UNDO 表空间,但其他节点必须能够访问它们(和共享控制文件),以便在系统出现故障时恢复该节点。

Oracle RAC 与 OPS 之间的最大区别在于增加了缓存融合。使用 OPS 时,从一个节点到另一个节点的数据请求需要首先将数据写到磁盘,然后请求节点才能读取该数据。而使用缓存融合,数据沿着使用复杂锁定算法的高速互连链路传递。

不是所有的集群解决方案都使用共享存储。某些供应商使用一种称为联合集群 的方法,在这种方法中,数据分布在多台计算机中,而不是由所有计算机共享。但是,在使用 Oracle10g RAC 时,多个节点将使用一组磁盘来存储数据。利用 Oracle10g RAC,数据文件、重做日志文件、控制文件和归档日志文件都保存在原始磁盘设备的共享存储、NAS、ASM 或集群文件系统中。Oracle 的集群方法利用了集群中所有节点的集体处理能力,同时提供了故障切换安全性。Dell、IBM 和 HP 等厂商提供了预先配置的面向生产环境的 Oracle10g RAC 解决方案。

2.系统结构

2.1硬件及成本

Oracle RAC 节点 1 — (RAC1)

Dell PowerEdge 2950服务器

  4*Intel(R) Xeon(R) CPU E5430@2.60GHz

  8GB DDR SDRAM (333MHz)

  300GB 7200 RPM 内置硬盘驱动器

  集成的 Intel 3D AGP 图形卡

  集成的 10/100 以太网卡 — (Broadcom BCM5708)

  DVDROM(16X 倍速)

  DELL键盘、显示器或鼠标

12000RMB

Oracle RAC 节点 2 — (RAC2)

Dell PowerEdge 2950服务器

  4*Intel(R) Xeon(R) CPU E5430@2.60GHz

  8GB DDR SDRAM (333MHz)

  300GB 7200 RPM 内置硬盘驱动器

  集成的 Intel 3D AGP 图形卡

  集成的 10/100 以太网卡 — (Broadcom BCM5708)

  DVDROM(16X 倍速)

  DELL键盘、显示器或鼠标

12000RMB

DAS存储阵列

Dell PowerVaultTM MD3000 SAS 存储阵列

  MD3000模块化磁盘存储阵列可支持2个节点的集群,其3U架装式机箱最多可安装15块3.5英寸硬盘,可扩展到45个3.5英寸SAS硬盘,在增加2个MD1000的配置下。 使用一个Modular Disk Storage Manager (模块化磁盘存储管理软件),管理整个阵列子系统。

30000RMB

合计

54000RMB

2.2软件及成本

Oracle RAC 节点 1 — (RAC1)

RedHat 4 U6 Linux Enterprise Edition

Oracle RAC Software

71250RMB

Oracle RAC 节点 2 — (RAC2)

RedHat 4 U6 Linux Enterprise Edition

Oracle RAC Software

71250RMB

合计

196500RMB

2.3系统拓扑

Oracle-RAC安装部署手册

2.4系统总价

根据上述软硬件系统可以得出系统总价为:

系统总价=软件系统总价+硬件系统总价

即:系统总价=984000

3.安装步骤

Oracle-RAC安装部署手册

4.开始安装

4.1安装操作系统

此步骤需要在两节点进行

安装linux过程中需要注意以下几点:

         选择全新安装;

         手动对sda设备分区:

分区名称

分区容量(MB)

/boot

2048

Swap

32768

/usr

20480

/var

16384

/home

16384

/tmp

8192

/

2048

/opt

磁盘的剩余容量

         取消DHCP网络设置

         禁用防火墙

         禁用SELinux

         完全安装所有包,

         安装SAS驱动

         安装DELL存储管理软件

其中需要注意的是:对于系统的磁盘分区,Swap区尽量分的大一些,一般为物理内存的整数倍。/opt目录是Oracle软件的安装目录,也要保证足够的容量。

4.2 对磁盘阵列进行分区

通过Dell存储的管理软件,我们对共享存储阵列进行分区,并将分区映射到端口。此步骤仅需在一个节点进行即可,我在RAC1节点上进行如下操作。本次安装,我的分区如下:

524M      crs

629M 

322.1G     oradata_dg

408.1G     recover_dg

分区结束后,需要保证两节点均可以识别到设备,此工作在两节点进行。打开操作系统的终端:

[root@rac2 ~]# fdisk –l

Disk /dev/sda: 524 MB, 524288000 bytes

17 heads, 59 sectors/track, 1020 cylinders

Units = cylinders of 1003 * 512 = 513536 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1               1        1020      511500+  83  Linux

Disk /dev/sdb: 629 MB, 629145600 bytes

20 heads, 60 sectors/track, 1024 cylinders

Units = cylinders of 1200 * 512 = 614400 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1024      614370   83  Linux

Disk /dev/sdc: 322.1 GB, 322122547200 bytes

255 heads, 63 sectors/track, 39162 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1       39162   314568733+  83  Linux

Disk /dev/sdd: 408.1 GB, 408113643520 bytes

255 heads, 63 sectors/track, 49616 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdd1               1       49616   398540488+  83  Linux

接下来的步骤是在每个卷上创建一个跨整个卷大小的主分区。我将使用 Oracle 的集群文件系统第 2 版 (OCFS2) 存储供 Oracle 集群件软件共享的两个文件。然后,将使用自动存储管理 (ASM) 创建ASM 卷;

# fdisk /dev/sdb

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-15134, default 1): 1

Last cylinder or +size or +sizeM or +sizeK (1-15134, default 15134): 15134

Command (m for help): p

Disk /dev/sdb: 124.4 GB, 124486942720 bytes

255 heads, 63 sectors/track, 15134 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1       15134   121563823+  83  Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

按照上述方法,依次划分/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1。在创建所有必要分区之后,现在应以“root”用户帐户从集群的两个 Oracle RAC 节点使用以下命令将分区的更改情况通知给内核。

# partprobe

4.3 配置网络

系统的IP地址需要在搭建之初分配好,下面是我分配的IP地址:

IP 名称

子网掩码

IP 地址

Rac1-public

255.255.255.0

192.168.1.100

Rac2-public

255.255.255.0

192.168.1.101

Rac1-private

255.255.255.0

192.168.2.100

Rac2-private

255.255.255.0

192.168.2.101

Rac1-vip

255.255.255.0

192.168.1.200

Rac2-vip

255.255.255.0

192.168.1.201

在集群中的两个 Oracle RAC 节点上执行下列网络配置!

注:虽然我们在 Linux 安装过程中配置了几个网络设置,但千万不要跳过本部分,因为它包含了 RAC 环境所需的关键步骤。

在 Linux O/S 安装过程中,我们已经为这两个 Oracle RAC 节点配置了 IP 地址和主机名。现在,我们需要配置 /etc/hosts 文件,并调整几个互连的网络设置。

这两个 Oracle RAC 节点均应有一个用于公共网络的静态 IP 地址和一个用于专用集群互连的静态 IP 地址。不要为公共 IP 地址或互连使用 DHCP 命名;您需要静态 IP 地址!

使用网络配置应用程序,您需要配置两个 NIC 设备以及 /etc/hosts 文件。 我们的示例配置将使用以下设置:

Oracle RAC 节点 1 - (rac1)

设备

IP 地址

Subnet

Gateway

目的

eth0

192.168.1.100

255.255.255.0

连接 rac1 与公共网络

eth1

192.168.2.100

255.255.255.0

将 rac1(互连)连接到 rac2 (rac2-priv)

vi /etc/hosts

127.0.0.1        localhost.localdomain localhost

# Public Network - (eth0)

192.168.1.100    rac1

192.168.1.101    rac2

# Private Interconnect - (eth1)

192.168.2.100    rac1-priv

192.168.2.101    rac2-priv

# Public Virtual IP (VIP) addresses - (eth0)

192.168.1.200    rac1-vip

192.168.1.201    rac2-vip

Oracle RAC 节点 2 — (rac2)

设备

IP 地址

Subnet

Gateway

目的

eth0

192.168.1.101

255.255.255.0

连接 rac2 与公共网络

eth1

192.168.2.101

255.255.255.0

将 rac2(互连)连接到 rac1 (rac1-priv)

vi /etc/hosts

127.0.0.1        localhost.localdomain localhost

# Public Network - (eth0)

192.168.1.100    rac1

192.168.1.101    rac2

# Private Interconnect - (eth1)

192.168.2.100    rac1-priv

192.168.2.101    rac2-priv

# Public Virtual IP (VIP) addresses - (eth0)

192.168.1.200    rac1-vip

192.168.1.201    rac2-vip

请注意,只需在两个 Oracle RAC 节点的 /etc/hosts 文件(或您的 DNS)中定义虚拟 IP 地址。当您运行 Oracle Universal Installer 时,该程序启动 Oracle 的虚拟互联网协议配置助手 (VIPCA),也就说 Oracle 将自动配置公共虚拟 IP 地址。当运行 srvctl start nodeapps -n <node_name> 命令时,所有的虚拟 IP 地址将被激活。这就是将要在客户端 tnsnames.ora 文件中进行配置的主机名/IP 地址(后文详述)。

配置网络之后,您可以使用 ifconfig 命令验证一切是否正常。以下示例来自于 rac1:

# /sbin/ifconfig -a

eth0      Link encap:Ethernet  HWaddr 00:14:6C:76:5C:71

          inet addr:192.168.200.200  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::214:6cff:fe76:5c71/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:1546 errors:0 dropped:0 overruns:0 frame:0

          TX packets:1273 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:1179157 (1.1 MiB)  TX bytes:183011 (178.7 KiB)

          Interrupt:169 Base address:0x2f00

eth1      Link encap:Ethernet  HWaddr 00:0E:0C:64:D1:E5

          inet addr:192.168.100.100  Bcast:192.168.2.255  Mask:255.255.255.0

          inet6 addr: fe80::20e:cff:fe64:d1e5/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:0 (0.0 b)  TX bytes:782 (782.0 b)

          Base address:0xddc0 Memory:fe9c0000-fe9e0000

lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:4893 errors:0 dropped:0 overruns:0 frame:0

          TX packets:4893 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:6521518 (6.2 MiB)  TX bytes:6521518 (6.2 MiB)

sit0      Link encap:IPv6-in-IPv4

          NOARP  MTU:1480  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

关于虚拟 IP

10g 中为什么使用虚拟 IP (VIP)?为什么当它的主节点发生故障时它只是返回一个无效的连接?

这全是出于对应用程序可用性的考虑。当一个节点发生故障时,与其关联的 VIP 将被自动故障切换到另外某个节点上。当出现这种情况时,会发生两件事。

1.   新的节点重新进行地址解析,显示该地址的一个新的 MAC 地址。对于直连客户端,这通常使它们在连接旧地址时出现错误。

2.   到 VIP 的后续数据包将被传送到新的节点,该节点将把错误 RST 数据包返回客户端。这导致客户端立即收到错误信息。

这意味着,当客户端向故障节点发出 SQL 时,或者在连接状态下遍历地址列表时,客户端会接收到一个 TCP 重置信息,而不是等待很长的 TCP/IP 超时(大约 10 分钟)。发送 SQL 时,该信息为 ORA-3113。而连接时,使用 tnsname 中的下一个地址。

更进一步的操作是使用透明的应用程序故障切换 (TAF)。成功配置 TAF 后,就可以完全避免 ORA-3113 错误!

如果不使用 VIP,连接停用节点的客户端经常要等待 10 分钟的 TCP 超时,然后才收到错误信息。因此,如果没有 VIP, 用户将不能真正拥有一流的高可用性解决方案(来源 — Metalink 说明 220970.1)。

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

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

127.0.0.1 rac1 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

验证 localhost 在 /etc/hosts 文件中定义为回送地址

确保 localhost.localdomain 和 localhost 项作为回送地址包含在每个 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.rac1.ons'. Check log file

"/opt/app/crs/log/rac1/racg/ora.rac1.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.rac1.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 9.2.0.1 以及更高版本中,Oracle 在 Linux 上使用 UDP 作为进行过程间通信 (IPC) 的默认协议,如在 RAC 集群中实例之间的缓存融合和集群管理器缓冲区传输。

Oracle 强烈建议将默认的和最大的发送缓冲区大小(SO_SNDBUF 套接字选项)调整为 256KB,并将默认的和最大的接收缓冲区大小(SO_RCVBUF 套接字选项)调整为 256KB。

接收缓冲区由 TCP 和 UDP 用于保留所接收的数据,直到应用程序读出这些数据为止。由于不允许对端设备发送超过缓冲区大小窗口的数据,因此接收缓冲区不会溢出。这意味着,不适合套接字接收缓冲区可能导致发送设备发送的信息淹没接收设备的数据报将会被丢弃。

您无需重新引导即可在 /proc 文件系统中更改默认的和最大的窗口大小:

# su - root

# sysctl -w net.core.rmem_default=262144

net.core.rmem_default = 262144

# sysctl -w net.core.wmem_default=262144

net.core.wmem_default = 262144

# sysctl -w net.core.rmem_max=262144

net.core.rmem_max = 262144

# sysctl -w net.core.wmem_max=262144

net.core.wmem_max = 262144

以上命令更改正在运行的操作系统。现在,将以下各行程序添加到 RAC 集群中两个节点的 /etc/sysctl.conf 文件中,使以上更改永久生效(针对每次重新引导而言):

# Default setting in bytes of the socket receive buffer

net.core.rmem_default=262144

# Default setting in bytes of the socket send buffer

net.core.wmem_default=262144

# Maximum socket receive buffer size which may be set by using

# the SO_RCVBUF socket option

net.core.rmem_max=262144

# Maximum socket send buffer size which may be set by using

# the SO_SNDBUF socket option

net.core.wmem_max=262144

检查并关闭 UDP ICMP 拒绝

如果 UDP ICMP 被防火墙阻塞或拒绝,Oracle 集群件软件将在运行几分钟之后崩溃。如果 Oracle 集群件进程出现故障,您的 <machine_name>_evmocr.log 文件中将出现以下类似内容:

08/29/2005 22:17:19
oac_init:2: Could not connect to server, clsc retcode = 9
08/29/2005 22:17:19
a_init:12!: Client init unsuccessful : [32]
ibctx:1:ERROR: INVALID FORMAT
proprinit:problem reading the bootblock or superbloc 22

如果遇到此类错误,解决方法是删除 udp ICMP (iptables) 拒绝规则,或者只需关闭防火墙选项。之后,Oracle 集群件软件将开始正常工作,而不会崩溃。以下命令应该以 root 用户帐户的身份执行:

1.检查以确保防火墙选项关闭。如果防火墙选项已停用(如下面的示例所示),则不必继续执行以下步骤。

# /etc/rc.d/init.d/iptables status
Firewall is stopped.

如果防火墙选项已启用,您首先需要手动停用 UDP ICMP 拒绝:

# /etc/rc.d/init.d/iptables stop
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]

2.然后,针对下一次服务器重新引导关闭 UDP ICMP 拒绝(应该始终被关闭):

# chkconfig iptables off

4.4 建立Oracle用户

在集群中的两个 Oracle RAC 节点上执行以下任务!

我们将使用 Oracle 集群文件系统第 2 版 (OCFS2) 存储需要 Oracle 集群件软件共享的文件。在使用 OCFS2 时,集群中的两个 Oracle RAC 节点上的 UNIX 用户 oracle 的 UID 和 UNIX 组“oracle”的 GID 必须相同。如果 UID 或 GID 不同,则 OCFS2 文件系统中的文件将显示为“unowned”,甚至可能被其他用户所拥有。对于本文而言,oracle UID 使用 175,“oracle”GID 使用 115。

创建 Oracle 的组和用户

首先,创建 UNIX oinstall 和 dba 组以及 oracle 用户帐户:

# groupadd -g 115 oinstall

# groupadd -g 116 dba

# useradd -m -u 175 -g oinstall -G dba -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle

# id oracle

uid=175(oracle) gid=115(oinstall) groups=115(oinstall),116(dba)

设置 oracle 帐户的口令:

# passwd oracle

Changing password for user oracle.

New UNIX password: xxxxxxxxxxx

Retype new UNIX password: xxxxxxxxxxx

passwd: all authentication tokens updated successfully.

注意,UNIX 组 oinstall 的成员被视为 Oracle 软件的“所有者”。dba 组的成员可以管理 Oracle 数据库,例如,启动和关闭数据库。在本文中,我们将创建 oracle 用户帐户以承担全部责任!

验证用户 nobody 存在

安装 Oracle 软件之前,执行以下操作,以验证用户 nobody 存在于系统中:

  1. 要确定该用户是否存在,输入以下命令:

# id nobody

uid=99(nobody) gid=99(nobody) groups=99(nobody)

如果该命令显示了 nobody 用户的信息,则无需创建该用户。

  1. 如果用户 nobody 不存在,则输入以下命令进行创建:

# /usr/sbin/useradd nobody

  1. 在集群中的所有其他 Oracle RAC 节点上重复此过程。

4.4 建立相关的基本目录和挂载点

创建 Oracle 基本目录

下一步是创建一个新目录,用于存储 Oracle 数据库软件。在配置 oracle 用户的环境时(本部分后面的内容),我们将把该目录的位置指定给 $ORACLE_BASE 环境变量。

以下内容假设在根文件系统中创建目录。请注意,这样做是为了简便起见,不建议将其作为通用做法。通常,这些目录将在单独的文件系统中创建。

创建目录之后,您必须为其指定正确的拥有者、组和权限。在两个 Oracle RAC 节点上执行以下命令:

# mkdir -p /opt/app/oracle

# chown -R oracle:oinstall /opt/app/oracle

# chmod -R 775 /opt/app/oracle

在过程结束时,您将看到以下内容:

  • /opt 由根目录拥有。

  • /opt/app 由根目录拥有。

  • /opt/app/oracle 由具有 775 权限的 oracle:oinstall 拥有。该所有权和权限允许 OUI 在 /opt/app/oracle/oraInventory 路径下创建 oraInventory 目录。

创建 Oracle 集群件主目录

接下来,创建一个新目录,用于存储 Oracle 集群件软件。在配置 oracle 用户的环境时(本部分后面的内容),我们将把该目录的位置指定给 $ORA_CRS_HOME 环境变量。

如上一部分中所述,以下内容假设目录将在根文件系统中创建。这样做是为了简便起见,不建议将其作为通用做法。通常,这些目录将在单独的文件系统中创建。

创建目录之后,您必须为其指定正确的拥有者、组和权限。在两个 Oracle RAC 节点上执行以下命令:

# mkdir -p /opt/app/crs

# chown -R oracle:oinstall /opt/app/crs

# chmod -R 775 /opt/app/crs

在过程结束时,您将看到以下内容:

  • /opt 由根目录拥有。

  • /opt/app 由根目录拥有。

  • /opt/app/crs 由具有 775 权限的 oracle:oinstall 拥有。这些权限是安装 Oracle 集群件所需的,并且在安装过程中将被更改。

为 OCFS2/ 集群件创建挂载点

现在,让我们为 Oracle 集群文件系统第 2 版 (OCFS2) 创建挂载点,它将用于存储两个 Oracle 集群件共享文件。

如上一部分中所述,以下内容假设目录将在根文件系统中创建。这样做是为了简便起见,不建议将其作为通用做法。通常,这些目录将在单独的文件系统中创建。在两个 Oracle RAC 节点上执行以下命令:

# mkdir -p /opt/oradata/orcl

# chown -R oracle:oinstall /opt/oradata/orcl

# chmod -R 775 /opt/oradata/orcl

4.5 修改环境变量

在两个节点上创建“oracle”UNIX 用户帐户后,确保以 oracle 用户身份登录,并使用本部分提供的 .bash_profile 验证环境是否设置得当。

注:当您为每个 Oracle RAC 节点设置 Oracle 环境变量时,请确保为每个 RAC 节点分配唯一的 Oracle SID!对于此示例,我使用:

  • rac1:ORACLE_SID=orcl1

  • rac2:ORACLE_SID=orcl2

以 oracle 用户帐户登录到每个节点:

# su – oracle

# vi .bash_profile

“oracle”用户帐户的 .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

      . ~/.bashrc

fi

alias ls="ls -FA"

export JAVA_HOME=/usr/local/java

# User specific environment and startup programs

export ORACLE_BASE=/opt/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1

export ORA_CRS_HOME=/opt/app/crs

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

export CV_JDKHOME=/usr/local/java

# Each RAC node must have a unique ORACLE_SID. (i.e. orcl1, orcl2,...)

export ORACLE_SID=orcl1

(注意此行,rac2应为:export ORACLE_SID=orcl2)

export PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin

export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin

export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin

export ORACLE_TERM=xterm

export TNS_ADMIN=$ORACLE_HOME/network/admin

export ORA_NLS10=$ORACLE_HOME/nls/data

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib

export CLASSPATH=$ORACLE_HOME/JRE

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib

export THREADS_FLAG=native

export TEMP=/tmp

export TMPDIR=/tmp

4.6 修改操作系统内核参数和相关配置

以下操作在两台节点均要进行

本部分将集中讨论针对 Oracle RAC 10g 的安装配置两台 Oracle RAC Linux 服务器的步骤。这包括验证足够的交换空间、设置共享内存和信号、设置文件句柄的最大数量、设置 IP 本地端口范围、设置对 oracle 用户的 shell 限制、激活系统的所有内核参数,以及如何验证两个集群节点的日期和时间是否正确。

在本节中,您将注意到可以使用多种方法来配置(设置)这些参数。就本文而言,我将通过把所有命令置于 /etc/sysctl.conf 文件中使所有更改永久有效(通过重新引导)。

对交换空间的考虑因素

  • 安装 Oracle 数据库 10g 第 2 版至少需要 512MB 内存。(注:安装期间交换容量不足会导致 Oracle Universal Installer“挂起”或“死机”)

  • 要检查您已经具有的内存容量,键入:

# cat /proc/meminfo | grep MemTotal
MemTotal: 1033116 kB

  • 要检查您已经分配的交换容量,键入:

# cat /proc/meminfo | grep SwapTotal
SwapTotal: 2031608 kB

  • 如果您的内存少于 512MB(介于 RAM 与 SWAP 之间),您可以通过创建临时交换文件添加临时交换空间。这样,您就不必使用原始设备甚至更彻底地重建系统了。

以 root 身份创建一个用作额外交换空间的文件,假设大小为 300MB:
# dd if=/dev/zero of=tempswap bs=1k count=300000

现在我们应该更改文件的权限:

# chmod 600 tempswap

最后我们将该“分区”格式化为交换分区,并将其添加到交换空间:
# mke2fs tempswap
# mkswap tempswap
# swapon tempswap

设置共享内存

共享内存通过将通用的结构和数据放在共享内存段中,使得进程可以对它们进行访问。这是现有最快的进程间通信 (IPC) 方式,主要是因为数据在进程之间传递时没有涉及内核操作。不需要在进程间复制数据。

Oracle 将共享内存用于它的共享全局区 (SGA),这是一个由所有的 Oracle 备份进程及前台进程共享的内存区域。为 SGA 分配足够的容量对于 Oracle 的性能非常重要,这是因为它负责保存数据库缓冲区缓存、共享 SQL、访问路径,等等。

要确定所有共享内存的限制,使用以下命令:

# ipcs -lm
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1

设置 SHMMAX

SHMMAX 参数定义共享内存段的最大大小(以字节为单位)。Oracle SGA 由共享内存组成,且错误设置 SHMMAX 可能会限制 SGA 的大小。在设置 SHMMAX 时,切记 SGA 的大小应该适合于一个共享内存段。SHMMAX 设置不足可能会导致以下问题:

ORA-27123: unable to attach to shared memory segment

您可以通过执行以下命令确定 SHMMAX 的值:

# cat /proc/sys/kernel/shmmax
33554432

SHMMAX 的默认值为 32MB。通常,这个值对于配置 Oracle SGA 而言太小了。我通常使用以下方法将 SHMMAX 参数设置为 2GB:

  • 可以通过使用以下命令直接更改 /proc 文件系统 (/proc/sys/kernel/shmmax) 来更改 SHMMAX 的默认设置,而不必重新引导计算机:

  • # sysctl -w kernel.shmmax=2147483648

  • 然后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使这种更改永久有效:

  • # echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf

设置 SHMMNI

我们现在看一下 SHMMNI 参数。这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096。

可以通过执行以下命令确定 SHMMNI 的值:

# cat /proc/sys/kernel/shmmni
4096

SHMMNI 的默认设置应足以满足 Oracle RAC 10g 第 2 版安装的需要。

设置 SHMALL

最后,我们来看 SHMALL 共享内存内核参数。该参数控制系统一次可以使用的共享内存总量(以页为单位)。

SHMALL 的默认大小为 2097152,并可以使用以下命令进行查询:

# cat /proc/sys/kernel/shmall
2097152

SHMALL 的默认设置应足以满足 Oracle RAC 10g 第 2 版安装的需要。 (注:i386 平台上的 Red Hat Linux 中的页面大小为 4,096 字节。但您可以使用 bigpages,它支持更大内存页面的配置。)

设置信号

至此,您已经配置了共享内存设置,接下来将配置信号。对“信号”的最佳描述是,它是用于在共享资源(如共享内存)的进程(或进程中的线程)之间提供同步的计数器。UNIX System V 支持信号集,其中的每个信号都是一个计数信号。当应用程序请求信号时,它使用“集合”来完成此工作。

要确定所有信号限制,使用以下命令:

# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

您还可以使用以下命令:

# cat /proc/sys/kernel/sem
250 32000 32 128

设置 SEMMSL

SEMMSL 内核参数用于控制每个信号集合的最大信号数。 Oracle 建议将 SEMMSL 设置为 init.ora 文件(适用于 Linux 系统上所有数据库)中的最大 PROCESS 实例参数设置再加上 10。此外,Oracle 建议将 SEMMSL 设置为不小于 100。

设置 SEMMNI

SEMMNI 内核参数用于控制整个 Linux 系统中信号集的最大数量。Oracle 建议将 SEMMNI 设置为不小于 100。

设置 SEMMNS

SEMMNS 内核参数用于控制整个 Linux 系统中的信号(而非信号集)的最大数量。 Oracle 建议将 SEMMNS 设置为系统上每个数据库的 PROCESSES 实例参数设置之和,加上最大的 PROCESSES 的两倍,最后为系统上的每个 Oracle 数据库加上 10。 使用以下计算式确定可以在 Linux 系统上分配的信号的最大数量。它将是以下两者中较小的一个值:

SEMMNS -or- (SEMMSL * SEMMNI)

设置 SEMOPM

SEMOPM 内核参数用于控制每个 semop 系统调用可以执行的信号操作数。 semop 系统调用(函数)能够使用一个 semop 系统调用完成多个信号的操作。一个信号集可以拥有每个信号集中最大数量的 SEMMSL,因此建议将 SEMOPM 设置为等于 SEMMSL。 Oracle 建议将 SEMOPM 设置为不小于 100。

设置信号内核参数

最后,我们来看如何使用一些方法来设置所有信号参数。在下文中,我想更改(增加)的唯一参数是 SEMOPM。所有其他的默认设置可以完全满足我们的示例安装。

  • 可以通过使用以下命令直接更改 /proc 文件系统 (/proc/sys/kernel/sem) 来更改所有信号设置的默认设置,而不必重新引导计算机:

# sysctl -w kernel.sem="250 32000 100 128"

  • 然后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使这种更改永久有效:

  • # echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf

设置文件句柄

在配置我们的 Red Hat Linux 服务器时,确保文件句柄的最大数量足够大是非常关键的。文件句柄的设置表示您在 Linux 系统上可以打开的文件数。

使用以下命令来确定整个系统中文件句柄的最大数量:

# cat /proc/sys/fs/file-max
102563

Oracle 建议将整个系统的文件句柄值至少设置为 65536。

  • 可以通过使用以下命令直接更改 /proc 文件系统 (/proc/sys/fs/file-max) 更改文件句柄最大数量的默认设置,不必重新引导计算机:

  • # sysctl -w fs.file-max=65536

  • 然后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使这种更改永久有效:

  • # echo "fs.file-max=65536" >> /etc/sysctl.conf

可以通过使用以下命令查询文件句柄的当前使用情况:

# cat /proc/sys/fs/file-nr
825 0 65536

file-nr 文件显示了三个参数:分配的文件句柄总数、当前使用的文件句柄数以及可以分配的最大文件句柄数。(注:如果需要增大 /proc/sys/fs/file-max 中的值,请确保正确设置 ulimit。对于 2.4.20,通常将其设置为 unlimited。使用 ulimit 命令验证 ulimit 设置:

# ulimit
unlimited

设置 IP 本地端口范围

配置系统,使本地端口范围为 1024 至 65000。

使用以下命令确定 ip_local_port_range 的值:

# cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000

ip_local_port_range 的默认值是从 32768 到 61000 的端口。Oracle 建议的本地端口范围是 1024 到 65000。

  • 可以通过使用以下命令直接修改 /proc 文件系统 (/proc/sys/net/ipv4/ip_local_port_range),以更改本地端口范围的默认设置,而不必重新引导计算机:

# sysctl -w net.ipv4.ip_local_port_range="1024 65000"

  • 然后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使这种更改永久有效:

# echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf

为 Oracle 用户设置 Shell 限制

要改善 Linux 系统上的软件性能,Oracle 建议您提高 oracle 用户的 shell 限制:

Shell 限制

limits.conf 中的条目

硬限制

最大打开文件描述符数

nofile

65536

可用于单个用户的最大进程数

nproc

16384

要进行这些更改,以 root 用户身份运行以下命令:

cat >> /etc/security/limits.conf <<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF

cat >> /etc/pam.d/login <<EOF
session required /lib/security/pam_limits.so
EOF

为“oracle”UNIX 帐户更新默认的 shell 启动文件。

  • 对于 Bourne、Bash 或 Korn shell,通过运行以下命令将以下行添加到 /etc/profile 文件:

cat >> /etc/profile <<EOF
if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF

  • 对于 C shell(csh 或 tcsh),通过运行以下命令将以下行添加到 /etc/csh.login 文件:

cat >> /etc/csh.login <<EOF
if ( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
endif
EOF

激活系统的所有内核参数

此时,我们已经包含了成功进行 Oracle 安装和配置所需的所有 Linux 内核参数。在以上每一部分中,我们对 Linux 系统进行了配置,将所有内核参数置于 /etc/sysctl.conf 文件中以将其保存在系统启动上。

现在,我们可以重新启动以确保所有这些参数在内核中进行设置,或者,我们只需通过以 root 用户身份运行以下命令来“运行”/etc/sysctl.conf 文件。请在集群的每一个节点上执行该操作!

# sysctl -p

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.core.rmem_default = 262144

net.core.wmem_default = 262144

net.core.rmem_max = 262144

net.core.wmem_max = 262144

kernel.shmmax = 2147483648

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

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

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

Error while copying directory

    /opt/app/crs with exclude file list 'null' to nodes 'rac2'.

[PRKC-1002 : All the submitted commands did not execute successfully]

---------------------------------------------

rac2:

   /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 服务器并非始终可用。在这种情况下,为集群中的节点手动设置日期和时间,确保要从其中执行软件安装的节点 (rac1) 的时间和日期小于集群中所有其他节点 (rac2)。我一般使二者之间相差 20 秒,如以下示例所示:

设置 rac1 的日期和时间:

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

设置 rac2 的日期和时间:

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

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


配置 hangcheck-timer 内核模块

在集群中的两个 Oracle RAC 节点上执行以下配置过程!

Oracle9i 第 1 版 (9.0.1) 和 Oracle9i 第 2 版 (9.2.0.1) 使用一个称为 watchdogd 的用户空间监视后台程序 监视集群的运行状况,并在出现故障时重新启动 RAC 节点。从 Oracle9i 第 2 版 (9.2.0.2) 开始(在 Oracle 10g 第 2 版中仍然存在),一个称为 hangcheck-timer 的 Linux 内核模块取代了监视后台程序,该模块更好地解决了可用性和可靠性问题。它将 hang-check 计时器加载到 Linux 内核中并检查系统是否挂起。它将设置一个计时器,并在特定的时间量之后检查该计时器。有一个用于检查挂起情况的可配置阈值,如果超过该阈值,计算机将重新引导。尽管 Oracle 集群件(集群管理器)操作不需要 hangcheck-timer 模块,但 Oracle 强烈建议使用它。

hangcheck-timer.ko 模块

hangcheck-timer 模块使用了一个基于内核的计时器,该计时器周期性地检查系统任务调度程序来捕获延迟,从而确定系统的运行状况。如果系统挂起或暂停,则计时器重置该节点。hangcheck-timer 模块使用时间戳计数器 (TSC) CPU 寄存器,该寄存器每接收到一个时钟信号就将计数加一。

安装 hangcheck-timer.ko 模块

hangcheck-timer 通常仅与 Oracle 一同提供,但是,现在从内核版本 2.4.9-e.12 起,该模块与 Red Hat Linux AS 包含在一起。hangcheck-timer 应当已包含在内。使用以下命令来确认您已经包含了该模块:

# find /lib/modules -name "hangcheck-timer.ko"

/lib/modules/2.6.9-55.0.0.0.2.ELhugemem/kernel/drivers/char/hangcheck-timer.ko

/lib/modules/2.6.9-55.0.0.0.2.ELsmp/kernel/drivers/char/hangcheck-timer.ko

/lib/modules/2.6.9-55.0.0.0.2.EL/kernel/drivers/char/hangcheck-timer.ko

在以上输出中,我们关注的是 /lib/modules/2.6.9-55.0.0.0.2.ELhugemem/kernel/drivers/char 目录中的 hangcheck 计时器对象 (hangcheck-timer.ko),因为这是我们运行的核心。

配置并加载 hangcheck-timer 模块

hangcheck-timer 模块有两个关键的参数:

  • hangcheck-tick:此参数定义了系统运行状况检查的间隔时间。默认值为 60 秒;Oracle 建议将它设置为 30 秒。

  • hangcheck-margin:此参数定义了 hangcheck-timer 在重置 RAC 节点前所容许的最大挂起延迟。它定义了以秒为单位的误差幅度。默认值为 180 秒;Oracle 建议将它设置为 180 秒。

注:这两个 hangcheck-timer 模块参数表示在该模块重置系统前 RAC 节点必须挂起的时长。当以下条件为真时将会重置节点: system hang time > (hangcheck_tick + hangcheck_margin)

配置 Hangcheck 内核模块参数

每次加载 hangcheck-timer 内核模块(手动加载或由 Oracle 加载)时,它都需要知道对我们刚刚讨论的两个参数(hangcheck-tick 和 hangcheck-margin) 所使用的值。这些值需要在每次重新引导 Linux 服务器后可用。为此,在 /etc/modprobe.conf 文件中创建一个具有正确值的条目,如下所示:

# su -
# echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modprobe.conf

      每次加载 hangcheck-timer 内核模块时,它将使用由我在 /etc/modprobe.conf 文件中创建的条目定义的值。

手动加载 Hangcheck 内核模块以进行测试

Oracle 负责在需要时加载 hangcheck-timer 内核模块。因此,不必在任何启动文件(如 /etc/rc.local)中执行 hangcheck-timer 内核模块的 modprobe 或 insmod。

我继续在 /etc/rc.local 文件中包含 hangcheck-timer 内核模块的 modprobe 完全只是出于个人习惯。有朝一日我将戒掉这个习惯,但请注意,启动过程中包含 hangcheck-timer 内核模块的 modprobe 并无害处。

# echo "/sbin/modprobe hangcheck-timer" >> /etc/rc.local

    (注:您不必在每次重新引导后使用 modprobe 或 insmod 手动加载 hangcheck-timer 内核模块。Oracle 将在需要时自动加载 hangcheck-timer 模块。)

现在,为了测试 hangcheck-timer 内核模块以验证它是否选取我们在 /etc/modprobe.conf 文件中定义的正确参数,使用 modprobe 命令。尽管可以通过向其传递相应的参数(如 insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180)加载 hangcheck-timer 内核模块,但我们需要验证它是否选取了我们在 /etc/modprobe.conf 文件中设置的选项。

要手动加载 hangcheck-timer 内核模块并验证它是否使用在 /etc/modprobe.conf 文件中定义的正确值,运行以下命令:

# su -

# modprobe hangcheck-timer

# grep Hangcheck /var/log/messages | tail -2

Jun 25 18:18:31 rac1 kernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 30 seconds, margin is 180 seconds).

Jun 25 18:18:31 rac1 kernel: Hangcheck: Using monotonic_clock().

4.7 为远程访问配置节点

在集群中的两个 Oracle RAC 节点上执行以下配置过程!

在可以安装并使用 Oracle 真正应用集群之前,您必须为所有集群节点上的“oracle”UNIX 用户帐户配置安全 shell (RSH) 或远程 shell (RSH)。此处的目的是为“oracle”UNIX 用户帐户设置用户等效性。利用用户等效性 (User equivalence),“oracle”UNIX 用户帐户无需口令就可访问集群中的所有其他节点(运行命令和复制文件)。使用 SSH 或 RSH(其中 SSH 是首选方法)都可实现此配置。Oracle 在 10g 第 1 版中增加了将 SSH 工具套件用于设置用户等效项的支持。在 Oracle 数据库 10g 之前,用户等效性必须使用远程 shell 进行配置。

注意,如果 10g 中的 Oracle Universal Installer 没有检测出存在安全 shell 工具(ssh 和 scp),那么它将尝试使用远程 shell 工具(rsh 和 rcp)。

那么,我们为什么必须设置用户等效性?安装 Oracle 集群件和 Oracle 数据库软件只在 RAC 集群中的一个节点上进行。在特定节点上运行 Oracle Universal Installer (OUI) 时,它将使用 ssh 和 scp 命令(如果使用远程 shell,则用 rsh 和 rcp 命令)在集群内的所有其他节点上运行远程命令并向这些节点复制文件(Oracle 软件)。运行 OUI (runInstaller) 的节点上的“oracle”UNIX 用户帐户必须受到您的 RAC 集群中其他所有节点的信任。这意味着,相对于集群中的所有其他 Linux 服务器,您必须能够在要从其中运行 OUI 的 Linux 服务器上运行安全 shell 命令(ssh 或 scp)或远程 shell 命令(rsh 和 rcp),而不会收到输入口令的提示。

注意,普通 RAC 操作无需使用安全 shell 或远程 shell。然而,对于 RAC 和补丁集安装以及创建集群数据库时,必须启用该配置。

第一步是确定使用哪种远程访问方法 — 安全 shell 还是远程 shell。二者各有利弊。例如,远程 shell 非常易于安装和配置。它的构造只需很少的几步,并当登录到受信任的节点(要从其中执行安装的节点)后,其在终端会话中始终可用。然而,在安装和任何修补过程中,到远程节点的连接不安全。另一方面,安全 shell 可在安装和修补时提供安全连接,但是设置步骤繁琐。此外,每次 oracle 用户登录到受信任的节点后,都需要在终端会话中启用该方法。官方 Oracle 文档仅给出了设置安全 shell 的步骤,并将其作为首选方法。

在以下两个部分对于配置用户等效性的这两种方法进行了介绍:

使用安全 Shell 方法

本部分将介绍如何配置 OpenSSH 版本 3。要确定是否 SSH 已安装并运行,可输入以下命令:

# pgrep sshd
2808

如果 SSH 正在运行,那么该命令的响应将是一个进程 ID 编号(一个或多个)列表。请在集群中的两个 Oracle RAC 节点上运行该命令,以验证 SSH 后台程序已安装并正在运行!

在两个 Oracle RAC 节点上创建 RSA 和 DSA 密钥

配置 SSH 的第一步是在集群中的两个 Oracle RAC 节点上创建 RSA 和 DSA 密钥对。执行该操作的命令将为 RSA 和 DSA 各创建一个公共密钥和一个私有密钥(每个节点总共 4 个密钥)。然后,需要将 RSA 和 DSA 公共密钥的内容复制到一个授权密钥文件 中,之后将该文件分发到集群中的两个 Oracle RAC 节点。

使用以下步骤创建 RSA 和 DSA 密钥对。请注意,集群中的两个 Oracle RAC 节点上均需要完成这些步骤:

  1. 以“oracle”UNIX 用户帐号进行登录。

# su - oracle

  1. 如果必要,在“oracle”用户的主目录中创建 .ssh 目录,并在其上设置正确的权限:

$ mkdir -p ~/.ssh

$ chmod 700 ~/.ssh

  1. 输入以下命令,为版本 3 的 SSH 协议生成 RSA 密钥对(公共密钥和私有密钥):

$ /usr/bin/ssh-keygen -t rsa

在提示符下:

  • 接受针对密钥文件的默认位置。

  • 输入并确认口令短语。该口令应当与“oracle”UNIX 用户帐户口令不同,但这不是必需的。

该命令会将公共密钥写入 ~/.ssh/id_rsa.pub 文件,将私有密钥写入 ~/.ssh/id_rsa 文件。注意,始终不要将密钥分发给任何人!

  1. 输入以下命令,为版本 3 的 SSH 协议生成 DSA 密钥对(公共密钥和私有密钥):

$ /usr/bin/ssh-keygen -t dsa

在提示符下:

  • 接受针对密钥文件的默认位置。

  • 输入并确认口令短语。该口令应当与“oracle”UNIX 用户帐户口令不同,但这不是必需的。

该命令会将公共密钥写入 ~/.ssh/id_dsa.pub 文件,将私有密钥写入 ~/.ssh/id_dsa 文件。注意,始终不要将密钥分发给任何人!

  1. 为集群中的两个 Oracle RAC 节点重复以上步骤。

现在,每个 Oracle RAC 节点都包含用于 RSA 和 DSA 的公共和私有密钥,您需要在其中一个节点上创建一个授权密钥文件。授权密钥文件只是一个包含每个人(每个节点)的 RSA 和 DSA 公共密钥的文件。在授权密钥文件包含了所有公共密钥后,将其分发至集群中的所有其他节点。

在集群中的其中一个节点上完成以下步骤,然后分发授权密钥文件。考虑到本文的目的,我将使用 rac1:

  1. 首先,确定该节点上是否已经存在授权密钥文件 (~/.ssh/authorized_keys)。在多数情况下,该文件是不存在的,因为本文假设您使用的是新安装。如果该文件不存在,那么现在开始创建:

$ touch ~/.ssh/authorized_keys

$ cd ~/.ssh

$ ls -l *.pub

-rw-r--r--  1 oracle oinstall 603 Aug 31 23:40 id_dsa.pub

-rw-r--r--  1 oracle oinstall 223 Aug 31 23:36 id_rsa.pub

以上的列表应当显示前一部分中创建的 id_rsa.pub 和 id_dsa.pub 公共密钥。

  1. 在该步骤中,使用 SSH 将 ~/.ssh/id_rsa.pub 和 ~/.ssh/id_dsa.pub 公共密钥的内容从集群中的两个 Oracle RAC 节点复制到刚才创建的授权密钥文件中 (~/.ssh/authorized_keys)。同样,我将通过 rac1 进行操作。系统将提示您为每个访问的 Oracle RAC 节点输入“oracle”UNIX 用户帐户口令。注意,在使用 SSH 访问您所在的节点 (rac1) 时,第一次将提示输入“oracle”UNIX 用户帐户口令。第二次尝试访问该节点时,将提示输入用于解锁私有密钥的口令短语。对于任何其他节点,系统将始终询问“oracle”UNIX 用户帐户口令。

以下示例将从 rac1 运行,假设这是个双节点集群,即节点 rac1 和 rac2:

$ ssh rac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

The authenticity of host 'rac1 (192.168.1.100)' can't be established.

RSA key fingerprint is 61:8a:f9:9e:28:a2:b7:d3:70:8d:dc:76:ca:d9:23:43.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'rac1,192.168.1.100' (RSA) to the list of known hosts.

oracle@rac1's password: xxxxx

$ ssh rac1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Enter passphrase for key '/home/oracle/.ssh/id_rsa': xxxxx

$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

The authenticity of host 'rac2 (192.168.1.101)' can't be established.

RSA key fingerprint is 84:2b:bd:eb:31:2c:23:36:55:c2:ee:54:d2:23:6a:e4.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'rac2,192.168.1.101' (RSA) to the list of known hosts.

oracle@rac2's password: xxxxx

$ ssh rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

oracle@rac2's password: xxxxx

注:第一次使用 SSH 从特定系统连接到节点时,您可能会看见一条类似如下所示的消息:

The authenticity of host 'rac1 (192.168.1.100)' can't be established.

RSA key fingerprint is 61:8a:f9:9e:28:a2:b7:d3:70:8d:dc:76:ca:d9:23:43.

Are you sure you want to continue connecting (yes/no)? yes

在提示符下输入 yes 进行确认。如果从该系统连接到相同的节点,您将不会再次看到该消息。

  1. 此时,在 rac1 上,我们在授权密钥文件 (~/.ssh/authorized_keys) 中获得了来自集群中各个节点的 RSA 和 DSA 公共密钥内容。我们现在将其复制到集群中的其余节点。在这个双节点集群示例中,唯一剩下的节点就是 rac2。使用 scp 命令将授权密钥文件复制到集群中的其余所有节点:

$ scp ~/.ssh/authorized_keys rac2:.ssh/authorized_keys

oracle@rac2's password: xxxxx

authorized_keys                                     100% 1652 1.6KB/s 00:00

  1. 通过登录到节点并运行以下命令,为集群中的两个 Oracle RAC 节点更改授权密钥文件的权限:

$ chmod 600 ~/.ssh/authorized_keys

  1. 此时,如果在另一个节点上使用 ssh 登录或运行命令,则会提示您输入在创建 DSA 密钥时指定的口令短语。例如,在 rac1 中测试以下内容:

$ ssh rac1 hostname

Enter passphrase for key '/home/oracle/.ssh/id_rsa': xxxxx

rac1

$ ssh rac2 hostname

Enter passphrase for key '/home/oracle/.ssh/id_rsa': xxxxx

rac2

注:如果除主机名外,您还看到任何其他消息或文本,则 Oracle 安装可能失败了。进行必要的更改,以确保您在输入这些命令时只有主机名显示。您应当确保修改生成任何输出或询问任何问题的登录脚本(一个或多个)的任何部分,以便它们仅当 shell 是交互式 shell 时生效。

为当前 Shell 会话启用 SSH 用户等效性

运行 OUI 时,需要不用提示输入口令短语就可运行安全 shell 工具命令(ssh 和 scp)。尽管集群中的两个 Oracle RAC 节点上都配置了 SSH,使用安全 shell 工具命令时仍会提示输入口令短语。因此,在运行 OUI 之前,您需要为打算从其中运行 OUI 的终端会话启用用户等效性。考虑到本文目的,所有 Oracle 安装都将在 rac1 中进行。

在尝试运行 OUI 之前,需要在任何新的终端 shell 会话中启用用户等效性。如果您注销并又重新登录将从其中执行 Oracle 安装的节点,那么您必须为终端 shell 会话启用用户等效性,因为这不是默认设置。

要为当前终端 shell 会话启用用户等效性,执行以下步骤:

  1. 以“oracle”UNIX 用户帐户登录希望从其中运行 OUI 的节点 (rac1)。

# su - oracle

  1. 输入以下命令:

$ 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)

Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)

在提示符下,为生成的每个密钥输入口令短语。

  1. 如果 SSH 配置正确,您将能够从该终端对话使用 ssh 和 scp 命令,而无需提供口令或口令短语。

$ ssh rac1 "date;hostname"

Mon Jun 25 18:24:23 EDT 2007

rac1

$ ssh rac2 "date;hostname"

Mon Jun 25 18:26:15 EDT 2007

rac2

注:以上命令应显示两个 Oracle RAC 节点上设置的日期及其主机名。如果任何节点提示输入口令或口令短语,则验证位于该节点上的 ~/.ssh/authorized_keys 文件是否包含正确的公共密钥。此外,如果除日期和主机名外,您还看到其他任何消息或文本,则 Oracle 安装可能失败了。进行必要的更改,以确保您在输入这些命令时只有日期显示。您应当确保修改生成任何输出或询问任何问题的登录脚本(一个或多个)的任何部分,以便它们仅当 shell 是交互式 shell 时生效。

  1. Oracle Universal Installer 是一个 GUI 接口,要求使用 X 服务器。在启用了用户等效性的终端会话中(您将从其中执行 Oracle 安装的节点),将环境变量 DISPLAY 设置为有效的 X 窗口显示:

Bourne、Korn 和 Bash shell:

$ DISPLAY=<Any X-Windows Host>:0

$ export DISPLAY

C shell:

$ setenv DISPLAY <Any X-Windows Host>:0

将 DISPLAY 变量设置为有效的 X 窗口显示后,您应当执行当前终端会话的另一个测试,以确保 X11 forwarding 没有启用:

$ ssh rac1 hostname

rac1

$ ssh rac2 hostname

rac2

注:如果您使用远程客户端连接到执行安装的节点,则会看到类似下面的消息:"Warning:No xauth data; using fake authentication data for X11 forwarding.”,这意味着您的授权密钥文件配置正确,但是,您的 SSH 配置启用了 X11 forwarding。例如:

$ export DISPLAY=melody:0

$ ssh rac2 hostname

Warning: No xauth data; using fake authentication data for X11 forwarding.

rac2

注意,启用 X11 Forwarding 将导致 Oracle 安装失败。要纠正这个问题,需为禁用 X11 Forwarding 的“oracle”UNIX 用户帐户创建一个用户级 SSH 客户端配置文件:

  • 使用文本编辑器,编辑或创建文件 ~/.ssh/config

  • 确保 ForwardX11 属性设为 no。例如,将以下内容插入 ~/.ssh/config file:

Host *
ForwardX11 no

  1. 您必须从该终端会话运行 Oracle Universal Installer,或记住在从不同终端会话启动 Oracle Universal Installer 之前,重复这些步骤(该部分的步骤 2、3 和 4)以启用用户等效性。

删除所有 stty 命令

在安装 Oracle 软件时,系统上任何包含 stty 命令的隐藏文件(即 .bashrc、.cshrc、.profile)都将导致安装过程失败。要避免该问题,您必须修改这些文件以取消所有关于 STDERR 的输出,如下所示:

  • Bourne、Bash 或 Korn shell:

if [ -t 0 ]; then
stty intr ^C
fi

  • C shell:

test -t 0
if ($status == 0) then
stty intr ^C
endif

注:如果由远程 shell 加载的隐藏文件包含 stty 命令,则 OUI 将指示错误并停止安装。

使用远程 Shell 方法

在多数 Linux 系统上,远程 shell 提供的服务默认为禁用。本部分将介绍启用并配置用户等效性所需的任务,以供 Oracle Universal Installer、运行命令时以及使用远程 shell 工具复制到集群中远程节点的文件使用。目的是使 Oracle Universal Installer 能够使用 rsh 和 rcp 来运行命令,以及不用提供口令就可将文件复制到远程节点。请注意,使用远程 shell 方法来配置用户等效性不安全。

rsh 后台程序使用位于用户(oracle 的)主目录中的 /etc/hosts.equiv 文件或 .rhosts 文件验证用户。

首先,确保集群中的两个 Oracle RAC 节点上都安装了 rsh RPM:

# rpm -q rsh rsh-server

rsh-0.17-25.4

rsh-server-0.17-25.4

根据以上信息,我们可以确认已经安装了 rsh 和 rsh-server。如果未安装 rsh,则可以从 RPM 所在的 CD 中运行以下命令:

# su -

# rpm -ivh rsh-0.17-25.4.i386.rpm rsh-server-0.17-25.4.i386.rpm

要启用“rsh”和“rlogin”服务,必须将 /etc/xinetd.d/rsh 文件中的“disable”属性设置为“no”并且必须重新加载 xinetd。这可通过在集群中的所有节点上运行以下命令来完成:

# su -
# chkconfig rsh on

# chkconfig rlogin on

# service xinetd reload

Reloading configuration: [ OK ]

要使“oracle”UNIX 用户帐户在 RAC 节点中获得信任,在集群中的所有节点上创建 /etc/hosts.equiv 文件:

# su -

# touch /etc/hosts.equiv

# chmod 600 /etc/hosts.equiv

# chown root.root /etc/hosts.equiv

现在,将所有 RAC 节点添加到集群中类似于以下示例的两个 Oracle RAC 节点的 /etc/hosts.equiv 文件中:

# cat /etc/hosts.equiv

+rac1 oracle

+rac2 oracle

+rac1-priv oracle

+rac2-priv oracle

注:在以上示例中,第二个字段只允许 oracle 用户帐户在指定节点上运行 rsh 命令。由于安全原因,/etc/hosts.equiv 文件应该由 root 所拥有,并应该将权限设置为 600。实际上,某些系统只有在该文件的所有者为 root 并且权限被设置为 600 时才接受此文件的内容。

尝试测试 rsh 命令前,确保使用的是正确版本的 rsh。在默认情况下,Red Hat Linux 将 /usr/kerberos/sbin 放在 $PATH 变量的前面。这会导致执行 rsh 的 Kerberos 版本。

我通常会重命名 rsh 的 Kerberos 版本,以便使用正常的 rsh 命令。使用以下命令:

# su -

# which rsh

/usr/kerberos/bin/rsh

# mv /usr/kerberos/bin/rsh /usr/kerberos/bin/rsh.original

# mv /usr/kerberos/bin/rcp /usr/kerberos/bin/rcp.original

# mv /usr/kerberos/bin/rlogin /usr/kerberos/bin/rlogin.original

# which rsh
/usr/bin/rsh

现在,应从将要执行 Oracle 集群件和 10g RAC 安装的节点测试连接并运行 rsh 命令。我将使用节点 rac1 执行所有安装,因此我将从该节点运行以下命令:

# su - oracle

$ rsh rac1 ls -l /etc/hosts.equiv

-rw-------  1 root root 70 Jun 25 18:29 /etc/hosts.equiv

$ rsh rac1-priv ls -l /etc/hosts.equiv

-rw-------  1 root root 70 Jun 25 18:29 /etc/hosts.equiv

$ rsh rac2 ls -l /etc/hosts.equiv

-rw-------  1 root root 70 Jun 25 18:29 /etc/hosts.equiv

$ rsh rac2-priv ls -l /etc/hosts.equiv

-rw-------  1 root root 70 Jun 25 18:29 /etc/hosts.equiv

与使用安全 shell 不同,不需要用其他操作或命令来启用用户等效性以使用远程 shell。在成功登录终端会话后,用户等效性将针对“oracle”UNIX 用户帐户启用。

适用于这两个 Oracle RAC 节点的所有启动命令

验证以下启动命令都包含在集群中的两个 Oracle RAC 节点上!

至此,我们已经详细介绍了配置 Oracle 10g RAC 时需要在两个节点上配置的参数和资源。在本部分中,我们将稍事调整,简要复述这些参数、命令和条目(在本文前面的章节中已提到过),当引导计算机时需要在两个 Oracle RAC 节点上执行它们。

对于以下的每个启动文件,都应将红色的条目包含在每个启动文件中。

/etc/modprobe.conf

alias eth0 r8169

alias eth1 e1000

alias scsi_hostadapter ata_piix

alias snd-card-0 snd-intel8x0

options snd-card-0 index=0

install snd-intel8x0 /sbin/modprobe --ignore-install snd-intel8x0 && /usr/sbin/alsactl restore >/dev/null 2>&1 || :

remove snd-intel8x0 { /usr/sbin/alsactl store >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0

alias usb-controller ehci-hcd

alias usb-controller1 uhci-hcd

options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

/etc/sysctl.conf

# Kernel sysctl configuration file for Red Hat Linux

#

# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and

# sysctl.conf(5) for more details.

# Controls IP packet forwarding

net.ipv4.ip_forward = 0

# Controls source route verification

net.ipv4.conf.default.rp_filter = 1

# Controls the System Request debugging functionality of the kernel

kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.

# Useful for debugging multi-threaded applications.

kernel.core_uses_pid = 1

# +---------------------------------------------------------+

# | ADJUSTING NETWORK SETTINGS                              |

# +---------------------------------------------------------+

# | With Oracle 9.2.0.1 and onwards, Oracle now makes use   |

# | of UDP as the default protocol on Linux for             |

# | inter-process communication (IPC), such as Cache Fusion |

# | and Cluster Manager buffer transfers between instances  |

# | within the RAC cluster. Oracle strongly suggests to     |

# | adjust the default and maximum receive buffer size      |

# | (SO_RCVBUF socket option) to 256 KB, and the default    |

# | and maximum send buffer size (SO_SNDBUF socket option)  |

# | to 256 KB. The receive buffers are used by TCP and UDP  |

# | to hold received data until it is read by the           |

# | application. The receive buffer cannot overflow because |

# | the peer is not allowed to send data beyond the buffer  |

# | size window. This means that datagrams will be          |

# | discarded if they don't fit in the socket receive       |

# | buffer. This could cause the sender to overwhelm the    |

# | receiver.                                               |

# +---------------------------------------------------------+

# +---------------------------------------------------------+

# | Default setting in bytes of the socket "receive" buffer |

# | which may be set by using the SO_RCVBUF socket option.  |

# +---------------------------------------------------------+

net.core.rmem_default=262144

# +---------------------------------------------------------+

# | Maximum setting in bytes of the socket "receive" buffer |

# | which may be set by using the SO_RCVBUF socket option.  |

# +---------------------------------------------------------+

net.core.rmem_max=262144

# +---------------------------------------------------------+

# | Default setting in bytes of the socket "send" buffer    |

# | which may be set by using the SO_SNDBUF socket option.  |

# +---------------------------------------------------------+

net.core.wmem_default=262144

# +---------------------------------------------------------+

# | Maximum setting in bytes of the socket "send" buffer    |

# | which may be set by using the SO_SNDBUF socket option.  |

# +---------------------------------------------------------+

net.core.wmem_max=262144

# +---------------------------------------------------------+

# | ADJUSTING ADDITIONAL KERNEL PARAMETERS FOR ORACLE       |

# +---------------------------------------------------------+

# | Configure the kernel parameters for all Oracle Linux    |

# | servers by setting shared memory and semaphores,        |

# | setting the maximum amount of file handles, and setting |

# | the IP local port range.                                |

# +---------------------------------------------------------+

# +---------------------------------------------------------+

# | SHARED MEMORY                                           |

# +---------------------------------------------------------+

kernel.shmmax=2147483648

# +---------------------------------------------------------+

# | SEMAPHORES                                              |

# | ----------                                              |

# |                                                         |

# | SEMMSL_value  SEMMNS_value  SEMOPM_value  SEMMNI_value  |

# |                                                         |

# +---------------------------------------------------------+

kernel.sem=250 32000 100 128

# +---------------------------------------------------------+

# | FILE HANDLES                                            |

# ----------------------------------------------------------+

fs.file-max=65536

# +---------------------------------------------------------+

# | LOCAL IP RANGE                                          |

# ----------------------------------------------------------+

net.ipv4.ip_local_port_range=1024 65000

注:验证 /etc/sysctl.conf 文件中配置了各个所需的内核参数(前面已述)。然后,在集群的两个 Oracle RAC 节点上运行以下命令,以确保每个参数真正生效:

# sysctl -p

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.core.rmem_default = 262144

net.core.rmem_max = 262144

net.core.wmem_default = 262144

net.core.wmem_max = 262144

kernel.shmmax = 2147483648

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

/etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1        localhost.localdomain   localhost

# Public Network - (eth0)

192.168.1.100    rac1

192.168.1.101    rac2

# Private Interconnect - (eth1)

192.168.2.100    rac1-priv

192.168.2.101    rac2-priv

# Public Virtual IP (VIP) addresses - (eth0)

192.168.1.200    rac1-vip

192.168.1.201    rac2-vip

/etc/hosts.equiv

(/etc/hosts.equiv 文件仅在使用远程 shell 方法建立远程访问和用户等效性时需要。使用远程 shell 方法启用用户等效性后,无需提供口令就可以 oracle 用户帐户登录各个 Oracle RAC 节点。)

+rac1 oracle
+rac2 oracle
+rac1-priv oracle
+rac2-priv oracle

/etc/rc.local

(加载 hangcheck-timer 内核模块。)

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

# +---------------------------------------------------------+

# | HANGCHECK TIMER                                         |

# | (I do not believe this is required, but doesn't hurt)   |

# +---------------------------------------------------------+

/sbin/modprobe hangcheck-timer

4.8 安装配置OCFS2文件系统

应在集群中的这两个 Oracle RAC 节点上执行本节中的大多数配置过程!但创建 OCFS2 文件系统应只在 RAC 集群中的一个节点上执行。

现在,开始配置 Oracle 集群文件系统第 2 版 (OCFS2)。由 Oracle Corporation 开发的 OCFS2 是一个集群文件系统,它允许集群中的所有节点通过标准文件系统接口并发访问一个设备。这样便可以对需要在集群中运行的应用程序进行轻松地管理。

OCFS(第 1 版)于 2002 年 12 月发布,使 Oracle 真正应用集群 (RAC) 用户可以运行集群化数据库而不必处理原始设备。文件系统是为存储数据库相关文件(如数据文件、控制文件、重做日志、归档日志等)设计的。OCFS2 是下一代 Oracle 集群文件系统。它是作为一个通用集群文件系统而设计的。使用它,用户不但可以在共享磁盘上存储与数据库相关的文件,而且还可以存储 Oracle 二进制文件和配置文件(共享的 Oracle 主目录),从而使 RAC 的管理变得更简单。

安装 OCFS2

在本文的前面几个版本中,现在您应该需要从 http://oss.oracle.com/ 下载 OCFS2 软件。OCFS2 软件包含以下软件包:

  • OCFS2 内核驱动程序

    • ocfs2-x.x.x-xx.EL-x.x.x-x.i686.rpm -(用于单处理器)

    • ocfs2-x.x.x-xx.ELsmp-x.x.x-x.i686.rpm -(用于多处理器)

    • ocfs2-x.x.x-xx.ELhugemem-x.x.x-x.i686.rpm -(用于 hugemem)

  • OCFS2 工具

    • ocfs2-tools-x.x.x-x.i386.rpm

  • OCFS2 控制台

    • ocfs2console-x.x.x-x.i386.rpm

但是,由于 Enterprise Linux 中包含了 OCFS2,因此不再需要这一操作。如果您遵循我所提供的 Enterprise Linux 安装指导,则已经安装了所有内容,这时您将拥有所有必需的适用于 OCFS2 的 RPM 程序包。如果您执行了其他安装类型(即,高级服务器),则可能缺少某些 OCFS2 程序包并需要安装它们。所有必需的适用于 OCFS2 的 RPM 都包含在 Enterprise Linux 的第 3 张磁盘上。要确定您的系统中是否安装有 OCFS2,从 Oracle RAC 集群中的两个节点运行以下命令:

# rpm -qa | grep ocfs2 | sort

ocfs2-2.6.9-55.0.0.0.2.EL-1.2.5-1

ocfs2-2.6.9-55.0.0.0.2.ELhugemem-1.2.5-1

ocfs2-2.6.9-55.0.0.0.2.ELsmp-1.2.5-1

ocfs2console-1.2.4-1

ocfs2-tools-1.2.4-1

ocfs2-tools-devel-1.2.4-1

注意,上述清单包含的 OCFS2 内核驱动程序对三种体系结构类型(单处理器、hugemem 和多处理器)都适用。默认情况下,Enterprise Linux 随 hugemem 一同安装,这意味着 ocfs2-2.6.9-55.0.0.0.2.ELhugemem-1.2.5-1 是必需的。但是,安装其他两个 OCFS2 内核驱动程序不会破坏配置。

如果您没有 OCFS2 程序包并需要安装它们,请装载 Enterprise Linux 的第 3 张磁盘,并以 root 用户帐户的身份运行以下命令。确保在集群的两个 Oracle RAC 节点上执行该操作。

$ su -

# mount -r /media/cdrom

# cd /media/cdrom/Enterprise/RPMS

# rpm -Uvh ocfs2*

warning: ocfs2-2.6.9-55.0.0.0.2.EL-1.2.5-1.i686.rpm: V3 DSA signature: NOKEY, key ID b38a8516

Preparing...                ########################################### [100%]

   1:ocfs2-tools            ########################################### [ 20%]

   2:ocfs2-2.6.9-55.0.0.0.2.########################################### [ 40%]

   3:ocfs2-2.6.9-55.0.0.0.2.########################################### [ 60%]

   4:ocfs2-2.6.9-55.0.0.0.2.########################################### [ 80%]

   5:ocfs2console           ########################################### [100%]

# rpm -qa | grep ocfs2 | sort

ocfs2-2.6.9-55.0.0.0.2.EL-1.2.5-1

ocfs2-2.6.9-55.0.0.0.2.ELhugemem-1.2.5-1

ocfs2-2.6.9-55.0.0.0.2.ELsmp-1.2.5-1

ocfs2console-1.2.4-1

ocfs2-tools-1.2.4-1

禁用 SELinux(RHEL4 U2 以及更高版本)

对于 RHEL4 U2 以及更高版本(Enterprise Linux 4.5 基于 RHEL4 U5)的用户,我们建议 OCFS2 不要在启用 SELinux 的情况下运行。如果您现在使用的是 RHEL4 U2 或更高版本(由于我们用的是 Enterprise Linux 4.5,这部分用户也包括我们),您需要确认已禁用 SELinux,以便执行 O2CB 服务。

在安装 Enterprise Linux 时,我们在 Firewall 屏幕上禁用 了 SELinux 功能。不过,如果您在安装过程中没有禁用 SELinux,可以使用工具 system-config-securitylevel 来禁用 SELinux。

要禁用 SELinux(或验证它已禁用),运行“Security Level Configuration”GUI 实用程序:

# /usr/bin/system-config-securitylevel &

这将显示以下屏幕:

Oracle-RAC安装部署手册

Security Level Configuration 打开屏幕

现在,单击 SELinux 选项卡并取消选中“Enabled”复选框。单击 [OK] 后,将显示一个警告对话框。只需单击“Yes”确认该警告。禁用 SELinux 选项后,屏幕现在应如下所示:

Oracle-RAC安装部署手册

SELinux 禁用

如果此处您需要在任一节点上禁用 SELinux,这些节点将需要重新引导以实施更改。在继续配置 OCFS2 之前,必须禁用 SELinux!

# init 6

配置 OCFS2

下一步是在集群中的两个 Oracle RAC 节点上生成和配置 /etc/ocfs2/cluster.conf 文件。完成此操作最简单的方法是运行 GUI 工具 ocfs2console。在本节中,我们不但使用 ocfs2console 创建和配置 /etc/ocfs2/cluster.conf 文件,而且还创建和启动集群堆栈 O2CB。如果 /etc/ocfs2/cluster.conf 文件不存在(本示例中便是这种情况),ocfs2console 工具将创建该文件以及一个默认集群名为 ocfs2 的新集群堆栈服务 (O2CB)。您将需要以 root 用户帐户在集群中的两个 Oracle RAC 节点上执行该操作:

$ su -
# ocfs2console &

这将显示如下所示的 GUI:

Oracle-RAC安装部署手册

ocfs2console GUI

使用 ocfs2console GUI 工具执行以下步骤:

  1. 选择 [Cluster] -> [Configure Nodes...]。这将启动 OCFS2 集群堆栈并显示“Node Configuration”对话框。

  2. 在“Node Configuration”对话框上,单击 [Add] 按钮。

    • 这将显示“Add Node”对话框。

    • 在“Add Node”对话框中,输入集群中第一个节点的 Host name 和 IP address。将 IP Port 设置为默认值 7777。在我的示例中,我添加了两个节点,即使用 rac1 / 192.168.1.100 表示第一个节点,并使用 rac2 / 192.168.1.101 表示第二个节点。

    • 单击“Node Configuration”对话框上的 [Apply] — 所有节点现在将处于“Active”状态。

    • 单击“Node Configuration”对话框上的 [Close]。

  3. 确认所有值均正确后,使用 [File] -> [Quit] 退出应用程序。需要在集群的两个 Oracle RAC 节点上执行该操作。

Oracle-RAC安装部署手册

启动 OCFS2 集群堆栈

以下对话框显示了节点 rac1 和 rac2 的 OCFS2 设置:

Oracle-RAC安装部署手册

为 OCFS2 配置节点

退出 ocfs2console 后,将获得一个类似如下所示的 /etc/ocfs2/cluster.conf。需要在集群中的两个 Oracle RAC 节点上完成该过程,并且所有节点的 OCFS2 配置文件必须完全相同:

node:
ip_port = 7777
ip_address = 192.168.1.100
number = 0
name = rac1
cluster = ocfs2
node:
ip_port = 7777
ip_address = 192.168.1.101
number = 1
name = rac2
cluster = ocfs2
cluster:
node_count = 2
name = ocfs2

O2CB 集群服务

在使用 OCFS2 执行任何操作(如格式化或挂载文件系统)之前,我们需要先运行 OCFS2 的集群堆栈 O2CB(它将是以上执行的配置过程的结果)。此堆栈包含以下服务:

  • NM:用于跟踪 cluster.conf 中的所有节点的节点管理器

  • HB:当节点加入或离开集群时向上/向下发出通知的心跳服务

  • TCP:处理节点之间的通信

  • DLM:用于跟踪所有锁、这些锁的所有者和状态的分布式锁管理器

  • CONFIGFS:在 /config 中挂载的用户空间驱动的配置文件系统

  • DLMFS:用户空间与内核空间 DLM 的接口

已将以上所有集群服务打包到 o2cb 系统服务 (/etc/init.d/o2cb) 中。以下是 o2cb 系统服务的某些更有用的命令和选项的简要列表。

配置 O2CB 在引导时启动并调整 O2CB 心跳阈值

您现在需要配置 OC2B 驱动程序的引导属性,以便在每次引导时将启动集群堆栈服务。您还需要将 OCFS2 心跳阈值的默认设置从 7 修改为 61。本部分中的所有任务需要在集群的两个节点上执行。

按如下所示设置引导属性:

# /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) [7]: 61

Specify network idle timeout in ms (>=5000) [10000]: 10000

Specify network keepalive delay in ms (>=1000) [5000]: 5000

Specify network reconnect delay in ms (>=2000) [2000]: 2000

Writing O2CB configuration: OK

Loading module "configfs": OK

Mounting configfs filesystem at /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

格式化 OCFS2 文件系统

注:与本部分中其他任务不同,只能在 RAC 集群中的一个节点上创建 OCFS2 文件系统。我将只从 rac1 执行本节中的所有命令。

$ su -

# mkfs.ocfs2 -b 4K -C 32K -N 4 -L oracrsfiles /dev/sdb1

mkfs.ocfs2 1.2.4

Filesystem label=oracrsfiles

Block size=4096 (bits=12)

Cluster size=32768 (bits=15)

Volume size=2145943552 (65489 clusters) (523912 blocks)

3 cluster groups (tail covers 977 clusters, rest cover 32256 clusters)

Journal size=67108864

Initial number of node slots: 4

Creating bitmaps: done

Initializing superblock: done

Writing system files: done

Writing superblock: done

Writing backup superblock: 1 block(s)

Formatting Journals: done

Writing lost+found: done

mkfs.ocfs2 successful

挂载 OCFS2 文件系统

现在已经创建了此文件系统,接下来我们便可以载入它了。首先,使用命令行进行挂载,然后我将介绍如何将它包含在 /etc/fstab 中以在每次引导时挂载它。

注:需要使用 OCFS2 标签 oracrsfiles 以 root 用户帐户在 Oracle RAC 集群中的两个节点上执行文件系统挂载!

首先,此处介绍了如何从命令行手动挂载 OCFS2 文件。注意,需要以 root 用户帐户执行该操作:

$ su -
# mount -t ocfs2 -o datavolume,nointr -L "oracrsfiles" /opt/oradata/orcl

如果挂载成功,您将只是获得提示。但我们应运行以下检查来确保文件系统挂载正确。首先,使用 mount 命令确保成功挂载了新文件系统。应在 RAC 集群的两个节点上执行该操作:

# mount

/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)

none on /proc type proc (rw)

none on /sys type sysfs (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

usbfs on /proc/bus/usb type usbfs (rw)

/dev/hda1 on /boot type ext3 (rw)

none on /dev/shm type tmpfs (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

cartman:SHARE2 on /cartman type nfs (rw,addr=192.168.1.120)

configfs on /config type configfs (rw)

ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)

/dev/sdb1 on /opt/oradata/orcl type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)

注:请记下我挂载新文件系统所使用的 datavolume 选项。Oracle 数据库用户必须使用 datavolume 挂载选项安装任何将包含表决磁盘文件、集群注册表 (OCR)、数据文件、重做日志、归档日志以及控制文件的卷,以确保 Oracle 进程打开包含 O_DIRECT 标志的文件。nointr 选项确保 I/O 不会由于信号而中断。

将 OCFS2 配置为在启动时自动挂载

让我们了解一下到目前为止已经执行的操作。您下载并安装了 OCFS2,它将用于存储集群管理器 文件所需的文件。安装后,您将 OCFS2 模块加载到内核中,然后对集群文件系统进行了格式化。最后,您使用 OCFS2 标签“oracrsfiles”挂载了新建的文件系统。本节将逐步完成在每次使用 OCFS2 标签引导计算机时负责挂载新 OCFS2 文件系统的步骤。

首先将以下行添加到集群中两个 Oracle RAC 节点上的 /etc/fstab 文件中:

LABEL=oracrsfiles   /opt/oradata/orcl  ocfs2  _netdev,datavolume,nointr  0 0

注意用于挂载此文件系统的“_netdev”选项。OCFS2 卷必须使用 _netdev 挂载选项。该挂载选项指示将在网络启动后挂载该卷,在关闭网络前卸载该卷。

现在,让我们确保已经加载了 ocfs2.ko 内核模块,并确保将在引导过程中安装文件系统。

如果您遵循了本指南中的示例,则应已经启用了用于加载内核模块并安装 OCFS2 文件系统的操作。但您将仍以 root 用户帐户在集群的两个 Oracle RAC 节点上运行以下命令来检查这些选项:

$ su -

# chkconfig --list o2cb

o2cb 0:off 1:off 2:on 3:on 4:on 5:on 6:off

应把我以粗体标记的标志设置为“on”。

检查新 OCFS2 文件系统的权限

使用 ls 命令检查所有权。应把权限设置为 0775,且将所有者设置为“oracle”,将组设置为“oinstall”。

我们来先检查权限:

# ls -ld /opt/oradata/orcl

drwxr-xr-x  3 root root 4096 Jun 27 17:44 /opt/oradata/orcl

正如在以上列表中所看到的,oracle 用户帐户(以及 oinstall 组)将无法写入此目录。我们来解决此问题:

# chown oracle:oinstall /opt/oradata/orcl

# chmod 775 /opt/oradata/orcl

我们回过头来再次检查集群中两个 Oracle RAC 节点的权限是否正确:

# ls -ld /opt/oradata/orcl

drwxrwxr-x  3 oracle oinstall 4096 Jun 27 17:44 /opt/oradata/orcl

重新引导两个节点

开始介绍下一节之前,最好在此时重新引导 RAC 集群的两个节点。当计算机启动时,确保加载了集群堆栈服务并安装了新的 OCFS2 文件系统:

# mount

/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)

none on /proc type proc (rw)

none on /sys type sysfs (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

usbfs on /proc/bus/usb type usbfs (rw)

/dev/hda1 on /boot type ext3 (rw)

none on /dev/shm type tmpfs (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

cartman:SHARE2 on /cartman type nfs (rw,addr=192.168.1.120)

configfs on /config type configfs (rw)

ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)

/dev/sdb1 on /opt/oradata/orcl type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)

如果修改了 O2CB 心跳阈值,则应验证其是否设置正确:

# cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold
61

如何确定 OCFS2 版本

要确定正在运行的 OCFS2 版本,使用:

# cat /proc/fs/ocfs2/version

OCFS2 1.2.5 Wed May  2 16:16:08 PDT 2007 (build 0f745576f5282c9408787369d99ba880)

4.9 安装配置ASM软件

应在集群中的两个 Oracle RAC 节点上执行大多数安装和配置过程!但创建 ASM 磁盘将只需在集群中的单个节点上执行。

在本节中,我们将配置自动存储管理 (ASM),以将其用作所有 Oracle 物理数据库文件(数据、联机重做日志、控制文件、归档重做日志)以及闪回恢复区的文件系统/卷管理器。

Oracle 10g 第 1 版中引入了 ASM,用于使管理员不必再管理单个文件和驱动器。ASM 内置在 Oracle 内核中。通过它,DBA 可以全天候管理 Oracle 集群实例的单个实例以集群实例的数千个磁盘驱动器。将把所有要用于 Oracle 的文件和目录包含在磁盘组 中。ASM 跨所有可用磁盘驱动器并行执行负载平衡,以防止热点并最大限度地提高性能(甚至对于快速更改数据使用模式也是如此)。

有两个不同方法可在 Linux 上配置 ASM:

  • 使用 ASMLib I/O 的 ASM:此方法使用 ASMLib 调用在由 ASM 管理的原始块设备 上创建所有 Oracle 数据库文件。由于 ASMLib 使用块设备,因此该方法不需要原始设备。

  • 使用标准 Linux I/O 的 ASM:此方法使用标准 Linux I/O 系统调用在 ASM 管理的原始字符设备 上创建所有 Oracle 数据库文件。您将需要为 ASM 使用的所有磁盘分区创建原始设备。

在本文中,我将使用“使用 ASMLib I/O 的 ASM”方法。

安装 ASMLib 2.0 程序包

在本文的前几个版本中,现在您需要从适用于 Red Hat Enterprise Linux 4 AS 的 Oracle ASMLib 下载处下载 ASMLib 2.0 软件。 ASMLib 2.0 软件包含下面的软件包:

  • ASMLib 内核驱动程序

    • oracleasm-x.x.x-xx.EL-x.x.x-x.i686.rpm -(用于单处理器)

    • oracleasm-x.x.x-xx.ELsmp-x.x.x-x.i686.rpm -(用于多处理器)

    • oracleasm-x.x.x-xx.ELhugemem-x.x.x-x.i686.rpm -(用于 hugemem)

  • 用户空间库

    • oracleasmlib-x.x.x-x.i386.rpm

  • 驱动程序支持文件

    • oracleasm-support-x.x.x-x.i386.rpm

要确定您的系统中是否安装有 ASMLib,从 Oracle RAC 集群中的两个节点运行以下命令:

# rpm -qa | grep oracleasm | sort

oracleasm-2.6.9-55.0.0.0.2.EL-2.0.3-2

oracleasm-2.6.9-55.0.0.0.2.ELhugemem-2.0.3-2

oracleasm-2.6.9-55.0.0.0.2.ELsmp-2.0.3-2

oracleasm-support-2.0.3-2

注意,上述清单包含的 ASMLib 内核驱动程序对三种体系结构类型(单处理器、hugemem 和多处理器)都适用。默认情况下,Enterprise Linux 随 hugemem 一同安装,这意味着 oracleasm-2.6.9-55.0.0.0.2.ELhugemem-2.0.3-2 是必需的。但是,安装其他两个 ASMLib 内核驱动程序不会破坏配置。

如果您没有 ASMLib 程序包并需要安装它们,请装载 Enterprise Linux 的第 3 张磁盘,并以 root 用户帐户的身份运行以下命令。确保在集群的两个 Oracle RAC 节点上执行该操作。

$ su -

# mount -r /media/cdrom

# cd /media/cdrom/Enterprise/RPMS

# rpm -Uvh oracleasm*

warning: oracleasm-2.6.9-55.0.0.0.2.EL-2.0.3-2.i686.rpm: V3 DSA signature: NOKEY, key ID b38a8516

Preparing...                ########################################### [100%]

   1:oracleasm-support      ########################################### [ 25%]

   2:oracleasm-2.6.9-55.0.0.########################################### [ 50%]

   3:oracleasm-2.6.9-55.0.0.########################################### [ 75%]

   4:oracleasm-2.6.9-55.0.0.########################################### [100%]

# rpm -qa | grep oracleasm | sort

oracleasm-2.6.9-55.0.0.0.2.EL-2.0.3-2

oracleasm-2.6.9-55.0.0.0.2.ELhugemem-2.0.3-2

oracleasm-2.6.9-55.0.0.0.2.ELsmp-2.0.3-2

oracleasm-support-2.0.3-2

获得 Oracle ASMLib

ASMLib 2.0 软件包含在 Enterprise Linux 中,但用户空间库则不然(用户空间库也叫做 ASMLib 支持库)。用户空间库是必需的,您可以在此处下载:

# rpm -Uvh oracleasmlib-2.0.2-1.i386.rpm

Preparing...                ########################################### [100%]

   1:oracleasmlib           ########################################### [100%]

配置和加载 ASMLib 2.0 程序包

现在,您下载并安装了用于 Linux 的 ASMLib 程序包,接下来您需要配置并加载 ASM 内核模块。需要在两个 Oracle RAC 节点上以 root 运行此任务:

$ su -

# /etc/init.d/oracleasm configure

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 []: oracle

Default group to own the driver interface []: oinstall

Start Oracle ASM library driver on boot (y/n) [n]: y

Fix permissions of Oracle ASM disks on boot (y/n) [y]: y

Writing Oracle ASM library driver configuration: [  OK  ]

Creating /dev/oracleasm mount point: [  OK  ]

Loading module "oracleasm": [  OK  ]

Mounting ASMlib driver filesystem: [  OK  ]

Scanning system for ASM disks: [  OK  ]

为 Oracle 创建 ASM 磁盘

创建 ASM 磁盘只需要在 RAC 集群中的一个节点上以 root 用户帐户执行。我将在 rac1 上运行这些命令。在另一个 Oracle RAC 节点上,您将需要执行 scandisk 以识别新卷。该操作完成时,应在两个 Oracle RAC 节点上运行 oracleasm listdisks 命令以验证是否创建了所有 ASM 磁盘以及它们是否可用。

# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4

您可以看到,结果表明我定义了四个 ASM 卷。如果您在之前的运行中已经定义了四个卷,那么使用以下命令将其删除。删除之前创建的卷后,使用“oracleasm createdisk”命令(如下所示)创建新卷。

# /etc/init.d/oracleasm deletedisk VOL1

Removing ASM disk "VOL1" [  OK  ]

# /etc/init.d/oracleasm deletedisk VOL2

Removing ASM disk "VOL2" [  OK  ]

# /etc/init.d/oracleasm deletedisk VOL3

Removing ASM disk "VOL3" [  OK  ]

# /etc/init.d/oracleasm deletedisk VOL4

Removing ASM disk "VOL4" [  OK  ]

$ su -

# /etc/init.d/oracleasm createdisk VOL1 /dev/sdc1

Marking disk "/dev/sdc1" as an ASM disk [  OK  ]

# /etc/init.d/oracleasm createdisk VOL2 /dev/sdb1

Marking disk "/dev/sdb1" as an ASM disk [  OK  ]

# /etc/init.d/oracleasm createdisk VOL3 /dev/sde1

Marking disk "/dev/sde1" as an ASM disk [  OK  ]

# /etc/init.d/oracleasm createdisk VOL4 /dev/sda1

Marking disk "/dev/sda1" as an ASM disk [  OK  ]

在 RAC 集群中的所有其他节点上,您必须执行磁盘扫描程序 以识别新卷:

# /etc/init.d/oracleasm scandisks

Scanning system for ASM disks [  OK  ]

现在,我们可以使用以下命令在 RAC 集群中的两个节点上以 root 用户帐户的身份测试是否成功创建了 ASM 磁盘:

# /etc/init.d/oracleasm listdisks

VOL1

VOL2

VOL3

VOL4

4.10 安装配置Oracle 10g Clusterware software

只需要在集群中的一个节点上执行以下下载过程!

下一个逻辑步骤是安装 Oracle 集群件第 2 版 (10.2.0.1.0)、Oracle 数据库 10g 第 2 版 (10.2.0.1.0) 以及最终用于 Linux x86 软件的 Oracle 数据库 10g 随附 CD 第 2 版 (10.2.0.1.0)。但我们必须先从 Oracle 技术网 (OTN) 下载并提取所需的 Oracle 软件程序包。

您将从 Oracle 下载所需的软件并将其提取到集群的一个节点(即 rac1)上。您将从此计算机执行所有安装。登录到您将从其中以“oracle”用户帐户执行所有 Oracle 安装的节点 (rac1)。在该示例中,您将把所需的 Oracle 软件下载到 rac1 并将其保存到 ~oracle/orainstall。

下载并提取软件

首先,Oracle 集群件第 2 版 (10.2.0.1.0)、Oracle 数据库 10g 第 2 版 (10.2.0.1.0) 以及用于 Linux x86 的 Oracle 数据库 10g 随附 CD 第 2 版 (10.2.0.1.0) 软件。所有下载均在同一页面中提供。

以 oracle 用户帐户将下载的三个程序包提取到临时目录。在该示例中,我将使用 ~oracle/orainstall。

按如下所示提取 Oracle 集群件程序包:

# su - oracle
$ cd ~oracle/orainstall
$ unzip 10201_clusterware_linux32.zip

然后提取 Oracle 数据库软件:

$ cd ~oracle/orainstall
$ unzip 10201_database_linux32.zip

    最后,提取 Oracle 随附 CD 软件:

$ cd ~oracle/orainstall
$ unzip 10201_companion_linux32.zip

Oracle 数据库 10g 第 2 版安装前的准备工作

在集群中的两个 Oracle RAC 节点上执行以下检查!

安装 Enterprise Linux 时,您应该验证适用于 Oracle 的 RPM 都已安装。如果您遵循我所提供的 Linux 安装指导,则已经安装了所有内容,这时您将拥有所有必需的 RPM 程序包。但如果您执行了其他安装类型(即,高级服务器),则可能缺少某些程序包并需要安装它们。所有必需的 RPM 都位于 Enterprise Linux CD/ISO 上。

下一个安装前步骤是运行集群验证实用程序 (CVU)。CVU 是 Oracle 集群件安装介质上提供的一个命令行实用程序。它负责执行各种系统检查,以协助您确认 Oracle RAC 节点针对 Oracle 集群件和 Oracle 真正应用集群安装进行了正确的配置。CVU 只需从您将从其中执行 Oracle 安装的节点(本文中为 rac1)运行即可。

检查必需的 RPM

以下是必须安装的程序包(请记住您的 Linux 版本号可能略有不同):

binutils-2.15.92.0.2-21

compat-db-4.1.25-9

compat-gcc-32-3.2.3-47.3

compat-gcc-32-c++-3.2.3-47.3

compat-libstdc++-33-3.2.3-47.3

compat-libgcc-296-2.96-132.7.2

control-center-2.8.0-12.rhel4.5

cpp-3.4.6-3

gcc-3.4.6-3

gcc-c++-3.4.6-3

glibc-2.3.4-2.25

glibc-common-2.3.4-2.25

glibc-devel-2.3.4-2.25

glibc-headers-2.3.4-2.25

glibc-kernheaders-2.4-9.1.98.EL

gnome-libs-1.4.1.2.90-44.1

libaio-0.3.105-2

libstdc++-3.4.6-3

libstdc++-devel-3.4.6-3

make-3.80-6.EL4

openmotif-2.2.3-10.RHEL4.5

openmotif21-2.1.30-11.RHEL4.6

pdksh-5.2.14-30.3

setarch-1.6-1

sysstat-5.0.5-11.rhel4

xscreensaver-4.18-5.rhel4.11

注意,openmotif RPM 程序包只在安装 Oracle 演示时需要。本文不包括 Oracle 演示的安装。

要查询程序包信息(例如,gcc 和 glibc-devel),使用“rpm -q <程序包名> [, <程序包名>]”命令,如下所示:

# rpm -q gcc glibc-devel

gcc-3.4.6-8.0.1

glibc-devel-2.3.4-2.36

如果需要安装以上任意程序包,使用“rpm -Uvh <程序包名.rpm>”。例如,要安装 GCC gcc-3.4.6-8.0.1 程序包,使用:

# rpm -Uvh gcc-3.4.6-8.0.1.i386.rpm

    使用集群验证实用程序的先决条件

JDK 1.4.2

必须先在系统上安装 JDK 1.4.2,然后才可以运行 CVU。如果系统上没有安装 JDK 1.4.2,则在尝试运行 CVU 时,您将收到一个类似下面的错误消息:

ERROR. Either CV_JDKHOME environment variable should be set

or /stagepath/cluvfy/jrepack.zip should exist.

如果没有安装 JDK 1.4.2,请从 Sun 网站下载该软件并使用 Sun 的说明进行安装。以下网站提供有 JDK 1.4.2 下载:http://www.sun.com/java

如果安装了 JDK 1.4.2,那么您必须定义到 JDK 的路径的用户环境变量 CV_JDKHOME。例如,如果 JDK 1.4.2 安装在 /usr/local/j2sdk1.4.2_15 中,那么以您计划用于运行 CVU 的用户身份登录并输入以下命令:

CV_JDKHOME=/usr/local/j2sdk1.4.2_15

export CV_JDKHOME

注意,这可以在 oracle 用户帐户的 .bash_profile 登录教本中定义。

安装 cvuqdisk RPM(仅适用于 Enterprise Linux 和 RHEL 用户)

运行 CVU 的第二个先决条件是针对 Enterprise Linux 和 Red Hat Linux 用户的。如果运行的是 Enterprise Linux(或 Red Hat Linux),则必须下载操作系统程序包 cvuqdisk 并将其安装到集群中的两个 Oracle RAC 节点上。这意味着您将需要在 rac1 和 rac2 上安装 cvuqdisk RPM。如果没有 cvuqdisk,CVU 将无法发现共享磁盘,您在运行 CVU 时会收到错误消息“Package cvuqdisk not installed(程序包 cvuqdisk 未安装)”。

cvuqdisk RPM 可在 rpm 目录中的 Oracle 集群件安装介质中找到。考虑到本文的目的,将 Oracle 集群件介质解压缩到 rac1 上的 ~oracle/orainstall/clusterware 目录。注意,在安装 cvuqdisk RPM 之前,我们需要设置名为 CVUQDISK_GRP 的环境变量,使其指向将要拥有 cvuqdisk 实用程序的组。默认的组是 oinstall,这正是本文中我们用于 oracle UNIX 用户帐户的主要组。如果使用另一个主要组(即 dba),则需在尝试安装 cvuqdisk RPM 之前设置 CVUQDISK_GRP=<您的组>。

在 rac1 中找到 cvuqdisk RPM 并将其复制到 rac2,然后在两个 Oracle RAC 节点上以 root 用户帐户身份执行以下步骤进行安装:

# CVUQDISK_GRP=<YOUR_GROUP>; export CVUQDISK_GRP

# cd ~oracle/orainstall/clusterware/rpm

# rpm -iv cvuqdisk-1.0.1-1.rpm

Preparing packages for installation...

cvuqdisk-1.0.1-1

# ls -l /usr/sbin/cvuqdisk

-rwsr-x---  1 root oinstall 4168 Jun  2  2005 /usr/sbin/cvuqdisk

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

应该从 rac1(我们将在该节点运行所有的 Oracle 安装)运行 CVU。运行 CVU 之前,以 oracle 用户帐户登录并验证已针对集群中的所有节点配置了远程访问/用户等效性。使用安全 shell 方法时,需要首先在终端 shell 会话上启用用户等效性然后再尝试运行 CVU。要为当前的终端 shell 会话启用用户等效性,请执行以下步骤(记住为每个键输入在提示时生成的通行短语):

# su - oracle

$ 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)

Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)

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

利用 CVU 检查 CRS 的安装前任务

满足了所有使用 CVU 的先决条件后,我们首先以“oracle”用户帐户(启用了用户等效性)从 rac1 运行以下命令,以检查 Oracle 集群件 (CRS) 的所有安装前任务是否完成:

$ cd ~oracle/orainstall/clusterware/cluvfy

$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 –verbose

查看 CVU 报表。注意,报告中几个可以忽略的错误。

第一个错误与为 VIP 查找一组适合的接口有关,可以忽略,没什么问题。这是 Metalink 说明338924.1 中的一个错误文件:

Suitable interfaces for the private interconnect on subnet "192.168.2.0":

rac2 eth1:192.168.2.101

rac1 eth1:192.168.2.100

ERROR:

Could not find a suitable set of interfaces for VIPs.

Result: Node connectivity check failed.

如说明中所述,可以忽略该错误,没什么问题。

最后一组可忽略的错误与处理 Enterprise Linux 4 Update 5 中不存在的特定 RPM 程序包版本有关。例如:

  • compat-gcc-7.3-2.96.128

  • compat-gcc-c++-7.3-2.96.128

  • compat-libstdc++-7.3-2.960.128

  • compat-libstdc++-devel-7.3-2.96.128

这些特定的程序包在 CVU 报告中列为缺少,请确保在集群中的两个 Oracle RAC 节点上安装了正确版本的 compat-* 程序包。例如,在 Enterprise Linux 4 Update 5 中,这些程序包应为:

  • compat-gcc-32-3.2.3-47.3

  • compat-gcc-32-c++-3.2.3-47.3

  • compat-libstdc++-33-3.2.3-47.3

利用 CVU 检查硬件和操作系统设置

接下来要运行的 CVU 检查将验证硬件和操作系统设置。同样,从 rac1 以“oracle”UNIX 用户帐户运行以下命令:

$ cd ~oracle/orainstall/clusterware/cluvfy

$ ./runcluvfy.sh stage -post hwos -n rac1,rac2 –verbose

查看 CVU 报表。与之前的检查(CRS 的安装前任务)一样,为 VIP 查找一组合适的接口将失败,可将其忽略,没什么问题。

另请注意,检查共享存储可访问性将失败。

Checking shared storage accessibility...

WARNING:

Unable to determine the sharedness of /dev/sde on nodes:

        rac2,rac2,rac2,rac2,rac2,rac1,rac1,rac1,rac1,rac1

Shared storage check failed on nodes "rac2,rac1".

该警告也可忽略,没什么问题。

# /usr/sbin/smartctl -i /dev/sde

smartctl version 5.33 [i686-redhat-linux-gnu] Copyright (C) 2002-4 Bruce Allen

Home page is http://smartmontools.sourceforge.net/

Device: Openfile Virtual disk     Version: 0

Serial number:

Device type: disk

Local Time is: Mon Sep  3 02:02:53 2007 EDT

Device supports SMART and is Disabled

Temperature Warning Disabled or Not Supported

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

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

在 Oracle 集群件的安装过程中,系统将提示您提供相关的并要在 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:/opt/oradata/orcl/OCRFile

    • 文件 2:/opt/oradata/orcl/OCRFile_mirror

    • 大小:(2 * 100MB) = 200M

  • CRS 表决磁盘

    • 文件 1:/opt/oradata/orcl/CSSFile

    • 文件 2:/opt/oradata/orcl/CSSFile_mirror1

    • 文件 3:/opt/oradata/orcl/CSSFile_mirror2

    • 大小:(3 * 20MB) = 60MB

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

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

验证终端 Shell 环境

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

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

# hostname
rac1
# 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 命令(ssh 或 scp)或远程 Shell 命令(rsh 和 rcp)。

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

$ 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)

Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)

$ ssh rac1 "date;hostname"

Thu Jun 28 03:06:34 EDT 2007

rac1

$ ssh rac2 "date;hostname"

Thu Jun 28 03:07:08 EDT 2007

rac2

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

$ rsh rac1 "date;hostname"

Thu Jun 28 03:04:25 EDT 2007

rac1

$ rsh rac2 "date;hostname"

Thu Jun 28 03:04:59 EDT 2007

rac2

安装集群就绪服务

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

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

屏幕名称

答复

Welcome 屏幕

单击 Next

Specify Inventory directory and credentials

接受默认值:
   Inventory directory: /opt/app/oracle/oraInventory
   操作系统组名称: oinstall

Specify Home Details

为 ORACLE_HOME(实际上是 $ORA_CRS_HOME,我将在本文中使用它)设置 Name 和 Path,如下所示:
   Name: OraCrs10g_home
   路径: /opt/app/crs

Product-Specific Prerequisite Checks

安装程序将执行一系列的检查以确定节点是否满足安装和配置 Oracle 集群件软件的最低要求。如果任何检查失败,您将需要通过单击该复选框手动验证失败的检查。我所执行的安装通过了所有检查,未出现任何问题。

单击 Next 继续。

Specify Cluster Configuration

Cluster Name: crs

Public Node NamePrivate Node Name虚拟节点名称rac1rac1-privrac1-viprac2rac2-privrac2-vip

Specify Network Interface Usage

Interface NameSubnetInterface Typeeth0192.168.1.0Publiceth1192.168.2.0Private

Specify OCR Location

从带有 RAC 的 Oracle 数据库 10g 第 2 版 (10.2) 开始,Oracle 集群件支持创建镜像的 OCR 文件,从而增强了集群可靠性。就本示例而言,我选择了通过保留默认选项“Normal Redundancy”镜像 OCR 文件:

Specify OCR Location: /opt/oradata/orcl/OCRFile
指定 OCR 镜像位置: /opt/oradata/orcl/OCRFile_mirror

Specify Voting Disk Location

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

Voting Disk Location: /opt/oradata/orcl/CSSFile
其它表决磁盘 1 位置: /opt/oradata/orcl/CSSFile_mirror1
其它表决磁盘 2 位置: /opt/oradata/orcl/CSSFile_mirror2

总结

单击 Install 开始安装!

执行配置脚本

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

导航到 /opt/app/oracle/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 设置可能关闭 — 应为 0022。在 RAC 集群的两个节点上运行以下命令以更正此问题:

# chmod 644 /etc/oraInst.loc

# ls -l /etc/oraInst.loc

-rw-r--r--  1 root root 63 Sep  3 11:06 /etc/oraInst.loc


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

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

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

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

...
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
    rac1
    rac2
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:
       节点名称: rac1
       IP 别名: rac1-vip
       IP 地址: 192.168.1.200
       子网掩码: 255.255.255.0

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

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

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

安装结束

安装结束时,退出 OUI。

验证 Oracle 集群件安装

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

检查集群节点

$ /opt/app/crs/bin/olsnodes -n
rac1 1
rac2 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

4.11 安装配置Oracle 10g Database software

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

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

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

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

验证终端 Shell 环境

如前面的章节(安装 Oracle 10g 集群件软件)中所讨论的,需要首先为集群中所有节点的远程访问和用户等效性配置终端 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 命令(ssh 或 scp)或远程 Shell 命令(rsh 和 rcp)。

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

$ 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)

Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)

$ ssh rac1 "date;hostname"

Thu Jun 28 03:06:34 EDT 2007

rac1

$ ssh rac2 "date;hostname"

Thu Jun 28 03:07:08 EDT 2007

rac2

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

$ rsh rac1 "date;hostname"

Thu Jun 28 03:04:25 EDT 2007

rac1

$ rsh rac2 "date;hostname"

Thu Jun 28 03:04:59 EDT 2007

rac2

运行 Oracle 集群验证实用程序

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

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

$ cd ~oracle/orainstall/clusterware/cluvfy

$ ./runcluvfy.sh stage -pre dbinst -n rac1,rac2 -r 10gR2 -verbose

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

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

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

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

屏幕名称

答复

Welcome 屏幕

单击 Next

选择安装类型

我选择了 Enterprise Edition 选项。

Specify Home Details

为 ORACLE_HOME 设置 Name 和 Path,如下所示:
   Name: OraDb10g_home1
   路径: /opt/app/oracle/product/10.2.0/db_1

Specify Hardware Cluster Installation Mode

选择 Cluster Installation 选项,然后选择所有可用节点。单击 Select All 选择所有服务器:rac1 和 rac2。

如果安装此时停止,且有 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 继续。

选择数据库配置

选择选项“Install database software only”。

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

总结

单击 Install 开始安装!

Root Script Window - Run root.sh

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

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

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

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

安装结束

安装结束时,退出 OUI。

4.12 安装配置Oracle 10g Companion software

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

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

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

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

验证终端 Shell 环境

如前面的章节(安装 Oracle 数据库 10g 软件)中所讨论的,需要首先为集群中所有节点的远程访问和用户等效性配置终端 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 命令(ssh 或 scp)或远程 Shell 命令(rsh 和 rcp)。

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

$ 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)

Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)

$ ssh rac1 "date;hostname"

Thu Jun 28 03:06:34 EDT 2007

rac1

$ ssh rac2 "date;hostname"

Thu Jun 28 03:07:08 EDT 2007

rac2

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

$ rsh rac1 "date;hostname"

Thu Jun 28 03:04:25 EDT 2007

rac1

$ rsh rac2 "date;hostname"

Thu Jun 28 03:04:59 EDT 2007

rac2

安装 Oracle 数据库 10g 随附 CD 软件

使用以下命令安装 Oracle 数据库 10g 随附 CD 软件:

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

屏幕名称

答复

Welcome 屏幕

单击 Next

选择要安装的产品

选择“Oracle Database 10g Products 10.2.0.1.0”选项。

Specify Home Details

将 ORACLE_HOME Name 和 Path 的目标设置为前面安装的 Oracle10g 数据库软件的目标,如下所示:
   Name: OraDb10g_home1
   路径: /opt/app/oracle/product/10.2.0/db_1

Specify Hardware Cluster Installation Mode

默认情况下,将选择 Cluster Installation 选项以及集群中的所有可用节点。保留这些默认选项,然后单击 Next 继续。

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

  • 确保 Oracle 集群件正在所讨论的节点上运行。

  • 确保您能够从执行安装的节点访问所讨论的节点。

Product-Specific Prerequisite Checks

安装程序将执行一系列的检查以确定节点是否满足安装和配置随附 CD 软件的最低要求。如果任何检查失败,您将需要通过单击该复选框手动验证失败的检查。我所执行的安装通过了所有检查,未出现任何问题。

单击 Next 继续。

总结

在 Summary 屏幕上,单击 Install 开始安装!

安装结束

安装结束时,退出 OUI。

4.13 创建数据库

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

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

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

验证终端 Shell 环境

如前面的章节(安装 Oracle 数据库 10g 随附 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 命令(ssh 或 scp)或远程 Shell 命令(rsh 和 rcp)。

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

$ 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)

Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)

$ ssh rac1 "date;hostname"

Thu Jun 28 03:06:34 EDT 2007

rac1

$ ssh rac2 "date;hostname"

Thu Jun 28 03:07:08 EDT 2007

rac2

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

$ rsh rac1 "date;hostname"

Thu Jun 28 03:04:25 EDT 2007

rac1

$ rsh rac2 "date;hostname"

Thu Jun 28 03:04:59 EDT 2007

rac2

运行 Network Configuration Assistant

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

$ netca &

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

屏幕名称

答复

选择 Oracle 类型
网络服务配置

选择 Cluster Configuration

Select the nodes to configure

选择所有节点:rac1 和 rac2。

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: 否
   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

rac1

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

LISTENER_RAC1

$ hostname

rac2

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

LISTENER_RAC2

创建 Oracle 集群数据库

仅在集群 (racl) 的一个 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 命令(ssh 或 scp)或远程 Shell 命令(rsh 和 rcp)。

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

$ 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)

Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa)

$ ssh rac1 "date;hostname"

Thu Jun 28 03:06:34 EDT 2007

rac1

$ ssh rac2 "date;hostname"

Thu Jun 28 03:07:08 EDT 2007

rac2

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

$ rsh rac1 "date;hostname"

Thu Jun 28 03:04:25 EDT 2007

rac1

$ rsh rac2 "date;hostname"

Thu Jun 28 03:04:59 EDT 2007

rac2

运行 Oracle 集群验证实用程序

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

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

$ cd ~oracle/orainstall/clusterware/cluvfy

$ ./runcluvfy.sh stage -pre dbcfg -n rac1,rac2 -d ${ORACLE_HOME} –verbose

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

创建集群化数据库

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

$ dbca &

屏幕名称

答复

Welcome 屏幕

选择“Oracle Real Application Clusters database”。

Operations

选择 Create a Database。

Node Selection

单击 Select All 按钮选择所有服务器:rac1 和 rac2。

Database Templates

选择 Custom Database。

Database Identification

选择:
   全局数据库名称: orcl.idevelopment.info
   SID 前缀: orcl

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

Management Option

保留此处的默认选项,即“Configure the Database with Enterprise Manager / Use Database Control for Database Management”。

Database Credentials

我选择 Use the Same 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 分区上,如下所示:/u01/oradata/orcl/dbs/spfile+ASM.ora。所有其他选项可以保留其默认值。

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

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

ASM Disk Groups

首先,单击 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] 继续。

Database File Locations

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

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 (108544 MB) 的“Flash Recovery Area Size”。

Database Content

我将所有数据库组件(和目标表空间)设置为它们的默认值,但选择 Example Schemas 也完全可以。由于我们安装了 Oracle 随附 CD 软件,因此该选项可用。

数据库服务

对于此测试配置,单击 Add,然后输入 orcl_taf 作为“Service Name”。将这两个实例设置为 Preferred,并为“TAF Policy”选择“Basic”。

Initialization Parameters

根据您的环境更改任意参数。我保留了所有这些参数的默认设置。

Database Storage

根据您的环境更改任意参数。我保留了所有这些参数的默认设置。

Creation Options

保留默认选项 Create Database。我还始终选择“Generate Database Creation Scripts”。单击 Finish 启动数据库创建过程。出现数据库创建报表和脚本生成对话框后,数据库创建将启动。

在“Summary”屏幕上单击 OK。

数据库创建结束

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

注:退出 DBCA 后,在大约 30-60 秒内,您不会收到来自对话框窗口的任何反馈。一段时间之后,将弹出另一对话框,指示它正在启动所有 Oracle 实例以及 HA 服务“orcl_taf”。这可能需要几分钟的时间才能完成。完成时,所有窗口和对话框将关闭。

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

创建 orcl_taf 服务

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

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

SQL> show parameter service

NAME                 TYPE        VALUE

-------------------- ----------- --------------------------------

service_names        string      orcl.idevelopment.info, orcl_taf

如果定义的唯一服务是用于 orcl.idevelopment.info 的,则您将需要手动将此服务添加到两个实例中:

SQL> show parameter service

NAME                 TYPE        VALUE

-------------------- ----------- --------------------------

service_names        string      orcl.idevelopment.info

SQL> alter system set service_names =

  2  'orcl.idevelopment.info, orcl_taf.idevelopment.info' scope=both;

5. RAC安装后的任务

5.1 在RAC环境中启用归档日志

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

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

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

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

  1. 登录到一个节点(即 rac1),通过在当前实例中将 cluster_database 设置为 FALSE 来禁用集群实例参数:

$ sqlplus "/ as sysdba"

SQL> alter system set cluster_database=false scope=spfile sid='orcl1';

  1. 关闭所有 访问集群化数据库的实例:

$ srvctl stop database -d orcl

  1. 使用本地实例,挂载 数据库:

$ sqlplus "/ as sysdba"

SQL> startup mount

  1. 启用存档:

SQL> alter database archivelog;

  1. 通过在当前实例中将实例参数 cluster_database 修改为 TRUE,重新启用对集群的支持:

SQL> alter system set cluster_database=true scope=spfile sid='orcl1';

  1. 关闭本地实例:

SQL> shutdown immediate

  1. 使用 srvctl 备份所有 实例:

$ srvctl start database -d orcl

  1. (可选)使用 srvctl 备份所有服务(即 TAF):

$ srvctl start service -d orcl

  1. 登录到本地实例,验证存档日志模式已启用:

$ 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     83

Next log sequence to archive   84

Current log sequence           84

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

5.2 创建/更改表空间

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

注:请记住,这些示例中列出的数据库文件名称(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.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 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.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 1024m

  2  autoextend on next 50m maxsize 2048m;

SQL> alter tablespace undotbs2 add datafile '+ORCL_DATA1' size 1024m

  2  autoextend on next 50m maxsize 2048m;

SQL> alter database tempfile '+ORCL_DATA1/orcl/tempfile/temp.258.570913303' resize 1024m;

5.3 验证 RAC 集群和数据库配置

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

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

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

  • 添加和删除节点级应用程序

  • 设置和取消设置节点级应用程序的环境

  • 管理节点应用程序

  • 管理 ASM 实例

  • 启动和停止一组包含虚拟 IP 地址、监听器、Oracle 通知服务和 Oracle 企业管理器代理的程序(出于维护目的)。

所有实例和服务的状态

$ srvctl status database -d orcl

Instance orcl1 is running on node rac1

Instance orcl2 is running on node rac2

单个实例的状态

$ srvctl status instance -d orcl -i orcl2

Instance orcl2 is running on node rac2

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

$ srvctl status service -d orcl -s orcl_taf

Service orcl_taf is running on instance(s) orcl2, orcl1

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

$ srvctl status nodeapps -n rac1

VIP is running on node: rac1

GSD is running on node: rac1

Listener is running on node: rac1

ONS daemon is running on node: rac1

ASM 实例的状态

$ srvctl status asm -n rac1

ASM instance +ASM1 is running on node rac1.

列出配置的所有数据库

$ srvctl config database

orcl

显示 RAC 数据库的配置

$ srvctl config database -d orcl

rac1 orcl1 /opt/app/oracle/product/10.2.0/db_1

rac2 orcl2 /opt/app/oracle/product/10.2.0/db_1

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

$ srvctl config service -d orcl

orcl_taf PREF: orcl2 orcl1 AVAIL:

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

$ srvctl config nodeapps -n rac1 -a -g -s -l

VIP exists.: /rac1-vip/192.168.1.200/255.255.255.0/eth0:eth1

GSD exists.

ONS daemon exists.

Listener exists.

显示 ASM 实例的配置

$ srvctl config asm -n rac1

+ASM1 /opt/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    rac1

       2        2 orcl2      YES OPEN    ACTIVE       NORMAL    rac2

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

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

5.4 启动/停止集群

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

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

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

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

# su - oracle
$ hostname
rac1

停止 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 rac1

$ srvctl stop nodeapps -n rac1

启动 Oracle RAC 10g 环境

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

$ export ORACLE_SID=orcl1

$ srvctl start nodeapps -n rac1

$ srvctl start asm -n rac1

$ srvctl start instance -d orcl -i orcl1

$ emctl start dbconsole

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

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

$ srvctl start database -d orcl

$ srvctl stop database -d orcl

5.5 透明的应用程序故障切换 (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 = rac1-vip)(PORT = 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-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         rac1

                        SELECT        BASIC           NO

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

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

# su - oracle

$ srvctl status database -d orcl

Instance orcl1 is running on node rac1

Instance orcl2 is running on node rac2

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

$ srvctl status database -d orcl

Instance orcl1 is not running on node rac1

Instance orcl2 is running on node rac2

现在我们返回到我们的 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         rac2

                        SELECT        BASIC           YES

SQL> exit

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

6.RAC的TPC-C测试

6.1 测试样例配置

在Linux Rat Hat 4 U6+Oracle 10g RAC环境下,系统的可靠性和基于TPC-C模型的性能测试,得出tpmC值,评估该阵列在项目上的应用前景。

〖测试方法〗

1.   配置并搭建好测试环境

2.   配置测试软件

3.   对RAC系统进行不同程度的加压:

其中:压力环境分为以下三种:

         数据库规模为1.07gb,并发用户数量为1到1000(100递增)情况下;

         数据库规模为2.36gb,并发用户数量为1到1000(100递增)情况下;

         数据库规模为2.36gb,并发用户数量为1到2000(200递增)情况下;

6.2 测试数据

测试数据 1:数据库规模为1.07gb,并发用户数量为1到1000(100递增)情况下

〖测试数据记录〗

Userload

1

100

200

300

400

500

600

700

800

900

1000

Test Phase

1

1

1

1

1

1

1

1

1

1

1

TPS

0.06

5.22

10.46

15.67

20.83

26.41

31.71

36.66

42.1

47.45

52.88

BPS

26.18

2246.5

4467.3

6759.26

8973.28

11281.1

13578.8

15732.3

18046.3

20454

22612

Rows

10

1288

2776

4008

5139

6416

7908

9129

11729

12233

13492

Bytes

4086

408664

814977

1224726

1589724

1917379

2386843

2794529

3590807

3805098

4120079

Deadlocks

0

0

0

0

0

0

0

0

0

0

0

Rollbacks

0

0

0

0

0

0

0

0

0

0

0

Errors

0

0

0

0

0

0

0

0

0

0

0

Avg Time

0.725

0.037

0.025

0.03

0.038

0.032

0.042

0.026

0.025

0.019

0.033

Min Time

0.101

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

Max Time

1.69

0.928

0.63

1.042

1.981

2.015

1.669

2.113

1.163

1.517

1.91

90th Time

1.62

0.108

0.073

0.092

0.121

0.099

0.15

0.096

0.069

0.059

0.128

Avg Response Time

0.723

0.037

0.025

0.029

0.037

0.031

0.04

0.025

0.024

0.018

0.032

Min Response Time

0.086

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

Max Response Time

1.69

0.928

0.63

1.039

1.981

2.015

1.668

2.113

1.163

1.517

1.91

90th Response Time

1.62

0.106

0.071

0.09

0.12

0.097

0.139

0.093

0.067

0.058

0.126

Avg Think Time

6.08

9.557

9.253

9.303

9.314

9.184

9.119

9.352

9.261

9.218

9.185

Min Think Time

0.404

0

0

0

0

0

0

0

0

0

0

Max Think Time

17.33

24.022

23.989

23.991

24.02

24.02

24.005

24.036

24.043

24.044

24.043

90th Think Time

16.63

18.52

18.184

18.406

18.426

18.283

18.253

18.65

18.294

18.393

18.556

Avg Keying Time

8.8

9.607

9.893

9.847

9.879

9.751

9.801

9.743

9.744

9.762

9.724

Min Keying Time

2

2

2

2

2

2

2

2

2

2

2

Max Keying Time

18

18

18

18

18

18

18

18

18

18

18

90th Keying Time

17.82

17.751

17.757

17.762

17.76

17.754

17.755

17.756

17.749

17.754

17.753

Avg Interarrival Time

0

0

0

0

0

0

0

0

0

0

0

Min Interarrival Time

0

0

0

0

0

0

0

0

0

0

0

Max Interarrival Time

0

0

0

0

0

0

0

0

0

0

0

90th Interarrival Time

0

0

0

0

0

0

0

0

0

0

0

User Defined 1

0

0

0

0

0

0

0

0

0

0

0

User Defined 2

0

0

0

0

0

0

0

0

0

0

0

User Defined 3

0

0

0

0

0

0

0

0

0

0

0

User Defined 4

0

0

0

0

0

0

0

0

0

0

0

User Defined 5

0

0

0

0

0

0

0

0

0

0

0

测试数据 2:数据库规模为2.36gb,并发用户数量为1到1000(100递增)情况下

〖测试数据记录〗

Userload

1

100

200

300

400

500

600

700

800

900

1000

Test Phase

1

1

1

1

1

1

1

1

1

1

1

TPS

0.07

5.19

10.47

15.62

20.88

26.3

31.72

36.63

41.93

47.32

52.34

BPS

27.13

2238.8

4481.8

6737.54

8995.71

11291.8

13586.4

15764.3

18011.4

20387.9

22476.5

Rows

11

1300

2822

3993

5245

6711

8055

9153

10583

11869

11393

Bytes

4377

415400

839377

1230526

1619122

2041867

2453635

2835570

3227590

3660699

3525000

Deadlocks

0

0

0

0

0

0

0

0

0

0

0

Rollbacks

0

0

0

0

0

0

0

0

0

0

0

Errors

0

0

0

0

0

0

0

0

0

0

0

Avg Time

0.102

0.024

0.019

0.022

0.016

0.015

0.02

0.019

0.024

0.017

0.042

Min Time

0.032

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

Max Time

0.271

0.384

0.335

0.211

0.379

0.337

1.015

1.016

1.254

1.015

10.07

90th Time

0.189

0.065

0.056

0.064

0.046

0.043

0.059

0.056

0.09

0.053

0.196

Avg Response Time

0.101

0.023

0.018

0.021

0.015

0.014

0.019

0.018

0.021

0.017

0.04

Min Response Time

0.032

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

Max Response Time

0.269

0.384

0.335

0.211

0.199

0.337

1.015

1.016

1.211

1.014

10.07

90th Response Time

0.189

0.063

0.054

0.062

0.045

0.042

0.057

0.055

0.08

0.051

0.186

Avg Think Time

6.291

9.585

9.17

9.386

9.259

9.154

9.107

9.326

9.286

9.234

9.263

Min Think Time

0.404

0

0

0

0

0

0

0

0

0

0

Max Think Time

17.325

24.022

23.989

23.991

24.02

24.015

24.015

24.036

24.043

24.044

24.043

90th Think Time

9.355

18.631

18.089

18.496

18.374

18.406

18.106

18.635

18.455

18.516

18.641

Avg Keying Time

8.272

9.702

9.929

9.818

9.903

9.845

9.815

9.793

9.787

9.789

9.846

Min Keying Time

2

2

2

2

2

2

2

2

2

2

2

Max Keying Time

18

18

18

18

18

18

18

18

18

18

18

90th Keying Time

17.64

17.748

17.763

17.762

17.76

17.76

17.756

17.758

17.759

17.759

17.755

Avg Interarrival Time

0

0

0

0

0

0

0

0

0

0

0

Min Interarrival Time

0

0

0

0

0

0

0

0

0

0

0

Max Interarrival Time

0

0

0

0

0

0

0

0

0

0

0

90th Interarrival Time

0

0

0

0

0

0

0

0

0

0

0

User Defined 1

0

0

0

0

0

0

0

0

0

0

0

User Defined 2

0

0

0

0

0

0

0

0

0

0

0

User Defined 3

0

0

0

0

0

0

0

0

0

0

0

User Defined 4

0

0

0

0

0

0

0

0

0

0

0

User Defined 5

0

0

0

0

0

0

0

0

0

0

0

测试数据 3:数据库规模为2.36gb,并发用户数量为1到2000(200递增)情况下

〖测试数据记录〗

Userload

1

200

400

600

800

1000

1200

1400

1600

Test Phase

1

1

1

1

1

1

1

1

1

TPS

0.07

10.34

20.99

31.5

41.84

53

57.41

34.77

18.7

BPS

25.83

4439.2

8995.91

13525.8

17922.3

22674.9

24446.4

14856.3

8008.33

Rows

12

2683

5344

8062

10483

13273

12178

6687

3856

Bytes

4668

798124

1624044

2438878

3220387

4080192

3710425

2043438

1203575

Deadlocks

0

0

0

0

0

0

0

0

0

Rollbacks

0

0

0

0

0

0

0

0

0

Errors

0

0

0

0

0

0

0

0

0

Avg Time

0.017

0.015

0.015

0.017

0.015

0.015

2.363

23.78

60.454

Min Time

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.006

Max Time

0.088

0.159

1.004

1.016

1.016

1.01

78.082

200.155

229.286

90th Time

0.056

0.046

0.046

0.051

0.049

0.046

13.015

52.652

86.605

Avg Response Time

0.016

0.014

0.014

0.017

0.014

0.014

2.357

23.734

60.191

Min Response Time

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.001

0.006

Max Response Time

0.079

0.146

1.004

1.016

1.016

1.01

78.082

200.155

228.151

90th Response Time

0.054

0.044

0.044

0.05

0.047

0.044

12.993

52.576

86.27

Avg Think Time

7.21

9.5

9.264

9.265

9.37

9.178

9.228

9.179

9.189

Min Think Time

0.404

0

0

0

0

0

0

0

0

Max Think Time

17.325

24.022

23.991

24.02

24.043

24.038

24.038

24.018

24.046

90th Think Time

16.632

18.283

18.371

18.325

18.261

18.329

18.35

15.354

12.247

Avg Keying Time

7.833

9.898

9.829

9.775

9.767

9.701

9.757

9.979

10.045

Min Keying Time

2

2

2

2

2

2

2

2

2

Max Keying Time

18

18

18

18

18

18

18

18

18

90th Keying Time

17.64

17.759

17.759

17.76

17.752

17.754

17.744

16.647

13.834

Avg Interarrival Time

0

0

0

0

0

0

0

0

0

Min Interarrival Time

0

0

0

0

0

0

0

0

0

Max Interarrival Time

0

0

0

0

0

0

0

0

0

90th Interarrival Time

0

0

0

0

0

0

0

0

0

User Defined 1

0

0

0

0

0

0

0

0

0

User Defined 2

0

0

0

0

0

0

0

0

0

User Defined 3

0

0

0

0

0

0

0

0

0

User Defined 4

0

0

0

0

0

0

0

0

0

User Defined 5

0

0

0

0

0

0

0

0

0

数据分析 1:数据库规模为1.07gb,并发用户数量为1到1000(100递增)情况下

由数据库表可以绘制出相关图表:如图:

Oracle-RAC安装部署手册

Oracle-RAC安装部署手册

Oracle-RAC安装部署手册

由上图可以看出:

1.                在数据库规模为1.07Gb,1000个并发用户时,数据库性能表现很好,呈线形增长,未出现拐点。

2.                1000并发用户时,性能达到最大点,此时的TPS值为52.88,经过推算,tpmC值为:1445.717,即:数据库系统处理新订单的能力为,每分钟1445.717个处理。

3.                磁盘阵列吞吐量在数据库性能最大时达到22611.96BPS,但未出现拐点,说明磁盘阵列运转良好。

由于方案1并没有使数据库系统出现性能拐点,我们决定加大数据库规模,寻找数据库系统的性能最大值。

数据分析 2:数据库规模为2.36gb,并发用户数量为1到1000(100递增)情况下

由表可以绘制出相关图表:如图:

Oracle-RAC安装部署手册

Oracle-RAC安装部署手册

Oracle-RAC安装部署手册

Oracle-RAC安装部署手册

由上图可以得出以下结论:

1.   在数据库规模为2.36Gb,1000个并发用户时,数据库性能表现很好,呈线形增长,未出现拐点。

2.   1000并发用户时,性能达到最大点,此时的TPS值为52.34,经过推算,tpmC值为:1448.379,即:数据库系统处理新订单的能力为,每分钟1448.379个处理。

3.   磁盘阵列吞吐量在数据库性能最大时达到22476.52BPS,但未出现拐点,说明磁盘阵列运转良好。

4.   数据库规模增大后,用户数量没有变化时,数据库的性能仍然没有出现拐点。

测试分析 3:数据库规模为2.36gb,并发用户数量为1到2000(200递增)情况下

由表可以绘制出相关图表,如下:

Oracle-RAC安装部署手册

Oracle-RAC安装部署手册

Oracle-RAC安装部署手册

Oracle-RAC安装部署手册

由上图可以得出以下结论:

1.   在数据库规模为2.36Gb,2000个并发用户时,数据库性能在1200用户时出现拐点,即:并发用户数达到1200时,数据库性能达到顶点。此后数据库性能迅速降低。

2.   1200并发用户时,此时的TPS值为57.41,经过推算,tpmC值为:1560.889,即:数据库系统处理新订单的能力为,每分钟1560.889个处理。

3.   磁盘阵列吞吐量在数据库性能最大时达到24446.36BPS,说明磁盘阵列没有出现瓶颈。

4.   并发用户数量达到1600后,数据库崩溃,服务器重启。

综合上述三种测试方案,可以看到,在为系统预留40%资源的情况下,tpmC值为624.3556,即数据库系统每分钟处理的新订单个数为624.3556,如果将此情景放在大洋的应用场景中,可以计算得出,在普通电视台的工作时间内(8小时),数据库系统,可以处理661363.2个事务请求。远远满足台里的实际需要。

6.3 测试结论

1.   经过测试,当数据库规模在1.07Gb,并发用户数在1000以内时,对于数据库系统,并未达到系统的最大性能点,数据库运转良好。

2.   当数据库规模在2.36Gb,并发用户数在1000以内时,对于数据库系统,未达到系统的最大性能点,数据库运转良好。

3.   当数据库规模在2.36Gb,并发用户数在2000以内时,对于数据库系统,当用户数量达到1200时,数据库性能出现拐点,性能随之迅速下降,当达到1600用户数时,数据库崩溃,系统重启。

4.   本次测试的最大TPS值为57.41,tpmC值为1560.889。假设我们为数据库系统预留40%的资源余量,那么结合用户需求可以得出:

TPS’=TPSmax*(1-40%)

其中:TPS’—用户实际使用的TPS值

TPSmax—系统最大TPS值

tpmC’=tpmCmax*(1-40%)

其中:tpmC’— 用户实际使用的tpmC值

tpmCmax—系统最大tpmC值

TPS’=34.446

tpmC’=904.1334

假设用户工作时间为每天8个小时,则:

事务总数= TPS’*60*60*8

事务总数=992044.8(个)

相当于用户每天上载992044.8个素材,此性能远远满足用户需要。

5.   根据“7”中得出的tpmC’数值,我们可以推算出系统的性价比。

性价比= 系统总价/tpmC’

其中:系统总价=196500,则:

性价比=217.33人民币/tpmC

©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
  • 验证码
◎已有 0 人评论
搜索
作者介绍
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×