本次数据库采用 10G RAC 集群,由于 10G 提供了 Oracle 集群文件系统 (OCFS) 、自动存储管理器 (ASM) 、原始设备这三种共享磁盘方式用于 RAC 的安装,因此我们准备计划先采用 ASM 安装 RAC 并进行建库。下面的计划主要是 针对 ASM 方式 的部署 RAC
一、 硬件环境描述
1、 节点 1 与节点 2 硬件
2、 集群拓扑
二、 前期准备
1、 准备 ORACLE 的安装配置文件
.bash_profile
/etc/sysctl.conf
2、 准备安装数据库 +ASM 所需要的 ASMLIB
oracleasm-2.6.9-42.ELsmp-2.0.3-1.i686
oracleasmlib-2.0.2-1.i386
oracleasm-support-2.0.3-1.i386
三、 RAC 系统规划
1 、节点 1 、节点 2 规划、注册文件规划 (ocr) 、表决磁盘规划 (VOTING DISK) 、
2 、操作系统安装规 划
四、 根据规划安装操作系统
1、 在节点 1 安装操作系统
2、 在节点 2 安装操作系统
3、 配置时钟同步
五、 ORACLE RAC 安装环 境检查与准备
1、 检查安装 ORACLE 所需要的操作系统 RPM 包
2、 创建 ORACLE 用户与 DBA 组
3、 修改系统内核参数 ./etc/sysctl.conf
4、 设置 ORACLE 用户环境变量(修改 ORACLE 的 .bash_profile )
5、 配置 /etc/hosts 文件
6、 配置 hangcheck_timer 内核
7、 配置 SSH
8、 根据规划共享存储系统
9、 调整配置错误
六、 ASMlib 安装与检查
1、 安装 ASMlib
2、 配置 ASM 磁盘
七、 安装 Clusterware 与 ORACLE 数据库系统
1、 安装 CRS 软件
2、 安装 ORACLE 数据库
八、 DBCA 以 ASM 创建数据库
九、 测试 RAC
十、 数据库部署
十 一、 参考文献
若无特别说明,“ $ ”提示符均表示在 oracle 用户下执行,“ # ”提示符均表示在 root 用户下执行
一、 硬件环境描述
1、 硬件说明
服务器名
项目名称 |
服务器 1 (工作机) |
服务器 2 (备份机) |
|
|
硬件型号 |
DELL 6850 |
DELL 6850 |
|
|
CPU |
频率 |
3.0 |
3.0 |
|
数量 |
4 |
4 |
|
|
物理内存 |
32G |
32G |
|
|
磁盘阵列柜 |
型号 |
EMC CX 200 |
|
|
每硬盘容量 |
300GB |
|
||
阵列缓存 |
|
|
||
硬盘数量 |
|
|
||
RAID 名称 |
RAID 5 |
2000G |
2、 RAC 体系
二、 前期准备
1、 准备 ORACLE 的安装配置文件
.bash_profile
/etc/sysctl.conf
2、 准备安装数据库 +ASM 所需要的 ASMLIB, 注意这个 ASMLIB 的版本要跟你操作系统的内核相匹配
验证内核 版本如下命令:
# uname -r
[oracle@dbserver1 ~]$ uname -r Linux dbserver1 2.6.9-42.ELsmp [oracle@dbserver1 ~]$ |
我们 这里内核是 2.6.9-42.ELsmp 、 i386 ( 32 位)
因此 下载以下 ASMLIB :
oracleasm-2.6.9-42.ELsmp-2.0.3-1.i686
oracleasmlib-2.0.2-1.i386
oracleasm-support-2.0.3-1.i386
提示:如果是单处理器系统需要下载 EL 的 ASMLIB
三、 RAC 系统相关规划
1 、操作系统安装规 划
服务器名 项 目名称 |
RAC 节点 1 |
RAC 节点 2 |
||
硬件型号 |
|
|
||
操作系统 |
Redhat as 4.0 u4 ( 32 位) |
Redhat as 4.0 u4 ( 32 位) |
||
服务器主机名 |
dbserver1 |
dbserver2 |
||
IP 地址 ( ( eth0 ) ) |
135.233.9.101 |
135.233.9.102 |
||
语言环境 |
中文 / 英文 |
中文 / 英文 |
||
域名服务方式 |
无 |
无 |
||
时区 |
中国 |
中国 |
||
安装方式 |
安装全部安装包 |
安装全部安装包 |
||
内置硬盘 |
容量 |
146G |
146G |
|
数量 |
2(RAID1) |
2(RAID1) |
||
系统分区 |
物理路径 |
|
|
|
/ |
30G |
30G |
||
Swap |
35G |
35G |
||
/home |
30G |
30G |
||
/tmp |
5G |
5G |
||
/usr |
20G |
20G |
||
/opt |
30G |
30G |
||
系统用户 |
|
Root Oracle |
Root Oracle |
|
磁盘阵列柜 |
型号 |
|
||
每硬盘容量 |
500G |
|||
总容量 |
2T |
|||
RAID 名称 |
RAID 5 |
|||
磁盘分区 |
OCR (oracle 集群注册表 ) |
/dev/raw/raw1 /dev/sdb1 500M (主分 区) /dev/raw/raw2 /dev/sdb2 500M (主分 区) |
||
表决磁盘 ( voting disk ) |
/dev/raw/raw5 /dev/sdb5 500M /dev/raw/raw6 /dev/sdb6 500M /dev/raw/raw7 /dev/sdb7 500M |
|||
ASM |
/dev/sdb8 950G /dev/sdb9 950G |
|||
数据库备份 |
/dev/sdb10 (全部) 120G |
|||
备份 mount 点 |
/oradata_backup /dev/sdb10 |
|||
|
|
|
||
2 、节点 1 、节点 2 上 ORACLE 安装规划、注册表规划 (OCR) 、表决磁盘规划 (VOTING DISK) 、
服务器名
项目名称 |
服务器 1 (工作机) |
服务器 2 (备份机) |
操作系统 |
Redhat as 4.0 u14 ( 32 位 x86 ) |
Redhat as 4.0 u4 ( 32 位 x86 ) |
服务器主机名 |
dbserver1 |
dbserver2 |
公共IP 地址(eth0 ) |
135.233.9.101 |
135.233.9.102 |
虚拟IP 地址(eth0 ) |
135.233.9.201 |
135.233.9.202 |
私有IP 地址(eth1 ) |
10.10.10.1 |
10.10.10.2 |
ORACLE RAC SID |
oradb1 |
oradb2 |
集群实例名称 |
oradb |
|
OCR (oracle 集群注册表) |
/dev/raw/raw1 /dev/sdb1 500M /dev/raw/raw2 /dev/sdb2 500M |
|
表决磁盘 (voting disk ) |
/dev/raw/raw5 /dev/sdb5 500M /dev/raw/raw6 /dev/sdb6 500M /dev/raw/raw7 /dev/sdb7 500M |
|
ASM |
/dev/sdb8 950G VOL1 /dev/sdb9 950G VOL2 |
|
数据库备份 |
/dev/sdb10 (全部 mkfs.ext3 /dev/sdb10 ) 120G |
|
数据库版本 |
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 ( 32 位) |
|
数据库BASE 目录 |
/home/oracle |
|
数据库HOME 目录 |
/home/oracle/product/10.2.0/db |
|
数据库监听端口 |
1521 |
|
数据库字符集 |
simplifed Chinese.ZHS16GBK |
|
数据库系统帐号与初始密码 |
Sys/oracle System/oracle |
|
数据库恢复区大小 |
4G |
|
数据库实例建库方式 |
ASM |
|
数据库块大小 |
8192byte |
|
数据库数据空间大小 |
|
四、 根据规划安装操作系统,并配置 时钟同步
1、 在节点 1 安装操作系统
2、 在节点 2 安装操作系统
提示:选择全部安装包方式,这 样就不用给系统打那烦人的补丁包了,不过所需要的磁盘空间 7G 左右
3、 配置时钟同步
在一台节点服务器上启动时钟服务 器服务,在另外一台节点服务器上使用时钟同步命令如: rdate –s IP ,然后在这台节点服务器,通过做调度,来定时同步两台服务器时钟。
提示:建议 RAC 可以连接到互联网上,以便互联网上的时钟服务器,如果没有接
入互联网的条件也可以让其余节 点向某一个节点做时钟同步,因为 RAC 不能容
忍节点间时钟不同步,否则 RAC 会 Down 掉 !
在这里我们如下操作:
A 、在 125.233.9.101 节点上开启时钟服务,“ applications( 应用程序 ) ” -----> “ system settings( 系统设置 ) ” -----> “ server settings( 服务设置 ) ” -----> “ services( 服务 ) ”,如图
B 、在出来的 ”service configuration( 服务配置 )” 中,选中“ time 、 time-udp ”,然后点击窗口工具栏中的“ save( 保存 ) ”按钮,如图
C 、在 135.233.9.102 节点上创建一个 shell 文件,包含如下内容 rdate –s 135.233.9.101
# vi /rdate
在 vi 编辑器中按 ” i” 转换为插入模式,然后输入“ rdate –s 135.233.9.101 ”,再按 ”esc” 键,退出插入模式,最后 ”shift”+” : ” 后再输入 ”wq ! ” ,存盘退出。
给于 这个 shell 于执行权限
# chmod 755 rdate
D 、在 135.233.9.102 节点上,把该 shell 加入到调度中,让系统每 6 小时向 135.233.9.101 节点同步时钟,这里可以使用命令 ”crontab” ,也可以使用图形界面在“ applications( 应用程序 ) ” -----> “ system tools( 系统设置 ) ” -----> “ task scheduler( 任务计划 ) ”。命令如下
# crontab –e
同样 在编辑器里输入如下(我这里是每两个小时同步一次)
0 1,4,8,13,17,20 * * * /rdate
五、 ORACLE RAC 安装环境检查与准备
1、 在每个节点 上创建 ORACLE 用户与 DBA 组
2、 groupadd –g 1001 dba
3、 groupadd –g 1002 oinstall
4、 useradd –u 1001 –g oinstall –G dba oracle
5、 passwd oracle
使用图形界面创建 DBA 组和 ORACLE 用户,并手工指定他们的 ID ,注意在这里,每个节点的 oracle 用户 ID , DBA 组 ID 必须一致,其他使用默认值,同时创建完毕后在每个节点执行如下命令
#chown –R oracle:dba /home/oracle
6、 修改每个节点 系统内核参数 ./etc/sysctl.conf ,
#vi /etc/sysctl.con f
然后加入如下内容
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
4、 设置每个节点 ORACLE 用户环境变量(修改 ORACLE 的 .bash_profile ),该文件见附件
$vi .bash_profile
然后加入如下内容
umask=022
# User specific environment and startup programs
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db
export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs
# Each RAC node must have a unique ORACLE_SID.(i.e. dbserver1, dbserver2,...)
export ORACLE_SID=oradb1
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/l ocal/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/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
注意:在节点 dbserver2 上, ORACLE_SID 应该变为 oradb2
5、 配置每个节点 的 /etc/hosts 文件
#vi /etc/hosts
然后修改 里面的内容为如下
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
135.233.9.101 dbserver1
135.233.9.201 db-vip1
135.233.9.102 dbserver2
135.233.9.202 db-vip2
10.10.10.1 db-priv1
10.10.10.2 db-priv2
注意 : 确保 在每个节点上 /etc/hosts 文件的回送地址中不包含节点名 ( dbserver 1 或 dbserver 2 ) 。如 果机器名出现在回送地址条目中,如下所示:
127.0.0.1 JMRAC1 localhost.localdomain localhost
需要将其如下删除:
127.0.0.1 localhost.localdomain localhost
6、 配置每个节点的 hangcheck_timer 内核:
# find /lib/modules -name "hangcheck-timer.ko"
#vi /etc/modprobe.conf
加入 如下内容
modprobe hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
设置 为自动启动 hangcheck-timer
/sbin/modprobe hangcheck_timer
检查 是否成功启动
#grep hangcheck /var/log/messages |tail -2
7、 配置 SSH
l SSH 方式
以 oracle 用户身份执行,在所有节点上做如下配置以生成 SSH 密钥。
$ mkdir ~/.ssh
$ chmod 755 ~/.ssh
$ /usr/bin/ssh-keygen -t rsa
$ /usr/bin/ssh-keygen -t dsa
$ touch ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ cp ~/.ssh/authorized_keys ~/.ssh/jmrac1.authorized_keys
将 dbserver1.authorized_keys 复制到 dbserver2 上
在 dbserver2 上,将 dbserver1.authorized_keys 导入 authorized_keys
$ cat ~/.ssh/dbserver1.authorized_keys >> ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
将上述步骤在节点 2 上再执行一次,注意将 dbserver 1 和 dbserver 2 互换!
建立 SSH 信任关系 ( 请注意,用户等效性仅为当前会话建立。 如果您切换到其他会话或注销并重新登录,则必须再次运行 ssh-agent 和 ssh-add 才能重新建立用户等效性 )
在每个节点上执行
$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
在 每个节点 上执行如下命令以测试连通性,并建立 SSH 信任关系
$ ssh dbserver 1 date
$ ssh dbserver 2 date
Sun may 27 19:07:19 CDT 2007
测试每个方向上所有服务器的连通性是非常重要的。 这样会确保当 OUI 在 CRS 和 数据库软件安装期间试图复制文件时不会再出现类似以下的消息。 该消息只有在远程节点上第一次执行操作时才会出现,因此通过测试连通性,您不仅确保了远 程操作的正常运行,还完成了初始的安全密钥交换。
The authenticity of host 'ds2 (192.168.200.52)' can't be established.
RSA key fingerprint is 8f:a3:19:76:ca:4f:71:85:42:c2:7a:da:eb:53:76:85.
Are you sure you want to continue connecting (yes/no)? yes
用下述指令在 node1 上测试 ssh 互信任配置是否正确
在再每个节点上执行如下命令,应该直接显示相应的时间,而不会提示输入密码
$ ssh dbserver 1 date
$ ssh dbserver 2 date
8、 根据规划分区共享存储系统
先查看系统分区
#fdisk –l /dev/sdb
发现阵列柜,被加载在 /dev/sdb 上,在分区先要确保阵列柜上没有被分区,如有分 区,需要删除以前分区,然后在根据前面磁盘分区规划对磁盘阵列柜分区
#fdisk /dev/sdb
最后分区如下
[root@ dbserver 1 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 2035.7 GB, 146727239680 bytes 255 heads, 63 sectors/track, 17838 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 25 200781 83 Linux /dev/sdb2 26 50 200812+ 83 Linux /dev/sdb3 51 17838 142882110 5 Extended /dev/sdb5 51 63 104391 83 Linux /dev/sdb6 64 76 104391 83 Linux /dev/sdb7 77 89 104391 83 Linux /dev/sdb8 90 5561 43953808+ 83 Linux /dev/sdb9 5562 11033 43953808+ 83 Linux /dev/sdb10 11034 17838 54661131 83 Linux [root@ dbserver 1 ~]# |
该分区命令只在一个节点上执行, 另外一个节点上执行分区同步命令
#partprobe
提示:关于分区命令 fdisk 的详细说明,参考其他 linux 命令手册
由于我们把 oracle 的 OCR(oracle 集群注册表 ) 、 表决磁盘( voting disk )安装在裸 设备上,对于裸设备要使用它,需要编辑 /etc/sysconfig/rawdevices 文件,将裸 设备添加到系统中,然后再为裸设备设定属组信息以及权限信息。
把下面的内容添加到 /etc/sysconfig/rawdevices 文件中
#OCR
/dev/raw/raw1 /dev/sdb1
/dev/raw/raw2 /dev/sdb2
#OCR
/dev/raw/raw5 /dev/sdb5
/dev/raw/raw6 /dev/sdb6
/dev/raw/raw7 /dev/sdb7
注意:在 2.6 内核的 Red Hat Linux 上,当系统重启后,裸设备的属组信息
将被还原为系统默认值( root : disk )。为了使得裸设备属组信息可以被保留,你
要在 /etc/rc.d/rc.local 中强制更新裸设备的属组信息,即在文件中加入下述内容:
chown root:dba /dev/raw/raw1
chown root:dba /dev/raw/raw2
chmod 660 /dev/raw/raw1
chmod 660 /dev/raw/raw2
chown oracle:dba /dev/raw/raw5
chown oracle:dba /dev/raw/raw6
chown oracle:dba /dev/raw/raw7
chmod 644 /dev/raw/raw5
chmod 644 /dev/raw/raw6
chmod 644 /dev/raw/raw7
配置完 毕后,务必重新启动两台服务器
9、 调整配置错误
六、 ASMlib 安装与检查
1、 在每个节点安装 ASMlib
# rpm -Uvh /
>oracleasm-2.6.9-42.ELsmp-2.0.3-1.i686
>oracleasmlib-2.0.2-1.i386
>oracleasm-support-2.0.3-1.i386
Preparing... ######################################## [100%]
1:oracleasm-support ######################################## [ 33%]
2:oracleasm-2.4.9-e-smp ##################################### [ 66%]
Linking module oracleasm.o into the module path [ OK ]
3:oracleasmlib ###################################### [100%]
2、 在 每个节点配置 ASMLib
使用 ASMLib 之前,必须运行配置脚本来准备驱动程序。 以 root 用户身份在每个集群主机上运行以下命令并回应提示,如下例所示。
# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
这 将配置 Oracle ASM 库驱动程序的启动时 属性。以下问题将确定在启动时是否加载驱动程序以及它将拥有的权限。当前值将显示在方括号( “[]” )中。按 <ENTER> 而不键入回应将保留该当前值。按 Ctrl-C 将终止。
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 [ OK ]
现 在,如下所示启用 ASMLib 驱 动程序。
# /etc/init.d/oracleasm enable
Writing Oracle ASM library driver configuration [ OK ]
Scanning system for ASM disks [ OK ]
3、 为 ASM 配置磁盘
接 下来告诉 ASMLib 驱动程序要使用哪些磁盘。 请注意,这些磁盘是不包含任何内容的空磁盘。
通 过以 root 用户身份运行以下命令来标记由 ASMLib 使用的磁盘。 仅从一个集群主机上执行此操作。
/etc/init.d/oracleasm createdisk DISK_NAME device_name
提 示: 以大写字母输入 DISK_NAME 。当前版本中有一个错误,即如果使用小写字母, ASM 实例将无法识别磁盘。
# /etc/init.d/oracleasm createdisk VOL1 /dev/sd8
Marking disk "/dev/sdb8" as an ASM disk [ OK ]
# /etc/init.d/oracleasm createdisk VOL2 /dev/sd9
Marking disk "/dev/sdb9" as an ASM disk [ OK ]
.
以 下示例演示了如何列出标记为由 ASMLib 使 用的所有磁盘。
# /etc/init.d/oracleasm listdisks
VOL1
VOL2.
.
注意 在所有集群其他节点主机上,只需要以 root 用户身份运行以下命令,扫描所配置的 ASMLib 磁盘:
#/etc/init.d/oracleasm scandisks
七、 安装 Clusterware 与 ORACLE 数据库系统
把 CRS 与数据库软件拷贝到服务器上,再安装,注意,在安装前先建立用户等效性 , 如 下
#xhost +
#su – oracle
$export DISPLAY=:0.0
$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
1、 安装 CRS 软件
$./runInstaller
单击“下一步”
修改安装组为“ dba ”,然后单击“下一步”
修改 crs 的安装路径与 .bash_profile 中 crs 设置的路径一致。然后单击“下一步”
单击“下一步”
提示:在这里如果环境设置的不正确,或者硬件配置达不到要求,检 测不会通过,
但是对于硬件配置,我们可以选择通过验证
上图中只显示了一台服务器节点, 验证该节点信息是否和 /etc/hosts 中的内容一致
同时把节点 dbserver2 添加到集群配置中,最后如下
然后单击“下一步”
单击“编辑”按钮,将 eth0 网卡的网段设为“公共”,然后点击“确定” ( 默认 eth0 是“公共” )
以上这步要确定好是哪张网卡提供 公共对外服务,哪张网卡提供心跳检测私有服务,千万不能弄错,确定好后点击“下一步”
指定 OCR 的位置(前面已经设置好的)。然后单击“下一步”
提示:这里可以选择正常冗余或外部冗余,效果一样,正常冗余提供了一个 OCR 的镜像位置,而外部冗余没有提供 OCR 镜像,只需要 OCR 位置就可以,由于前期我们在规划的时候就规划了 OCR 镜像,因此我们这里选择正常冗余,下面表决磁盘的配置也是一样
指定表决磁盘的位置,单击“下一步”
单击安装
注 意当安装到后面出现如下提示时,先不要点击“确定 ”
此时安装向导让你在所有节点 上分别执行上述两 个脚本,先在安装 CRS 的计算机上执行上述两个脚本,注意 这两个脚本在 X-WINDOS 窗口下执行,以便能够启 动 VIPCA 。
此时,安装向导将给出安装总结,点击退出
在其他节点都执行完毕后,此时, 你需要回到节点 1 ,在此界面上单击确定
通过上面的检查后, Oracle Clusterware 安装结束!
2、 安装 ORACLE 数据库
$./runInataller
单击“下一步”
选择安装企业版数据库,单击“下一步”
确定安装路径,这里安装路径要和 .bash_profile 中的 ORACLE_HOME 值一致,单击“下一步”
选中集群内所有节点,单击“下一步”
单击“下一步”
选择仅安装数据库软件,单击“下一步”
单击安装
此时安装途中向导将提示先以 root 用户的身份在每个节点上执行上述脚本,执行完毕后在点击“确定”。执行效果如下:
以上安装完毕后,下面进行 ORACLE NET 配置
3 、配置 Oracle Net
以 oracle 用户的身份执行 netca ,配置 Oracle Net
选择集群配置,单击“下一步”
选择全部节点,单击“下一步”
选择监听程序配置,单击“下一步”
选择添加,单击“下一步”
使用默认的监听程序名—— LISTENER ,单击“下一步”
选择 TCP 协议,单击“下一步”
使用默认的监听端口—— 1521 ,单击“下一步”
选择否,单击“下一步”
单击“下一步”
选择命名方法配置,单击“下一步”
选择本地命名,单击“下一步”
单击“下一步”
单击完成,结束 Oracle Net 的配置
八、 DBCA 以 ASM 创建数据库
以 oracle 用户的身份运行 dbca ,建立集群数据库
选择 Oracle Real Application Cluster 数据库,单击下一 步
选择创建数据库,单击下一步
选中集群中的所有节点,单击下一 步
选择一般用途的数据库模版,单击 下一步
输入全局数据库名以及 SID ,在这里都输入“ oradb ” ,单击下一步
使用默认选项,然后单击下一步
输入数据库用户口令,先输入统一 口令“ sys ”,然后单击下一步
选择自动存储管理( ASM ),单击“下一步”
输入 ASM 实例的 SYS 用户口令,指定初始化参数文件的类型,单击“下一步”
安装向导将提示开始建立并启动 ASM 实例,单击确定
正在创建 ASM 实例
出来磁盘组选择,由于是新安装, 没有可用磁盘组,因此这里选择新建,创建 ASM 磁盘组
这里系统自动将我们前面准备的 ASM 磁盘显示出来,将冗余模式设为常规,选择前面创建的 VOL1 和 VOL2 磁盘,磁盘组命名为 dskgrp1 ,然后单击确定
注意:如果冗余模式选择“高”, 则要求三个裸设备构成一个磁盘组,由于我们这里是外接磁盘阵列柜,冗余模式可以选择为外部,那么可以只需要 1 个 ASM 磁盘组成一磁盘组
系统开始创建 ASM 磁盘组
已经创建好的磁盘组,就会显示在 可用磁盘组里,选中,然后单击下一步
使用默认值,然后单击下一步
如果不需要配置 Flashback ,单击下一步,否则需要指定快速恢复区,
这里设定 4G 的快速恢复区后单击下一步
选择安装示例方案,单击下一步
单击添加按钮,增加服务
输入服务名 oradb ,单击确定
将两个实例均设为首选, TAF 策略设为基本,单击下一步
调整内存大小到合适比例,字符集 选择 simplifed Chinese.ZHS16GBK ,单击下一步
调整重做日志大小均为 100M ,然后单击下一步
把“生成数据库创建脚本”选中, 然后单击完成
此时,安装向导将向你确认数据库 的配置信息,单击确定开始建立数据库
正在创建数据库
出现该界面表示数据库创建完毕, 单击退出,结束数据库创建
九、 配置客户端
要在客户端的 hosts 文件中写入相应的 RAC (内容与前面 etc/hosts 一致)地址,对于 Windows 系统,路径为 %system32%/drivers/etc/hosts 。编辑 hosts 文件,内容与前面 etc/hosts 一致
客户端配置 tnsnames.ora 文件,内容如下:
oradb =
(DESCRIPTION =
(ADDRESS_LIST =
(LOAD_BALANCE=ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.2)(PORT = 1521))
)
(CONNECT_DATA =
# 下面的部分应该 根据你安装 RAC 是配置进行相应的改动
(SERVICE_NAME = oradb)
(FAILOVER_MODE =
(TYPE=SELECT)
(MODE=BASIC)
(RETRY=3) // 重试 3 次
(DEALY=5) // 重试间隔 5 秒
)
)
)
说明: http:// node1:1158/em 即可登陆到 Database Control ,启动 Database Control 用如下命令 $emctl start dbconsole
十、 测试 RAC
以下 SQL 查询可以用来查看一个会话的故障切换类型、故障切换方法和是否发生了故障切换。在这个例子中自始至终 使用这个查询。
Sql>COLUMN instance_name FORMAT a13
Sql>COLUMN host_name FORMAT a9
Sql>COLUMN failover_method FORMAT a15
Sql>COLUMN failed_over FORMAT a11
Sql>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';
从 客户端计算机中,以 SYSTEM 用户登录集群化数据库:
C:/> sqlplus system/sys@oradb
Sql>COLUMN instance_name FORMAT a13
Sql>COLUMN host_name FORMAT a9
Sql>COLUMN failover_method FORMAT a15
Sql>COLUMN failed_over FORMAT a11
Sql>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
------------- --------- ------------- --------------- -----------
oradb1 oradb1
SELECT BASIC NO
不注销上面的 SQL*Plus 会话!
我们已经运行了上面的查询,现在到节点 jmrac1 上使 用 abort 选项来关闭该节点上的 oradb1 实例。要执行这一操作,我们可以使用 srvctl 命令行 实用程序,如下所示:
# su - oracle
$ srvctl status database -d jmdb
Instance oradb1 is running on node oradb1
Instance oradb2 is running on node oradb2
$ srvctl stop instance -d oradb -i oradb1 -o abort
$ srvctl status database -d oradb
Instance oradb1 is not running on node oradb1
Instance oradb2 is running on node oradb2
现在让我们返回到我们的 SQL 会 话,然后重新运行缓冲中的 SQL 语句:
Sql>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
------------- --------- ------------- --------------- -----------
oradb2 oradb2
SELECT BASIC YES
SQL> exit
从上面的演示中,可以看到上述会话现 在已经被通明切换到了 oradb2 的实例 oradb2 上
十 一、 集群基本命令
停止 Oracle RAC 10g 环境
第一步是停止 Oracle 实例。当此实例(和相关服务)关闭后,关闭 ASM 实例。 最后,关闭节点应用程序(虚拟 IP 、 GSD 、 TNS 监听器和 ONS )。
$ export ORACLE_SID=oradb1
$ emctl stop dbconsole
$ srvctl stop instance -d oradb -i oradb1
$ srvctl stop asm -n oradb1
$ srvctl stop nodeapps -n oradb1
启动 Oracle RAC 10g 环境
第一步是启动节点应用程序(虚拟 IP 、 GSD 、 TNS 监听器和 ONS )。当成功启 动节点应用程序后,启动 ASM 实例。最后,启动 Oracle 实例(和相关服务) 以及企业管理器数据库控制台。
$ export ORACLE_SID=oradb2
$ srvctl start nodeapps -n oradb1
$ srvctl start asm -n oradb1
$ srvctl start instance -d oradb -i oradb1
$ emctl start dbconsole
使用 SRVCTL 启动 / 停止所有实例
$ srvctl start database -d oradb1
$ srvctl stop database -d oradb1
所有实例和服务的状态
$ srvctl status database -d oradb
单个实例的状态
$ srvctl status instance -d oradb -i oradb2
在数据库全局命名服务的状态
$ srvctl status service -d oradb -s oradb
特定节点上节点应用程序的状态
$ srvctl status nodeapps -n oradb1
ASM 实例的状态
$ srvctl status asm -n oradb1
列出配置的所有数据库
$ srvctl config database
显示 RAC 数据库的配置
$ srvctl config database -d oradb
显示指定集群数据库的所有服务
$ srvctl config service -d oradb
显示节点应用程序的配置 - ( VIP 、 GSD 、 ONS 、监听器)
$ srvctl config nodeapps -n oradb 1 -a -g -s -l
VIP exists.:/vip- oradb 1/192.168.1.200/255.255.255.0/eth0:eth1
GSD exists.
ONS daemon exists.
Listener exists.
显示 ASM 实例的配置
$ srvctl config asm -n oradb1
+ASM1 /home/oracle/product/10.2.0/db_1