You are on page 1of 14

在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 1 of 14

ORACLE.COM OTN 技术网 合作伙伴 Oracle 商店 支持 (Sign In/Register for Account | Subscribe)

选择国家

下载 文档 论坛 文章 示例代码
示例代码 培训 RSS 资源
搜索网站

:Linux
DBA:
产品中心
数据库
中间件
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g
企业管理器
作者:Vincent Chan
应用技术
协作套件
学习如何在 Red Hat Enterprise Linux 3 上将单一实例数据库转换为 Oracle 真正应用程序集群 (RAC) 10g。

中文白皮书
更多……
内容
技术中心 概述
BI和数据仓库 第 1 步:准备安装
网格 第 2 步:将数据库移植到 ASM
第 3 步:安装集群就绪服务 (CRS) 软件
Java 开发人员
第 4 步:安装 Oracle RAC 软件
Linux 第 5 步:后续安装
.NET 开发人员 第 6 步:测试透明应用程序故障切换 (TAF)
PHP 开发人员 结论
Web 服务
Windows 本文相关
本文相关下载:
XML
用于 Linux x86 的 Oracle 数据库 10g 企业版和集群件
更多……
Oracle ASMlib 驱动程序
OTN 社区
关于 OTN
对于那些具有有限操作经验的用户而言,实施 Oracle RAC 10g 的前景令人生畏。但事情并不一定如此。
Oracle ACE
TechBlast 时事通讯
本指南将提供明确的步骤,引导您在 RHEL3 上将单一实例 Oracle 10g 数据库转换为 Oracle RAC。我将 Oracle 自动存储管理 (ASM)(一个构建到
Oracle 杂志
Oracle 数据库内核中的集成文件系统和卷管理解决方案)用于 RAC 数据库存储,因为它不但提供了存储可靠性和高性能,还简化了数据库存储管理。
网志和评论
播客
总的说来,有多种方法可以将数据库转换为 RAC。如果数据库比较小,则可以考虑在 ASM 上安装一个新的 RAC 数据库,并将当前数据库中的数据导
用户群 出/导入到 RAC 数据库。对于较大的数据库,首选的方法是使用 RMAN 将数据库文件移植到 ASM。这里所要说明的方法是一个分为两个阶段的方法:
合作伙伴白皮书 首先,将数据移植到 ASM,然后将单一实例数据库转换为 RAC。如果您是对 ASM 不了解,建议您采用此移植方法,先熟悉 ASM,然后再进一步运用
Oracle 10g 图书 ASM 和 RAC。(有关 Oracle ASM 的更多信息,请访问 Oracle ASM 产品中心或参考文档。)
更多……
本指南要求您对 RAC 体系结构有一个基本了解,对 Oracle 数据库和 Red Hat Enterprise Linux 的管理较为熟悉。有关详细信息,请参考文档。

概述

RAC 集群由两台运行 RHEL3(内核 2.4.21-27)的 Intel x86 服务器组成。每个节点都可以访问共享存储器并可以连接到公共网络和专用网络。

本指南分为以下步骤:

1. 准备安装
2. 将数据库移植到 ASM
3. 安装 Oracle 集群就绪服务 (CRS) 软件
4. 安装 Oracle RAC 软件
5. 后续安装
6. 测试透明应用程序故障切换 (TAF)

除非另行指定,否则应在两
两个节点上执行所有步
行所有步骤。

以下是在转换到 RAC 之前的单一实例数据库环境的情况介绍:

主机名 实例名 数据库名 $ORACLE_BASE 数据库文件存储


文件存储

salmon1 prod1 prod1 /u01/app/oracle ext3

和 RAC 数据库环境情况介绍:

主机名 实例名 数据库名 $ORACLE_BASE 数据库文件存储


文件存储 OCR 和 CRS Voting Disk

salmon1 prod1a prod1 /u01/app/oracle ASM 原始

salmon2 prod1b prod1 /u01/app/oracle ASM 原始

您将在每个节点上安装 Oracle Home 以实现冗余。ASM 和 RAC 实例在每个节点上共享同一 Oracle Home。

第 1 步:准 备安装
检验软件程序包版本
检验软件程序包版本。
1a.检验软件程序包版本。

安装所需的程序包。其他信息可以从文档中获得。

[root@salmon1]# rpm -qa | grep -i compat


compat-libstdc++-7.3-2.96.128
compat-gcc-c++-7.3-2.96.128
compat-libstdc++-devel-7.3-2.96.128
compat-db-4.0.14-5
compat-glibc-7.x-2.2.4.32.6
compat-slang-1.4.5-5
compat-gcc-7.3-2.96.128
compat-pwdb-0.62-3
[root@salmon1]#
[root@salmon1]# rpm -qa | grep openmotif
openmotif-2.2.3-3.RHEL3
[root@salmon1]#
[root@salmon1]# rpm -qa | grep -i gcc
gcc-gnat-3.2.3-42
gcc-c++-ssa-3.5ssa-0.20030801.48
compat-gcc-c++-7.3-2.96.128

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 2 of 14

libgcc-ssa-3.5ssa-0.20030801.48
gcc-3.2.3-42
gcc-g77-3.2.3-42
gcc-java-3.2.3-42
gcc-ssa-3.5ssa-0.20030801.48
gcc-g77-ssa-3.5ssa-0.20030801.48
gcc-objc-ssa-3.5ssa-0.20030801.48
libgcc-3.2.3-42
gcc-c++-3.2.3-42
gcc-objc-3.2.3-42
gcc-java-ssa-3.5ssa-0.20030801.48
compat-gcc-7.3-2.96.128

检验内
检验内核参数。
1b.检验 参数。

检验以下内核参数。其他信息可以从文档中获得。

[root@salmon1]# sysctl -a | grep shm


kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 2147483648
[root@salmon1]# sysctl -a | grep sem
kernel.sem = 250 32000 100 128
[root@salmon1]# sysctl -a | grep -i ip_local
net.ipv4.ip_local_port_range = 1024 65000
[root@salmon1]# sysctl -a | grep -i file-max
fs.file-max = 65536

创建 Oracle Base 目录、oracle 用户和组。


1c.创

在第一个节点上使用下面的信息,在第二个节点上创建 oracle 用户以及 oinstall 和 dba 组。

[oracle@salmon1]$ hostname
salmon1.dbsconsult.com
[oracle@salmon1]$
[oracle@salmon1]$ id
uid=500(oracle) gid=500(dba) groups=500(dba),501(oinstall)
[oracle@salmon1]$
[oracle@salmon1]$ echo $ORACLE_BASE
/u01/app/oracle

编辑 oracle 用户环境文件
1d.编辑 户环境文件。
境文件。

[oracle@salmon1]$ more .bash_profile


# .bash_profile

# Get the aliases and functions


if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

export PATH=$PATH:$HOME/bin
export ORACLE_SID=prod1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.1.0
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
umask 022

配置 oracle 用户 shell 限制。


1e.配置 限制。

[root@salmon1]# more /etc/security/limits.conf


* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
[root@salmon1]# grep pam_limits /etc/pam.d/login
session required /lib/security/pam_limits.so

配置公共网
配置公共网络和专用网络。
1f.配置公共

使用下面的信息对网络接口设备 eth0(公共)和 eth1(专用)进行必需的更改。

[root@salmon1]# redhat-config-network

主机名 IP 地址 类型

salmon1.dbsconsult.com 192.168.0.184 公共 (eth0)

salmon2.dbsconsult.com 192.168.0.185 公共 (eth0)

salmon1.dbsconsult.com 10.10.10.84 专用 (eth1)

salmon2.dbsconsult.com 10.10.10.85 专用 (eth1)

salmon1-vip.dbsconsult.com 192.168.0.186 虚拟

salmon2-vip.dbsconsult.com 192.168.0.187 虚拟

编辑 the /etc/hosts 文件。


1g.编辑 文件。

127.0.0.1 localhost.localdomain localhost


10.10.10.84 sallocal1.dbsconsult.com sallocal1
10.10.10.85 sallocal2.dbsconsult.com sallocal2
192.168.0.184 salmon1.dbsconsult.com salmon1
192.168.0.185 salmon2.dbsconsult.com salmon2
192.168.0.186 salmon1-vip.dbsconsult.com salmon1-vip
192.168.0.187 salmon2-vip.dbsconsult.com salmon2-vip

验证主机名和配置的网络接口设备。

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 3 of 14

[root@salmon1]# hostname
salmon1.dbsconsult.com
[root@salmon1]# /sbin/ifconfig

使用 SSH 建立用户
1h.使用 建立用户等效性。
等效性。

在集群就绪服务 (CRS) 和 RAC 安装过程中,Oracle Universal Installer (OUI) 必须能够以 oracle 的身份将软件复制到所有 RAC 节点,而不提示输入
口令。在 Oracle 10g 中,可以使用 ssh 代替 rsh 完成此操作。

要建立用户等效性,请在两个节点上以 oracle 用户的身份生成用户的公钥和私钥。

[oracle@salmon1]$ ssh-keygen -t dsa


Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Created directory '/home/oracle/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
5d:8c:42:97:eb:42:ae:52:52:e9:59:20:2a:d3:6f:59 oracle@salmon1.dbsconsult.com

在每个节点上测试连接。验证当您再次运行以下命令时,系统是否不提示您输入口令。

ssh salmon1 date


ssh salmon2 date
ssh sallocal1 date
ssh sallocal2 date
ssh salmon1.dbsconsult.com date
ssh salmon2.dbsconsult.com date
ssh sallocal1.dbsconsult.com date
ssh sallocal2.dbsconsult.com date

配置 hangcheck timer 内核模块


1i.配置 核模块。

hangcheck timer 内核模块监控系统的运行情况,并重新启动出现故障的 RAC 节点。它使用两个参数,即 hangcheck_tick(定义系统检查频率)和


hangcheck_margin(定义在重置 RAC 节点前的最大挂起延时)来确定节点是否出现故障。

在 /etc/rc.d/rc.local 中添加以下行以自动加载 hangcheck 模块。

[root@salmon1]# grep insmod /etc/rc.d/rc.local


insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

重新创
重新创建数据库控制文件。
1j.重新 控制文件。

在转换到 RAC 之前,确保在控制文件中正确调整以下项的大小。如果需要,请使用正确的设置重新创建数据库控制文件。

MAXLOGFILES
MAXLOGMEMBERS
MAXDATAFILES
MAXINSTANCES
MAXLOGHISTORY

调整数据库缓冲
1k.调 库缓冲区高速缓
高速缓存。

从单一实例数据库转换到 RAC 时,数据库缓冲区高速缓存需要额外的内存。在 RAC 中,为每个块缓冲区高速缓存中的全局高速缓存服务 (GCS) 分配


空间。所需的额外内存量取决于应用程序访问数据的方式,即同一个块是否高速缓存到多个实例中。

在演示实验中,我观察到缓冲区高速缓存的使用率增加了大约 8%。使用缓冲区高速缓存顾问确定最佳的缓冲区高速缓存大小,或切换到 Oracle 自动共


享内存管理 (ASMM) 让 Oracle 进行控制。

第 2 步:将数据
将数据库移植到 ASM
ASM 实例与数据库实例之间的同步需要 Oracle 集群同步服务 (CSS) 后台程序。要启动 ASM 实例,必须启动 CSS 后台程序。安装或升级到 Oracle
数据库 10g 时,应该已经为单节点版本配置了 CSS,并且 CSS 应在系统重新启动时自动启动。

[root@salmon1]# ps a€“ef | grep ocssd.bin | wc a€“l


17

下载 ASM RPM.
2a.下

从 OTN 下载以下 ASM RPM:

 oracleasm-support-2.0.0-1.i386.rpm
 oracleasm-2.4.21-27.EL-1.0.4-2.i686.rpm(UP 内核的驱动程序)或 oracleasm-2.4.21-27.ELsmp-1.0.4-1.i686.rpm(SMP 内核的驱动程序)
 oracleasmlib-2.0.0-1.i386.rpm

安装 ASM RPM。
2b.安 。

以 root 用户的身份安装 ASM RPM。

[root@salmon1]# rpm -i oracleasm-support-2.0.0-1.i386.rpm


[root@salmon1]# rpm -i oracleasm-2.4.21-27.EL-1.0.4-2.i686.rpm
Linking module oracleasm.o into the module path [ OK ]
[root@salmon1]# rpm -i oracleasmlib-2.0.0-1.i386.rpm
[root@salmon1]# rpm -qa | grep oracleasm
oracleasm-2.4.21-27.EL-1.0.4-2
oracleasm-support-2.0.0-1
oracleasmlib-2.0.0-1

配置 ASM。
2c.配置 。

以 root 用户的身份配置 ASMLib。

[root@salmon1]# /etc/init.d/oracleasm configure


Configuring the Oracle ASM library driver.

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 4 of 14

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

创建 ASM 磁盘。
2d.创

以 root 用户的身份在任何一个节点上创建 ASM 磁盘。

[root@salmon1]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdg5


Marking disk "/dev/sdg5" as an ASM disk [ OK ]
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdg6
Marking disk "/dev/sdg6" as an ASM disk [ OK ]
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL3 /dev/sdg7
Marking disk "/dev/sdg7" as an ASM disk [ OK ]
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL4 /dev/sdg8
Marking disk "/dev/sdg8" as an ASM disk [ OK ]
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL5/dev/sdg9
Marking disk "/dev/sdg9" as an ASM disk [ OK ]
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL6 /dev/sdg10
Marking disk "/dev/sdg10" as an ASM disk [ OK ]
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL7 /dev/sdg11
Marking disk "/dev/sdg11" as an ASM disk [ OK ]
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL8 /dev/sdg12
Marking disk "/dev/sdg12" as an ASM disk [ OK ]
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL9 /dev/sdg13
Marking disk "/dev/sdg13" as an ASM disk [ OK ]
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL10 /dev/sdg14
Marking disk "/dev/sdg14" as an ASM disk [ OK ]

验证能否从每个节点看到 ASM 磁盘。

[root@salmon1]# /etc/init.d/oracleasm listdisks


VOL1
VOL2
VOL3
VOL4
VOL5
VOL6
VOL7
VOL8
VOL9
VOL10
[root@salmon1]# /etc/init.d/oracleasm scandisks
Scanning system for ASM disks [ OK ]

创建 ASM init.ora。
2e.创 。

在第一个节点上,使用以下参数在 $ORACLE_HOME/dbs 中创建一个 init+ASM1A.ora 文件:

#asm_diskgroups='DG1', a€?DG2a€?, a€?RECOVERYDESTa€?


asm_diskstring='ORCL:VOL*'
background_dump_dest=/u01/app/oracle/admin/+ASM/bdump
core_dump_dest=/u01/app/oracle/admin/+ASM/cdump
user_dump_dest=/u01/app/oracle/admin/+ASM/udump
instance_type=asm
large_pool_size=16M
remote_login_passwordfile=exclusive
+ASM1A.instance_number=1
+ASM1B.instance_number=2

创建 ASM 口令文件。
2f.创 口令文件

使用 orapwd 实用程序在第一个节点上的 $ORACLE_HOME/dbs 中创建一个 orapw+ASM1A 文件。

[oracle@salmon1]$ cd $ORACLE_HOME/dbs
[oracle@salmon1]$ orapwd file=orapw+ASM1A password=sys entries=5

创建第一个
2g.创建第一个 ASM 实例。

在第一个节点上创建第一个 ASM 实例。将 CRS 软件安装到第二个节点后,将在“后续安装”中创建第二个 ASM 实例。

[oracle@salmon1]$ export ORACLE_SID=+ASM1A


[oracle@salmon1]$ sqlplus / as sysdba

SQL*Plus:Release 10.1.0.3.0 - Production on Thu May 26 05:51:07 2005

Copyright (c) 1982, 2004, Oracle.保留所有权利。

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 104857600 bytes


Fixed Size 777616 bytes
Variable Size 104079964 bytes
Database Buffers 0 bytes
Redo Buffers 0 bytes
ORA-15110:no diskgroups mounted

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 5 of 14

创建 ASM 实例 spfile。
2h.创 。

在 ASM 实例启动后立即创建一个 spfile。使用 spfile 文件,任何新建的磁盘组都将自动添加到 spfile 文件。

SQL> create spfile from pfile;

File created.

创建磁盘组
2i.创建磁盘组。
盘组

创建三个磁盘组:DG1、DG2 和 RECOVERYDEST。DG1 和 DG2 将用于存储 Oracle 数据文件和重做日志。RECOVERYDEST 将用作闪回恢复区。

SQL> create diskgroup dg1 normal redundancy


2 failgroup fg1a disk
3 'ORCL:VOL1','ORCL:VOL2'
4 failgroup fg1b disk
5 'ORCL:VOL3','ORCL:VOL4';

Diskgroup created.

SQL> create diskgroup dg2 normal redundancy


2 failgroup fg2a disk
3 'ORCL:VOL5','ORCL:VOL6'
4 failgroup fg2b disk
5 'ORCL:VOL7','ORCL:VOL8';

Diskgroup created.

SQL> create diskgroup recoverydest normal redundancy


2 failgroup fgrd1 disk
3 'ORCL:VOL9'
4 failgroup fgrd2 disk
5 'ORCL:VOL10';

Diskgroup created.

SQL> show parameter diskgroup

NAME TYPE VALUE


------------------------------ ----------- -----------------------------
asm_diskgroups string DG1, DG2, RECOVERYDEST

SQL> select name,total_mb from v$asm_diskgroup;

NAME TOTAL_MB
------------------------- -------------------
DG1 36864
DG2 36864
RECOVERYDEST 73728

3 rows selected.

SQL> select name,path,failgroup from v$asm_disk;

NAME PATH FAILGROUP


-------- --------------- ----------------
VOL1 ORCL:VOL1 FG1A
VOL10 ORCL:VOL10 FGRD2
VOL2 ORCL:VOL2 FG1A
VOL3 ORCL:VOL3 FG1B
VOL4 ORCL:VOL4 FG1B
VOL5 ORCL:VOL5 FG2A
VOL6 ORCL:VOL6 FG2A
VOL7 ORCL:VOL7 FG2B
VOL8 ORCL:VOL8 FG2B
VOL9 ORCL:VOL9 FGRD1

10 rows selected.

配置闪
配置闪回恢复
2j.配置 回恢复区。

SQL> connect sys/sys@prod1 as sysdba


Connected.
SQL> alter database disable block change tracking;

Database altered.

SQL> alter system set db_recovery_file_dest_size=72G;

System altered.

SQL> alter system set db_recovery_file_dest=a€?+RECOVERYDESTa€?;

System altered.

将数据文件移植到
将数据文件移植到 ASM。
2k.将数

必须使用 RMAN 将数据文件移植到 ASM 磁盘组。所有数据文件都将移植到新创建的磁盘组 DG1。在 DG1 和 DG2 中创建重做日志和控制文件。在生


产环境中,应将重做日志存储到与余下的 Oracle 数据文件不同的磁盘组和磁盘控制器上。

SQL> connect sys/sys@prod1 as sysdba


Connected.
SQL> alter system set db_create_file_dest=a€?+DG1a€?;

System altered.

SQL> alter system set control_files='+DG1/cf1.dbf' scope=spfile;

System altered.

SQL> shutdown immediate;

[oracle@salmon1]$ rman target /

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 6 of 14

RMAN> startup nomount;

Oracle instance started

Total System Global Area 419430400 bytes


Fixed Size 779416 bytes
Variable Size 128981864 bytes
Database Buffers 289406976 bytes
Redo Buffers 262144 bytes

RMAN> restore controlfile from '/u02/oradata/prod1/control01.ctl';

Starting restore at 26-MAY-05


using target database controlfile instead of recovery catalog
allocated channel:ORA_DISK_1
channel ORA_DISK_1:sid=160 devtype=DISK

channel ORA_DISK_1:copied controlfile copy


output filename=+DG1/cf1.dbf
Finished restore at 26-MAY-05

RMAN> alter database mount;

database mounted
released channel:ORA_DISK_1

RMAN> backup as copy database format '+DG1';

Starting backup at 26-MAY-05


allocated channel:ORA_DISK_1
channel ORA_DISK_1:sid=160 devtype=DISK
channel ORA_DISK_1:starting datafile copy
input datafile fno=00001 name=/u02/oradata/prod1/system01.dbf
output filename=+DG1/prod1/datafile/system.257.1 tag=TAG20050526T073442 recid=1 stamp=559294642
channel ORA_DISK_1:datafile copy complete, elapsed time: 00:02:49
channel ORA_DISK_1:starting datafile copy
input datafile fno=00003 name=/u02/oradata/prod1/sysaux01.dbf
output filename=+DG1/prod1/datafile/sysaux.258.1 tag=TAG20050526T073442 recid=2 stamp=559294735
channel ORA_DISK_1:datafile copy complete, elapsed time: 00:01:26
channel ORA_DISK_1:starting datafile copy
input datafile fno=00002 name=/u02/oradata/prod1/undotbs01.dbf
output filename=+DG1/prod1/datafile/undotbs1.259.1 tag=TAG20050526T073442 recid=3 stamp=559294750
channel ORA_DISK_1:datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1:starting datafile copy
input datafile fno=00004 name=/u02/oradata/prod1/users01.dbf
output filename=+DG1/prod1/datafile/users.260.1 tag=TAG20050526T073442 recid=4 stamp=559294758
channel ORA_DISK_1:datafile copy complete, elapsed time: 00:00:07
channel ORA_DISK_1:starting datafile copy
copying current controlfile
output filename=+DG1/prod1/controlfile/backup.261.1 tag=TAG20050526T073442 recid=5 stamp=559294767
channel ORA_DISK_1:datafile copy complete, elapsed time: 00:00:08
Finished backup at 26-MAY-05

RMAN> switch database to copy;

datafile 1 switched to datafile copy "+DG1/prod1/datafile/system.257.1"


datafile 2 switched to datafile copy "+DG1/prod1/datafile/undotbs1.259.1"
datafile 3 switched to datafile copy "+DG1/prod1/datafile/sysaux.258.1"
datafile 4 switched to datafile copy "+DG1/prod1/datafile/users.260.1"

RMAN> alter database open;

database opened

RMAN> exit

SQL> connect sys/sys@prod1 as sysdba


Connected.
SQL> select tablespace_name, file_name from dba_data_files;

TABLESPACE FILE_NAME
--------------------- -----------------------------------------
USERS +DG1/prod1/datafile/users.260.1
SYSAUX +DG1/prod1/datafile/sysaux.258.1
UNDOTBS1 +DG1/prod1/datafile/undotbs1.259.1
SYSTEM +DG1/prod1/datafile/system.257.1

2l.将临时表空间移植到 ASM。

SQL> alter tablespace temp add tempfile size 100M;

Tablespace altered.

SQL> select file_name from dba_temp_files;

FILE_NAME
-------------------------------------
+DG1/prod1/tempfile/temp.264.3

将重做日志移植到 ASM。
2m.将 。

删除现有的重做日志,并在 ASM 磁盘组 DG1 和 DG2 中重新创建它们。

SQL> alter system set db_create_online_log_dest_1='+DG1';

System altered.

SQL> alter system set db_create_online_log_dest_2='+DG2';

System altered.

SQL> select group#, member from v$logfile;

GROUP# MEMBER
--------------- ----------------------------------

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 7 of 14

1 /u03/oradata/prod1/redo01.log
2 /u03/oradata/prod1/redo02.log

SQL> alter database add logfile group 3 size 10M;

Database altered.

SQL> alter system switch logfile;

System altered.

SQL> alter database drop logfile group 1;

Database altered.

SQL> alter database add logfile group 1 size 100M;

Database altered.

SQL> alter database drop logfile group 2;

Database altered.

SQL> alter database add logfile group 2 size 100M;

Database altered.

SQL> alter system switch logfile;

System altered.

SQL> alter database drop logfile group 3;

Database altered.

SQL> select group#, member from v$logfile;

GROUP# MEMBER
--------------- ----------------------------------------
1 +DG1/prod1/onlinelog/group_1.265.3
1 +DG2/prod1/onlinelog/group_1.257.1
2 +DG1/prod1/onlinelog/group_2.266.3
2 +DG2/prod1/onlinelog/group_2.258.1

从 spfile 文件创
2n.从 文件创建 pfile 文件。
文件。

创建并保留数据库 pfile 的副本。您将稍后在“后续安装”中向 pfile 中添加更多的 RAC 特定参数。

SQL> connect sys/sys@prod1 as sysdba


Connected.
SQL> create pfile='/tmp/tmppfile.ora' from spfile;

File created.

添加其他控制文件。
添加其他控制文件
2o.添加其他控制文件

如果需要其他控制文件以实现冗余,则可以在 ASM 中创建它,方法与在其他任何文件系统中创建相同。

SQL> connect sys/sys@prod1 as sysdba


Connected to an idle instance.
SQL> startup mount
ORACLE instance started.

Total System Global Area 419430400 bytes


Fixed Size 779416 bytes
Variable Size 128981864 bytes
Database Buffers 289406976 bytes
Redo Buffers 262144 bytes
Database mounted.

SQL> alter database backup controlfile to '+DG2/cf2.dbf';

Database altered.

SQL> alter system set control_files='+DG1/cf1.dbf ','+DG2/cf2.dbf' scope=spfile;

System altered.

SQL> shutdown immediate;


ORA-01109:database not open

Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 419430400 bytes


Fixed Size 779416 bytes
Variable Size 128981864 bytes
Database Buffers 289406976 bytes
Redo Buffers 262144 bytes
Database mounted.
Database opened.
SQL> select name from v$controlfile;

NAME
---------------------------------------
+DG1/cf1.dbf
+DG2/cf2.dbf

将所有数据文件成功移植到 ASM 后,将不再需要旧的数据文件并可以将其删除。您的单一实例数据库现在在 ASM 上运行!

第 3 步:安装集群就绪
集群就绪服务 (CRS) 软件

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 8 of 14

CRS 要求共享原始设备或 Oracle 集群文件系统 (OCFS) 上有两个文件,即 Oracle 集群注册表 (OCR) 和 Voting Disk。这些文件必须可以由集群中的
所有节点访问。此处使用原始设备来容纳这两个文件。

创建 OCR 和 Voting Disk。


3a.创 。

OCR 的存储器大小至少应为 100MB,voting disk 的存储器大小应至少为 20MB。

文件 原始设备
原始设备 磁盘分区 文件名 大小 (MB)

OCR /dev/raw/raw11 /dev/sde1 /u02/oradata/prod1/ocr 100

Voting Disk /dev/raw/raw12 /dev/sde2 /u02/oradata/prod1/vdisk 20

[root@salmon1]# more /etc/sysconfig/rawdevices


/dev/raw/raw11 /dev/sde1
/dev/raw/raw12 /dev/sde2
[root@salmon1]# chown oracle:dba /dev/raw/raw11
[root@salmon1]# chown oracle:dba /dev/raw/raw12
[root@salmon1]# /sbin/service rawdevices restart
Assigning devices:
/dev/raw/raw11 --> /dev/sde1
/dev/raw/raw11:bound to major 8, minor 65
/dev/raw/raw12 --> /dev/sde2
/dev/raw/raw12:bound to major 8, minor 66
done
[root@salmon1]# su - oracle
[oracle@salmon1]$ ln -s /dev/raw/raw11 /u02/oradata/prod1/ocr
[oracle@salmon1]$ ln -s /dev/raw/raw12 /u02/oradata/prod1/vdisk

安装 CRS 软件。
3b.安

安装 CRS 软件之前,请关闭监听程序、数据库和 ASM 实例。装入 CRS CD 或从 OTN 下载该软件。只应在第一个节点上启动 OUI。安装过程中,安


装程序将该软件自动复制到第二个节点。

[oracle@salmon1]$ export ORACLE_BASE=/u01/app/oracle


[oracle@salmon1]$ /mnt/cdrom/runInstaller

1. 欢迎 - 单击“Next”。
2. 指定文件位置:
a. 名称:OraCr10g_home1
b. 路径:/u01/app/oracle/product/10.1.0/crs_1
3. 语言选择 - 英语
4. 集群配置:
a. 集群名称:crs
b. 公共节点名称:salmon1,专用节点名称:sallocal1
c. 公共节点名称:salmon2,专用节点名称:sallocal2
5. 专用互连实施:
a. 接口名称:eth0,子网:192.168.0.0,接口类型:公共
b. 接口名称:eth1,子网:10.10.10.0,接口类型:专用
6. Oracle 集群注册表:
a. 指定 OCR 位置:/u02/oradata/prod1/ocr
7. Voting Disk:
a. 输入 Voting disk 文件名称:/u02/oradata/prod1/vdisk
8. 在第一个节点上以 root 用户的身份在另一个窗口中执行 /u01/app/oracle/oraInventory/orainstRoot.sh 脚本。
9. 在第二个节点上以 root 用户的身份在开一个窗口中执行 /u01/app/oracle/oraInventory/orainstRoot.sh 脚本。
10. 在两个节点上运行 orainstRoot.sh 后单击“Continue”。
11. 摘要 - 单击“Install”
12. 在第一个节点上以 root 用户的身份在另一个窗口中执行 /u01/app/oracle/product/10.1.0/crs_1/root.sh 脚本。在该步骤完成之前,不要运行下一
个步骤。
13. 在第二个节点上以 root 用户的身份在另一个窗口中执行 /u01/app/oracle/product/10.1.0/crs_1/root.sh 脚本。
14. 在两个节点上运行 root.sh 后单击“OK”。
15. 安装结束 - 单击“Exit”。

[oracle@salmon1]$ /u01/app/oracle/product/10.1.0/crs_1/bin/olsnodes -n
salmon1 1
salmon2 2
[oracle@salmon1]$ ps -ef | egrep "css|crs|evm"

第 4 步:安装 Oracle RAC 软件


编辑 oracle 用户环境文件
4a.编辑 户环境文件。
境文件。

在节点 1 上,设置 ORACLE_SID=prod1a。

在节点 2 上,设置 ORACLE_SID=prod1b。

[oracle@salmon1]$ more .bash_profile


# .bash_profile

# Get the aliases and functions


if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

export PATH=$PATH:$HOME/bin
export ORACLE_SID=prod1a
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1
export ORA_CRS_HOME=$ORACLE_BASE/product/10.1.0/crs_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
umask 022

安装 RAC 软件。
4b.安

装入 Oracle 数据库 10g 企业版 CD 或从 OTN 下载该软件。只在第一个节点上启动 OUI。安装过程中,安装程序将该软件自动复制到第二个节点。

[oracle@salmon1]$ .~/.bash_profile

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 9 of 14

[oracle@salmon1]$ /mnt/cdrom/runInstaller

1. 欢迎 - 单击“Next”。
2. 指定文件位置:
a. 名称:OraDB10g_home1
b. 路径:/u01/app/oracle/product/10.1.0/db_1
3. 指定硬件安装模式:
a. 选择“Cluster Installation”
b. 单击“Select All”
4. 选择安装模式:
a. 选择“Enterprise Edition”
5. 特定产品必要条件检查:
a. 所有检查均通过后,才可继续下一步。忽略 openmotif-2.1.30-11 警告。
6. 选择数据库配置:
a. 选择“Do not create a starter database”
7. 摘要 - 单击“Install”
8. 在第一个节点上以 root 用户的身份在另一个窗口中执行 /u01/app/oracle/product/10.1.0/db_1/root.sh 脚本。在 VIP 配置完成前,不要在第二个
节点上运行 root.sh。
9. VIPCA 欢迎 - 单击“Next”
10. VIP 配置帮助, 1 of 2:网络接口:
a. 选择“eth0”
11. VIP 配置帮助, 2 of 2:集群节点的虚拟 IP:
a. 节点名称:salmon1
b. IP 假名:salmon1-vip
c. IP 地址: 192.168.0.186
d. 子网掩码: 255.255.255.0
e. 节点名称:salmon2
f. IP 假名:salmon2-vip
g. IP 地址: 192.168.0.187
h. 子网掩码: 255.255.255.0
12. 摘要 - 单击“Finish”
13. 配置助手进度对话框 - 单击“OK”
14. 配置结果 - 单击“Exit”
15. 在第二个节点上以 root 用户的身份在另一个窗口中执行 /u01/app/oracle/product/10.1.0/db_1/root.sh 脚本。
16. 在两个节点上运行 root.sh 后单击“OK”。
17. 安装结束 - 单击“Exit”。

配置 Oracle Listener。
4c.配置 。

只应在一个节点上启动和配置网络配置助手 (NETCA)。在配置过程结束时,NETCA 将在两个节点上启动 Oracle listener。

[oracle@salmon1]$ netca

1. Oracle 网络配置助手:真正应用集群,配置:
a. 选择“Cluster configuration”
2. Oracle 网络配置助手:TOPSNodes:
a. 单击“Select all nodes”
3. Oracle 网络配置助手:欢迎
a. 选择“Listener configuration”
4. Oracle 网络配置助手:监听程序配置,监听程序:
a. 选择“Add”
5. Oracle 网络配置助手:监听程序配置,监听程序名称:
a. 监听程序名称:LISTENER
6. Oracle 网络配置助手:监听程序配置,择协议
a. 已选协议:TCP
7. Oracle 网络配置助手:监听程序配置,TCP/IP 协议:
a. 选择“Use the standard port number of 1521”
8. Oracle 网络配置助手:监听程序配置,增加监听程序?
a. 选择“No”
9. Oracle 网络配置助手:监听程序配置完成:
a. 单击“Next”
10. Oracle 网络配置助手:欢迎
a. 选择“Naming Methods configuration”
b. 单击“Next”
11. Oracle 网络配置助手:命名方式配置:选择命名方式:
a. 选择“Local Naming”
12. Oracle 网络配置助手:命名方式配置完成:
a. 单击“Next”
13. Oracle 网络配置助手:欢迎
a. 单击“Finish”

验证服
验证服务的状态。
4d.验证

在节点 1 上:

[oracle@salmon1]$ srvctl status nodeapps -n salmon1


VIP is running on node:salmon1
GSD is running on node:salmon1
Listener is running on node:salmon1
ONS daemon is running on node:salmon1

在节点 2 上:

[oracle@salmon2]$ srvctl status nodeapps -n salmon2


VIP is running on node:salmon2
GSD is running on node:salmon2
Listener is running on node:salmon2
ONS daemon is running on node:salmon2

4e. listener.ora 文件

在节点 1 上:

[oracle@salmon1]$ more $ORACLE_HOME/network/admin/listener.ora

LISTENER_SALMON1 =
(DESCRIPTION_LIST =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = salmon1-vip)(PORT = 1521))
)
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.184)(PORT = 1521))

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 10 of 14

)
)
)

SID_LIST_LISTENER_SALMON1 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.1.0/db_1)
(PROGRAM = extproc)
)
)

在节点 2 上:

[oracle@salmon2]$ more $ORACLE_HOME/network/admin/listener.ora

LISTENER_SALMON2 =
(DESCRIPTION_LIST =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = salmon2-vip)(PORT = 1521))
)
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.185)(PORT = 1521))
)
)
)

SID_LIST_LISTENER_SALMON2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.1.0/db_1)
(PROGRAM = extproc)
)
)

4f. tnsnames.ora 文件

在两个节点上:

[oracle@salmon1]$ more $ORACLE_HOME/network/admin/tnsnames.ora


LISTENERS_PROD1 =
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = salmon1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = salmon2-vip)(PORT = 1521))
)

PROD1 =
(DESCRIPTION=
(ADDRESS = (PROTOCOL = TCP)(HOST = salmon1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = salmon2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA=
(SERVICE_NAME = PROD1)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 200)
(DELAY = 5)
)
)
)
PROD1A =
(DESCRIPTION=
(ADDRESS = (PROTOCOL = TCP)(HOST = salmon1-vip)(PORT = 1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME = PROD1)
(INSTANCE_NAME = PROD1A)
)
)

PROD1B =
(DESCRIPTION=
(ADDRESS = (PROTOCOL = TCP)(HOST = salmon2-vip)(PORT = 1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME = PROD1)
(INSTANCE_NAME = PROD1B)
)
)

第 5 步:后 续安装
在第一个
在第一个节点上重新定位 ASM 实例文件。
5a.在第一 例文件。

将 ASM 实例口令文件和 spfile+ASM1A.ora 复制到新的 Oracle Home。

[oracle@salmon1]$ cp /u01/app/oracle/product/10.1.0/dbs/orapw+ASM1A
/u01/app/oracle/product/10.1.0/db_1/dbs
[oracle@salmon1]$ cp /u01/app/oracle/product/10.1.0/dbs/spfile+ASM1A.ora
/u01/app/oracle/product/10.1.0/db_1/dbs

为第二个
5b.为第二个 ASM 实例创建 init.ora。

在第二个节点上,在 $ORACLE_HOME/dbs 中创建一个 init+ASM1B.ora 文件。

asm_diskgroups='DG1', a€?DG2a€?, a€?RECOVERYDESTa€?


asm_diskstring='ORCL:VOL*'
background_dump_dest=/u01/app/oracle/admin/+ASM/bdump

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 11 of 14

core_dump_dest=/u01/app/oracle/admin/+ASM/cdump
user_dump_dest=/u01/app/oracle/admin/+ASM/udump
instance_type=asm
large_pool_size=16M
remote_login_passwordfile=exclusive
+ASM1A.instance_number=1
+ASM1B.instance_number=2

为第二个
5c.为第二个 ASM 实例创建口令文件。
建口令文件。

使用 orapwd 实用程序在第二个节点上的 $ORACLE_HOME/dbs 中创建一个 orapw+ASM1B 文件。

创建第二个
5d.创建第二个 ASM 实例。

在第二个节点上创建第二个 ASM 实例。

[oracle@salmon2]$ export ORACLE_SID=+ASM1B


[oracle@salmon2]$ sqlplus / as sysdba

SQL*Plus:Release 10.1.0.3.0 - Production on Thu May 26 18:43:14 2005

Copyright (c) 1982, 2004, Oracle.保留所有权利。

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 104857600 bytes


Fixed Size 777616 bytes
Variable Size 104079964 bytes
Database Buffers 0 bytes
Redo Buffers 0 bytes
ASM diskgroups mounted
SQL> create spfile from pfile;

File created.

SQL> shutdown immediate;

使用 CRS 注册 ASM 实例。


5e.使用

为实现更高的可用性,请在 CRS 框架下注册 ASM 实例。注册后,CRS 应检测到任何失败的实例,并自动尝试启动这些实例。重新启动服务器后,


CRS 还将自动启动这些实例。

在节点 1 上:

[oracle@salmon1]$ srvctl add asm -n salmon1 -i +ASM1A -o /u01/app/oracle/product/10.1.0/db_1


[oracle@salmon1]$ srvctl start asm -n salmon1
[oracle@salmon1]$ srvctl status asm -n salmon1
ASM instance +ASM1A is running on node salmon1.

在节点 2 上:

[oracle@salmon2]$ srvctl add asm -n salmon2 -i +ASM1B -o /u01/app/oracle/product/10.1.0/db_1


[oracle@salmon2]$ srvctl start asm -n salmon2
[oracle@salmon2]$ srvctl status asm -n salmon2
ASM instance +ASM1B is running on node salmon2.

[oracle@salmon1]$ ps -ef | grep dbw | grep -v grep


oracle 8918 1 0 May 26 ?00:00:01 asm_dbw0_+ASM1A
[oracle@salmon1]$ kill -9 8918
[oracle@salmon1]$ srvctl status asm a€“n salmon1
ASM instance +ASM1A is not running on node salmon1.
[oracle@salmon1]$ ps -ef | grep dbw | grep -v grep
[oracle@salmon1]$ srvctl status asm a€“n salmon1
ASM instance +ASM1A is running on node salmon1.
[oracle@salmon1]$ ps -ef | grep dbw | grep -v grep
oracle 8920 1 0 May 26 ?00:00:01 asm_dbw0_+ASM1A

为两个
为两个 RAC 实例创建口令文件。
5f.为两 建口令文件。

使用 orapwd 实用程序在第一个节点上的 $ORACLE_HOME/dbs 中创建一个 orapwprod1a 文件,并在第二个节点上的 $ORACLE_HOME/dbs 中创建


orapwprod1b 文件。

在 pfile 中添加 RAC 特定参数


5g.在 特定参数。
参数。

修改在第 2 步中保存的 pfile。添加并修改以下参数:

*.cluster_database_instances=2
*.cluster_database=true
*.remote_listener='LISTENERS_PROD1a€?
prod1a.thread=1
prod1a.instance_number=1
prod1a.undo_tablespace='UNDOTBS1'
prod1b.thread=2
prod1b.instance_number=2
prod1b.undo_tablespace='UNDOTBS2'

修改两
修改两个实例的 init.ora。
5h.修改 。

在节点 1 上:

[oracle@salmon1]$ more $ORACLE_HOME/dbs/initprod1a.ora


spfile='+DG1/spfileprod1.ora'

在节点 2 上:

[oracle@salmon2]$ more $ORACLE_HOME/dbs/initprod1b.ora


spfile='+DG1/spfileprod1.ora'

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 12 of 14

将数据
将数据库 spfile 移植到 ASM。
5i.将数 。

SQL> !echo $ORACLE_SID


prod1a

SQL> connect / as sysdba


Connected to an idle instance.
SQL> startup pfile=/tmp/tmppfile.ora
ORACLE instance started.

Total System Global Area 419430400 bytes


Fixed Size 779416 bytes
Variable Size 128981864 bytes
Database Buffers 289406976 bytes
Redo Buffers 262144 bytes
Database mounted.
Database opened.

SQL> create spfile='+DG1/spfileprod1.ora' from pfile='/tmp/tmppfile.ora';

File created.

SQL> shutdown immediate;


Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 419430400 bytes


Fixed Size 779416 bytes
Variable Size 128981864 bytes
Database Buffers 289406976 bytes
Redo Buffers 262144 bytes
Database mounted.
Database opened.
SQL> show parameter spfile

NAME TYPE VALUE


---------------------- ------------ ---------------------------
spfile string +DG1/spfileprod1.ora

创建 RAC 数据词典视图。
5j.创 视图。

在第一个 RAC 实例上创建 RAC 数据词典视图。

SQL> !echo $ORACLE_SID


prod1a

SQL> spool /tmp/catclust.log


SQL> @$ORACLE_HOME/rdbms/admin/catclust
...
...
...
SQL> spool off
SQL> shutdown immediate;

使用 CRS 注册 RAC 实例。


5k.使用

在节点 1 上:

[oracle@salmon1]$ srvctl add database -d prod1 -o $ORACLE_HOME


[oracle@salmon1]$ srvctl add instance -d prod1 -i prod1a -n salmon1
[oracle@salmon1]$ srvctl add instance -d prod1 -i prod1b -n salmon2
[oracle@salmon1]$ srvctl start instance -d prod1 -i prod1a

为第二个
5l.为第二个 RAC 实例创建重做日志。
建重做日志。

SQL> connect sys/sys@prod1a as sysdba


Connected.
SQL> alter database add logfile thread 2 group 3 size 100M;
SQL> alter database add logfile thread 2 group 4 size 100M;
SQL> select group#, member from v$logfile;

GROUP# MEMBER
--------------- ----------------------------------------
1 +DG1/prod1/onlinelog/group_1.265.3
1 +DG2/prod1/onlinelog/group_1.257.1
2 +DG1/prod1/onlinelog/group_2.266.3
2 +DG2/prod1/onlinelog/group_2.258.1
3 +DG1/prod1/onlinelog/group_3.268.1
3 +DG2/prod1/onlinelog/group_3.259.1
4 +DG1/prod1/onlinelog/group_4.269.1
4 +DG2/prod1/onlinelog/group_4.260.1

8 rows selected.

SQL> alter database enable thread 2;

Database altered.

为第二个
5m.为第二个 RAC 实例创建重做表空间
建重做表空间。

SQL> create undo tablespace UNDOTBS2 datafile size 200M;

SQL> select tablespace_name, file_name from dba_data_files


2 where tablespace_name=a€?UNDOTBS2a€?;

TABLESPACE FILE_NAME
--------------------- --------------------------------------
UNDOTBS2 +DG1/prod1/datafile/undotbs2.270.1

启动第二
启动第二个
5n.启动第二个 RAC 实例。

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 13 of 14

[oracle@salmon1]$ srvctl start instance -d prod1 -i prod1b


[oracle@salmon1]$ crs_stat -t
Name Type Target State Host
-----------------------------------------------------------------------
ora....1a.inst application ONLINE ONLINE salmon1
ora....1b.inst application ONLINE ONLINE salmon2
ora.prod1.db application ONLINE ONLINE salmon1
ora....M1A.asm application ONLINE ONLINE salmon1
ora....M1B.asm application ONLINE ONLINE salmon2
ora....N1.lsnr application ONLINE ONLINE salmon1
ora....on1.gsd application ONLINE ONLINE salmon1
ora....on1.ons application ONLINE ONLINE salmon1
ora....on1.vip application ONLINE ONLINE salmon1
ora....N2.lsnr application ONLINE ONLINE salmon2
ora....on2.gsd application ONLINE ONLINE salmon2
ora....on2.ons application ONLINE ONLINE salmon2
ora....on2.vip application ONLINE ONLINE salmon2
[oracle@salmon1]$ srvctl status database -d prod1
Instance prod1a is running on node salmon1
Instance prod1b is running on node salmon2
[oracle@salmon1]$ srvctl stop database -d prod1
[oracle@salmon1]$ srvctl start database -d prod1
[oracle@salmon1]$ sqlplus system/system@prod1

SQL*Plus:Release 10.1.0.3.0 - Production on Fri May 27 05:53:21 2005

Copyright (c) 1982, 2004, Oracle.保留所有权利。

Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SQL> select instance_number instance#, instance_name, host_name, status


2 from gv$instance;

INSTANCE# INSTANCE_NAME HOST_NAME STATUS


----------------- ----------------- ------------------------- -----------
1 prod1a salmon1.dbsconsult.com OPEN
2 prod1b salmon2.dbsconsult.com OPEN

恭喜您!您已经将单一实例数据库转换为 RAC!

第 6 步:测试透明
测试透明应
透明应用程序故障切换
用程序故障切换 (TAF)
Oracle TAF 中的故障切换机制使任何失败的数据库连接能够重新连接到集群中的其他节点。故障切换对用户是透明的。Oracle 在故障切换实例上重新执
行查询并继续向用户显示余下的结果。

为示范 TAF 选件的故障切换机制,请连接到两个不同的数据库会话并执行以下步骤:

使用 PROD1 服务连接第一
6a.使用 务连接第一个会
接第一个会话
个会话。

如果 failover_type 和 failover_mode 返回的输出为“NONE”,则验证是否在 tnsnames.ora 中正确配置了 PROD1 服务。

SQL> connect system/system@prod1 as sysdba


Connected.

SQL> select instance_number instance#, instance_name, host_name, status


2 from v$instance;

INSTANCE# INSTANCE_NAME HOST_NAME STATUS


----------------- -------------- ------------------------- ----------------
1 prod1a salmon1.dbsconsult.com OPEN

SQL> select failover_type, failover_method, failed_over


2 from v$session where username='SYSTEM';

FAILOVER_TYPE FAILOVER_MODE FAILED_OVER


------------------------- -------------------- ----------------------
SELECT BASIC NO

从其他会
6b.从其他会话中关闭该实例
关闭该实例。

在 prod1a 实例上以 sys 用户的身份连接,并关闭该实例。

SQL> connect sys/sys@prod1a as sysdba


Connected.

SQL> select instance_number instance#, instance_name, host_name, status


2 from v$instance;

INSTANCE# INSTANCE_NAME HOST_NAME STATUS


----------------- ---------------- ------------------------ ----------------
1 prod1a salmon1.dbsconsult.com OPEN

SQL> shutdown abort;


ORACLE instance shut down.

验证该会
验证该会话是否已经
6c.验证该 是否已经完成故障切换
完成故障切换。

从第 6 步中的同一会话执行以下查询以验证该会话是否故障切换到其他实例。

SQL> select instance_number instance#, instance_name, host_name, status


2 from v$instance;

INSTANCE# INSTANCE_NAME HOST_NAME STATUS


----------------- ---------------- ------------------------ ----------------
2 prod1b salmon2.dbsconsult.com OPEN

SQL> select failover_type, failover_method, failed_over


2 from v$session where username='SYSTEM';

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24
在 RHEL3 上将单一实例数据库转换为 Oracle RAC 10g Page 14 of 14

FAILOVER_TYPE FAILOVER_MODE FAILED_OVER


----------------- -------------- ----------------------
SELECT BASIC YES

结论

了解了 RAC 体系结构并进行恰当规划后,从单一实例数据库转移到 RAC 配置并不一定很复杂。ASM 和 RAC 相互支持以提供更高级别的可用性、可


伸缩性和业务连续性。衷心希望本指南提供了清晰、准确的转换执行方法。

Vincent Chan (vkchan99@yahoo.com) 是 MSD Inc.的一位高级顾问。他是一位 Oracle 认证高级数据库管理员,有九年的各种客户端设计和 Oracle 解


决方案实施经验。

E-mail this page

Printer View

版权所有 © 2008,Oracle。保留所有权利。 关于 Oracle | 联系我们 | RSS | 网站地图 | 法律声明和使用条款 | 隐私声明


由 Oracle Application Server Portal 管理并存储

http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html 2008-3-24

You might also like