Coundy

   漫步风中,倾听自己的脚步,在自我沉浸中,找寻逝去的灵魂

posts - 27,comments - 2,trackbacks - 0

作者:Vincent Chan  转载:http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html

对于那些具有有限操作经验的用户而言,实施 Oracle RAC 10g 的前景令人生畏。但事情并不一定如此。

本指南将提供明确的步骤,引导您在 RHEL3 上将单一实例 Oracle 10g 数据库转换为 Oracle RAC。我将 Oracle 自动存储管理 (ASM)(一个构建到 Oracle 数据库内核中的集成文件系统和卷管理解决方案)用于 RAC 数据库存储,因为它不但提供了存储可靠性和高性能,还简化了数据库存储管理。

总的说来,有多种方法可以将数据库转换为 RAC。如果数据库比较小,则可以考虑在 ASM 上安装一个新的 RAC 数据库,并将当前数据库中的数据导出/导入到 RAC 数据库。对于较大的数据库,首选的方法是使用 RMAN 将数据库文件移植到 ASM。这里所要说明的方法是一个分为两个阶段的方法:首先,将数据移植到 ASM,然后将单一实例数据库转换为 RAC。如果您是对 ASM 不了解,建议您采用此移植方法,先熟悉 ASM,然后再进一步运用 ASM 和 RAC。(有关 Oracle ASM 的更多信息,请访问 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
数据库文件存储
salmon1prod1prod1/u01/app/oracleext3

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

主机名
实例名
数据库名
$ORACLE_BASE
数据库文件存储
OCR 和 CRS Voting Disk
salmon1prod1aprod1/u01/app/oracleASM原始
salmon2prod1bprod1/u01/app/oracleASM原始

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

第 1 步:准备安装

1a.检验软件程序包版本。

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

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

1b.检验内核参数。

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

[root@salmon1]# sysctl -a | grep shm
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 2147483648
[root@salmon1]# sysctl -a | grep sem
kernel.sem = 250        32000   100     128
[root@salmon1]# sysctl -a | grep -i ip_local
net.ipv4.ip_local_port_range = 1024     65000
[root@salmon1]# sysctl -a | grep -i file-max
fs.file-max = 65536
1c.创建 Oracle Base 目录、oracle 用户和组。

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

[oracle@salmon1]$ hostname
salmon1.dbsconsult.com
[oracle@salmon1]$ 
[oracle@salmon1]$ id
uid=500(oracle) gid=500(dba) groups=500(dba),501(oinstall)
[oracle@salmon1]$ 
[oracle@salmon1]$ echo $ORACLE_BASE
/u01/app/oracle
1d.编辑 oracle 用户环境文件。
[oracle@salmon1]$ more .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

export PATH=$PATH:$HOME/bin
export ORACLE_SID=prod1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.1.0
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
umask 022
1e.配置 oracle 用户 shell 限制。
[root@salmon1]# more /etc/security/limits.conf
*                soft    nproc           2047
*                hard   nproc           16384
*                soft    nofile           1024
*                hard   nofile           65536
[root@salmon1]# grep pam_limits /etc/pam.d/login
session    required     /lib/security/pam_limits.so				 
1f.配置公共网络和专用网络。

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

[root@salmon1]# redhat-config-network
主机名
IP 地址
类型
salmon1.dbsconsult.com192.168.0.184公共 (eth0)
salmon2.dbsconsult.com192.168.0.185公共 (eth0)
salmon1.dbsconsult.com10.10.10.84专用 (eth1)
salmon2.dbsconsult.com10.10.10.85专用 (eth1)
salmon1-vip.dbsconsult.com192.168.0.186虚拟
salmon2-vip.dbsconsult.com192.168.0.187虚拟

1g.编辑 the /etc/hosts 文件。

127.0.0.1        localhost.localdomain   localhost
10.10.10.84     sallocal1.dbsconsult.com         sallocal1
10.10.10.85     sallocal2.dbsconsult.com         sallocal2
192.168.0.184   salmon1.dbsconsult.com           salmon1
192.168.0.185   salmon2.dbsconsult.com           salmon2
192.168.0.186   salmon1-vip.dbsconsult.com       salmon1-vip
192.168.0.187   salmon2-vip.dbsconsult.com       salmon2-vip
验证主机名和配置的网络接口设备。
[root@salmon1]# hostname
salmon1.dbsconsult.com
[root@salmon1]# /sbin/ifconfig

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

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

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

[oracle@salmon1]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Created directory '/home/oracle/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
5d:8c:42:97:eb:42:ae:52:52:e9:59:20:2a:d3:6f:59 oracle@salmon1.dbsconsult.com
在每个节点上测试连接。验证当您再次运行以下命令时,系统是否不提示您输入口令。
ssh salmon1 date
ssh salmon2 date 
ssh sallocal1 date
ssh sallocal2 date
ssh salmon1.dbsconsult.com date
ssh salmon2.dbsconsult.com date
ssh sallocal1.dbsconsult.com date
ssh sallocal2.dbsconsult.com date
1i.配置 hangcheck timer 内核模块。

hangcheck timer 内核模块监控系统的运行情况,并重新启动出现故障的 RAC 节点。它使用两个参数,即 hangcheck_tick(定义系统检查频率)和 hangcheck_margin(定义在重置 RAC 节点前的最大挂起延时)来确定节点是否出现故障。

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

[root@salmon1]# grep insmod /etc/rc.d/rc.local 
insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
1j.重新创建数据库控制文件。

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

MAXLOGFILES
MAXLOGMEMBERS
MAXDATAFILES
MAXINSTANCES
MAXLOGHISTORY
1k.调整数据库缓冲区高速缓存。

从单一实例数据库转换到 RAC 时,数据库缓冲区高速缓存需要额外的内存。在 RAC 中,为每个块缓冲区高速缓存中的全局高速缓存服务 (GCS) 分配空间。所需的额外内存量取决于应用程序访问数据的方式,即同一个块是否高速缓存到多个实例中。

在演示实验中,我观察到缓冲区高速缓存的使用率增加了大约 8%。使用缓冲区高速缓存顾问确定最佳的缓冲区高速缓存大小,或切换到 Oracle 自动共享内存管理 (ASMM) 让 Oracle 进行控制。


第 2 步:将数据库移植到 ASM

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

 
[root@salmon1]# ps a€“ef | grep ocssd.bin | wc a€“l 
      17
2a.下载 ASM RPM.

从 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

2b.安装 ASM RPM。

以 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
2c.配置 ASM。

以 root 用户的身份配置 ASMLib。

[root@salmon1]# /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  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    
2d.创建 ASM 磁盘。

以 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  ]
2e.创建 ASM init.ora。

在第一个节点上,使用以下参数在 $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
2f.创建 ASM 口令文件

使用 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
2h.创建 ASM 实例 spfile。

在 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.
2k.将数据文件移植到 ASM

必须使用 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 /

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         
2m.将重做日志移植到 ASM。

删除现有的重做日志,并在 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
---------------     ----------------------------------
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   
2n.从 spfile 文件创建 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) 软件

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

3a.创建 OCR 和 Voting Disk。

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

文件
原始设备
磁盘分区
文件名
大小 (MB)
OCR/dev/raw/raw11/dev/sde1/u02/oradata/prod1/ocr100
Voting Disk/dev/raw/raw12/dev/sde2/u02/oradata/prod1/vdisk20
[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
3b.安装 CRS 软件。

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

[oracle@salmon1]$ export ORACLE_BASE=/u01/app/oracle
[oracle@salmon1]$ /mnt/cdrom/runInstaller
  1. 欢迎 - 单击“Next”。
  2. 指定文件位置:
    1. 名称:OraCr10g_home1
    2. 路径:/u01/app/oracle/product/10.1.0/crs_1
  3. 语言选择 - 英语
  4. 集群配置:
    1. 集群名称:crs
    2. 公共节点名称:salmon1,专用节点名称:sallocal1
    3. 公共节点名称:salmon2,专用节点名称:sallocal2
  5. 专用互连实施:
    1. 接口名称:eth0,子网:192.168.0.0,接口类型:公共
    2. 接口名称:eth1,子网:10.10.10.0,接口类型:专用
  6. Oracle 集群注册表:
    1. 指定 OCR 位置:/u02/oradata/prod1/ocr
  7. Voting Disk:
    1. 输入 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 软件

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

在节点 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
4b.安装 RAC 软件。

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

[oracle@salmon1]$ .~/.bash_profile
[oracle@salmon1]$ /mnt/cdrom/runInstaller
  1. 欢迎 - 单击“Next”。
  2. 指定文件位置:
    1. 名称:OraDB10g_home1
    2. 路径:/u01/app/oracle/product/10.1.0/db_1
  3. 指定硬件安装模式:
    1. 选择“Cluster Installation”
    2. 单击“Select All”
  4. 选择安装模式:
    1. 选择“Enterprise Edition”
  5. 特定产品必要条件检查:
    1. 所有检查均通过后,才可继续下一步。忽略 openmotif-2.1.30-11 警告。
  6. 选择数据库配置:
    1. 选择“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:网络接口:
    1. 选择“eth0”
  11. VIP 配置帮助, 2 of 2:集群节点的虚拟 IP:
    1. 节点名称:salmon1
    2. IP 假名:salmon1-vip
    3. IP 地址: 192.168.0.186
    4. 子网掩码: 255.255.255.0
    5. 节点名称:salmon2
    6. IP 假名:salmon2-vip
    7. IP 地址: 192.168.0.187
    8. 子网掩码: 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”。
4c.配置 Oracle Listener。

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

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

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 步:后续安装

5a.在第一个节点上重新定位 ASM 实例文件。

将 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
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;
5e.使用 CRS 注册 ASM 实例。

为实现更高的可用性,请在 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
5f.为两个 RAC 实例创建口令文件。

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

5g.在 pfile 中添加 RAC 特定参数。

修改在第 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'
5h.修改两个实例的 init.ora。

在节点 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'
5i.将数据库 spfile 移植到 ASM。
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
5j.创建 RAC 数据词典视图。

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

SQL> !echo $ORACLE_SID
prod1a

SQL> spool /tmp/catclust.log
SQL> @$ORACLE_HOME/rdbms/admin/catclust
...
...
...
SQL> spool off
SQL> shutdown immediate;
5k.使用 CRS 注册 RAC 实例。

在节点 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 实例。
[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 选件的故障切换机制,请连接到两个不同的数据库会话并执行以下步骤:

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

如果 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';
 
FAILOVER_TYPE      FAILOVER_MODE   FAILED_OVER
-----------------  --------------  ----------------------
SELECT             BASIC            YES


结论

了解了 RAC 体系结构并进行恰当规划后,从单一实例数据库转移到 RAC 配置并不一定很复杂。ASM 和 RAC 相互支持以提供更高级别的可用性、可伸缩性和业务连续性。衷心希望本指南提供了清晰、准确的转换执行方法。

posted on 2006-11-10 15:25 Coundy 阅读(343) 评论(0)  编辑  收藏 所属分类: Linux

只有注册用户登录后才能发表评论。


网站导航: