第一部分 安装
第1章 破冰之旅
本书是专门为Oracle Grid 11.2(或者11.2 RAC)准备的。
说明:Oracle Grid Infrastructure、Oracle Clusterware 是同一个软件的不同时期的名称,而Oracle RAC是这个软件支撑的解决方案,所以本书中我会混用这三个单词,但都是指的一个东西。另外,Oracle Grid Infrastructure这个名字有点太啰嗦,所以我会把它简化成Grid 或者GI,就是这样。
说实话,Oracle 10.2 RAC还是挺好用的,该有的功能都有了,而且也挺稳定的。像我管理的几个核心系统都是10.2版本的RAC,已经运行了五六年了,有限的几次故障,只有一次是因为修改了NTP服务的配置而造成RAC重启节点(这也是Oracleli 10.2一个已知的Bug),其他的都是由硬件问题引起的。所以,就我所处的环境而言,其实看不出升级到11.2的必要性。
但没办法,历史的轱辘款款前行,整个行业都在吆喝云计算、大数据、移动互联,我们就不能屈居人后,只能摇旗呐喊、迎头赶上,而且嗓门要更大、步子要更快,这才不会被时代的马车给抛下。
所以,我们必须要搞定Oracle Grid 11.2。
1.1 原料
要解决Grid,手头得有家伙事儿。就像庖丁解牛,除了庖丁和刀,还得有原材料——上千头牛来让他练手(今臣之刀……所解数千牛矣)。解决Grid当然得有环境了,我们现在关注的是两个软件——集群软件和数据库。
在Oracle 10g、11gR1中,这两个软件的名字叫Oracle Clusterware和Oracle Database。在Oracle 11gR2中,第一个软件的名字变了,变成Oracle Grid Infrastructure。因此,我们得搞到这两个软件:Oracle Grid Infrastructure 11.2.0.*和Oracle Database 11.2.0.*。
目前Oracle 11gR2已有3个版本:11.2.0.1、11.2.0.2和11.2.0.3。Oracle官方网站OTN上提供了11.2.0.1的下载链接。11.2.0.2和11.2.0.3是以补丁集(Patch Set)的方式发布的,在OTN上找不到,得去Metalink或者e-delivery下载。它俩对应的补丁号分别是Patch:10098816(如图1-1所示)和Patch:10404530(如图1-2所示)。这两个补丁集体积堪称巨大,分别有4.8GB和5.1GB之多。
图1-1 Oracle 11.2.0.2
图1-2 Oracle11.2.0.3
另外,在OTN网站上,Oracle Database 11.2.0.1和Oracle Grid是作为两个软件包分开下载的,下载链接如图1-3所示。而在两个补丁中,它们被打包在一起了,我们把下载的几个ZIP包依次解压后,就会看到有database和grid目录,也就是这两个软件了。
图1-3 OTN中两个软件包的链接
说明:关于软件包的版本、升级和补丁,请以Oracle网站发布的内容为准。
1.2 升级方式的变化
有过Oracle Database经验的读者都知道,以前Oracle 10g的时候,高版本都是用低版本升级的方式得到的。比如,要装 Database 10.2.0.4,得先装个 Database 10.2.0.1,然后给这个ORACLE_HOME打补丁P6810189,通过升级的方式达到高版本。这也是当时唯一的一种方法。
现在,Oracle把这种升级方式叫做in-place升级。
Oracle 11g R2的补丁包有了很大的变化,现在每一个补丁集都是一个完整的安装包,可以直接用补丁集进行完整的安装。也就是说,如果想安装 Oracle 11.2.0.3,就不再需要采用先安装11.2.0.1然后再打补丁的方式了,而直接安装11.2.0.3。
就算现在我们生产线上跑的是 11.2.0.1,我们也不必对 ORACLE_HOME 升级,我们可以在某个新目录下安装一个全新的11.2.0.3,然后建个空库,通过数据导入/导出的方式把数据从旧库导到新库,用这种“曲线救国”的方式完成到11.2.0.3的升级,这也是现在Oracle推荐的方式,Oracle把它叫做Out-of-place的升级方式。
各个版本的RAC的部署过程都一样,都可以分作4个步骤:环境准备,安装Grid(Oracle 10g和11gR1都是Clusterware),然后安装Database,最后是建库。经过这么4个步骤后,就有了一个可用的RAC数据库。
现在,我们就按照这4个步骤来安装Grid的RAC。
Oracle 11.2 RAC与10.2 RAC一脉相承,所以大部分内容与10.2 RAC类似,我在《大话Oracle RAC》一书中详细解释过这些内容。本书只介绍Oracle 11.2中出现的新内容(包括安装也是如此)。更多关于RAC原理的介绍,可以参考《大话Oracle RAC》一书。
1.3 环境准备
RAC的环境准备可以分成4个方面:主机、用户、存储和网络。在准备阶段中,Oracle 11.2和10.2 RAC之间最重要的区别体现在用户这一方面。在Oracle 11.2之前的版本中,只需要创建一个用户oracle 和一个用户组dba。而在Oracle 11.2 中,需要创建两个操作系统用户oracle和grid,以及至少4个操作系统用户组。这么做的原因会在后面的章节中介绍。
1.3.1 主机环境
主机环境包括硬件环境、软件环境,硬件中包括内存、磁盘空间等。根据官方文档,硬件的要求如表1-1所示。
表1-1 硬件环境要求
需要调整操作系统的内核参数如下:
# vi /etc/sysctl.conf
加入这些内容:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
修改以后让参数生效:
# /sbin/sysctl -p
安装用于 Linux 系统的 cvuqdisk 包,这个包位于解压后的 grid/rpm 目录下。如果不安装 cvuqdisk,集群验证程序是无法发现共享磁盘的,我们会收到“Package cvuqdisk not installed”这样的出错消息。
安装这个包需要先设置变量CVUQDISK_GRP,变量的值是cvuqdisk所有者所在的组(本书为oinstall)。
[root@indexserver1 ~]# export CVUQDISK_GRP=oinstall
[root@indexserver1 ~]# cd /u01/install/grid/rpm/
[root@indexserver1 rpm]# ls
cvuqdisk-1.0.9-1.rpm
[root@indexserver1 rpm]# rpm -ivh cvuqdisk-1.0.9-1.rpm
Preparing... ########################################### [100%]
1:cvuqdisk ########################################### [100%]
1.用户和用户组
在Oracle 11gR2的RAC环境中,我们需要有6个操作系统用户组以及两个操作系统用户。这6个用户组中有两个是可选的,这两个用户与用户组的名称和关系如表1-2所示。
表1-2 Oracle 11.2 RAC需要的用户和用户组
我们需要在所有的节点机器上创建这些用户和用户组。具体操作步骤是先创建用户组,然后再创建用户。本书中没有创建oper用户组。
#/usr/sbin/groupadd -g 505 oinstall
#/usr/sbin/groupadd -g 502 dba
#/usr/sbin/groupadd -g 504 asmadmin
#/usr/sbin/groupadd -g 506 asmdba
#/usr/sbin/groupadd -g 507 asmoper
#/usr/sbin/useradd -u 501 -g oinstall -G asmadmin,asmdba,asmoper grid
#/usr/sbin/useradd -u 502 -g oinstall -G dba,asmdba oracle
最后,还要使用password命令为这两个用户设置密码。
在这一步中我们需要注意以下几点:
保证每个用户组在所有节点上的组ID一样,这就是groupadd使用-G的目的;
要保证每个用户在所有节点上的用户ID一样,这是useradd使用-u的目的;
要确保两个用户的主组是oinstall,这也是useradd使用-g的目的;
保证两个用户在每个节点机上的密码一样,这样做不是必须的,不过可以简化用户等价性的配置过程。
至于为什么会有这么多用户和用户组,可以参考2.1小节中的讨论。
在创建了用户之后,需要设置这两个用户的环境变量,其实就是设置$ORACLE_BASE和$ORACLE_HOME。设置了这两个变量之后,Grid、Database的OUI安装程序就会自动提取这两个变量值,省去了再次手动输入的麻烦。
Grid用户的环境变量如下所示:
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME =/u01/app/11.2.0.2/grid
PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
Oracle用户的环境变量如下所示:
export ORACLE_BASE=/u01/app/database
export ORACLE_HOME=$ORACLE_BASE/11.2.0.2/product
PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
仔细看一下,这两个用户的$ORACLE_BASE和$ORACLE_HOME的关系有什么不同?
提示:Oracle用户的$ORACLE_HOME是$ORACLE_BASE的子目录。而Grid用户的$ORACLE_HOME不是$ORACLE_BASE的子目录,这并不是我们有意为之,而是Oracle规定的,也必须这样。
如果读者读过《大话Oracle RAC》和《Oracle DBA突击》这两本书,可能就会发现我对$ORACLE_HOME 目录规划的看法发生了变化。之前,我一直喜欢的$ORACLE_HOME 规划方式是/oracle/product/10.2.0.1/db这样的目录结构,而这次我采用的是/u01/app/database/11.2.0.2/product 这样的层级结构,这也是 Oracle 的目录结构标准,我之所以不再固执己见,是因为我觉得它要比我自己设计的更合理。
再接下来,就是对Oracle用户使用操作系统资源限制的改变,我们需要在/etc/security/limits.conf中添加这些内容:
Oracle soft nproc 2047
Oracle hard nproc 16384
Oracle soft nofile 65536
Oracle hard nofile 63536
oracle soft stack 10240
然后在/etc/pam.d/login文件中添加以下代码:
session required pam_limits.so
2.用户等价性
在Oracle 11.2中,用户等价性要求仍然不变,不过我们这里略过,略过不是省略,而是不再需要像以前那样纯手工的配置方法了,具体的配置步骤后面会有介绍。OUI提供的可视化的配置方法,那是轻松省事多了。
3.调整NTP服务
我们知道,Oracle是事务型数据库,事务操作的先后顺序是靠SCN来记录的,SCN可以看作是时间戳,因此,各个节点机器上的时间一致就是 RAC 发挥价值的重要基石。所以必须通过技术手段来保证节点的时间一致。在Oracle 11.2版本之前,我们只有一种方法就是NTP,在Oracle 11.2版本之后,Oracle自己又多了一种方法,我们会在后面的章节中深入讨论它。
1.3.2 使用 NTP 服务
要是坚持使用操作系统自带的 NTP 服务来保证时间一致,当然完全没有问题。只是有个细节需要重视,我们需要修改一个配置。打开NTP服务的参数文件,在其中的OPTIONS中加上个“-x”标志,就像下面这样。这样做的目的是为了避免向前调整时间。这样改好后,保存配置文件、重新启动NTP服务即可。
编辑/etc/sysconfig/ntpd文件:
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"
# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=no
# Additional options for ntpdate
NTPDATE_OPTIONS=""
重启NTP服务:
[root@indexserver3 grid_data]# service ntpd status
ntpd (pid 4250) is running...
[root@indexserver3 grid_data]# service ntpd stop
Shutting down ntpd: [ OK ]
[root@indexserver3 grid_data]# service ntpd start
ntpd: Synchronizing with time server: [ OK ]
Starting ntpd: [ OK ]
[root@indexserver3 grid_data]# ps -ef|grep ntpd
ntp 22244 1 0 17:25 ? 00:00:00 ntpd -x -u ntp:ntp -p /var/run/ntpd.pid
root 22250 15074 0 17:25 pts/0 00:00:00 grep ntpd
这是第一种时间配置方法,Oracle 自己也提供了一种方法,叫 CSST,因为这一章只是演示安装过程,而安装选择的是NTP,所以这里不讨论CSST(见第2章)。
1.3.3 网络环境
在Grid 11.2中,Oracle引入了一些崭新的技术,包括SCAN、GNS、IP Bonding等。对于网络配置的要求也和之前有所变化,这些要求如下:
127.0.0.1 这个地址只能映射到 localhost 或者 localhost.localdomain,而不应该是其他的,任何网卡都不应该使用这个地址;
所有节点上用于Public网络的网卡名字应该相同,比如都是eth0;
所有节点上用于Private网络的网卡名字也应该相同,比如都是eth1;
所有节点的所有网卡的MTU应该相同,一般不需额外配置就是相同的;
所有的Public、Virtual、SCAN名字都应该由DNS或者GNS解析,如果SCAN放在DNS解析,就不应该出现在本地的hosts文件中;
更多的要求可以参看文档1054902.1。
1.有关多播
Oracle Grid 11.2.0.2 引入了一个新的设计,叫做“Redundant Interconnect Usage”,按照我的理解就是Oracle自己的多网卡绑定技术(读者对这个技术不应该陌生,不同平台的叫法不同,Bonding、Teaming、Etherchannel等)。也就是用多块网卡绑定成一个虚拟的私有网卡,专门用于私有网络的通信。我们都知道私有网络对于RAC稳定的重要性,所以Oracle的这个设计是有意义的。其实在这个设计出来之前,Oracle也会建议用户用OS提供的类似技术实现同样的功能。
不过,Oracle 好像把大部分用户的能力估计过高,它最初版本(指的是 11.2.0.2)选择的底层技术是大多数人都很陌生的技术——多播。
这个多播是干嘛使的呢?每个节点的 Clusterware 栈在启动、加入集群过程中要尝试和集群中的其他节点通信,虽然这时它还不知道有哪些兄弟姐妹存在。这一段的通信使用的就是多播技术,而一旦通信协议道建立起来,也就是它找到了亲人了,它会再转回到用单播模式继续接下来的通信。
因此,如果私有网络不支持多播或者不满足Oracle要求的多播条件,那么集群栈是无法启动的。于是就有可能遇到这种问题:
CRS-4402: The CSS daemon was started in exclusive mode but found an active CSS daemon on node node1, number 1, and is terminating
An active cluster was found during exclusive startup, restarting to join the cluster
Failed to start Oracle Clusterware stack
Failed to start Cluster Synchorinisation Service in clustered mode at /u01/app/crs/11.2.0.2/crs/install/crsconfig_lib.pm line 1016.
/u01/app/crs/11.2.0.2/perl/bin/perl -I/u01/app/crs/11.2.0.2/perl/lib -I/u01/app/crs/ 11.2.0.2/crs/install /u01/app/crs/11.2.0.2/crs/install/rootcrs.pl execution failed
说实话,解决多播问题已经超过大部分DBA的能力了,包括对我。大概Oracle自己也觉得强人所难,于是在Oracle 11.2.0.3时,对这个设计进行了加强──同时支持多播和广播,广播我们就都能理解了。如果私有网络支持多播,就优先使用多播技术,如果不支持多播,就使用广播技术。这样,前面这个问题就少多了。
这里谈论的多播、广播仅限于节点的 Clusterware 栈启动、加入集群、节点间建立连接的这个bootstrap阶段,一旦这一篇翻过去了,之后的通信就都是单播了。
因此,如果你固执地选择Grid 11.2.0.2,那看看note 1212703.1或许有些帮助。如果使用的是Grid 11.2.0.3,就不用再考虑这个问题了。
2.域名和IP
首先,要规划一个域名,在 Oracle 的术语中叫 SCAN 地址。用于未来用户找到这个数据库,这里是indexgrid.wxxr.com.cn。
其次,这个SCAN地址要通过DNS解析成IP地址,而且要解析成3个IP地址。
看看我们需要多少个IP地址?像我们这个4个节点的集群,一共需要4×3+3=15个IP地址。加号(+)后面的3就代表SCAN的3个IP地址。
如何配置DNS服务器这里就不演示了,这不在本书的讨论范围之内。而且,不同DNS服务器的配置方法也不尽相同,不过最终的效果应该是一样的。在任何一台机器上用nslookup命令看到的解析结果应该是这样的:
[root@indexserver4 ~]# nslookup indexgrid.wxxr.com.cn
Server: 192.168.123.5
Address: 192.168.123.5#53
Name: indexgrid.wxxr.com.cn
Address: 192.168.123.214
Name: indexgrid.wxxr.com.cn
Address: 192.168.123.215
Name: indexgrid.wxxr.com.cn
Address: 192.168.123.216
而剩下来的4×3=12个IP地址,和之前版本配置方式一样,可以放在/etc/hosts中,比如:
192.168.1.70 indexserver1
192.168.1.71 indexserver2
192.168.1.72 indexserver3
192.168.1.73 indexserver4
10.0.0.70 indexserver1-priv
10.0.0.71 indexserver2-priv
10.0.0.72 indexserver3-priv
10.0.0.73 indexserver4-priv
192.168.1.80 indexserver1-vip
192.168.1.81 indexserver2-vip
192.168.1.82 indexserver3-vip
192.168.1.83 indexserver4-vip
前面说过,Public和Virtual地址也可以交给DNS解析。
3.主机名中不要有下划线(_)
这是一个常见的错误,也是个常识性错误,也是笔者早期常犯的错误,现在列在这里给读者以提醒。
这个规定并不是Oracle的规定,而是Internet 的协议标准(RFC)中约定的:主机名中只能使用字母、数字和横线(-)。而不能有其他的符号,比如下划线(_)。
如果主机名有下划线,比如叫 beijing_db,那么数据库会经常出现些莫名其妙的问题,典型的问题就是在建库过程中EMCA的配置会失败,会遇到类似如图1-4所示的提醒。
图1-4 主机名中不能有下划线(_)
1.3.4 配置存储
存储配置包括两个步骤:基础配置和ASM配置。
在基础配置阶段,我们要做的是配好盘柜、光纤交换机,划分Lun并能在主机上看到Lun,再安装 PowerPath,以实现多路径。这部分工作一般都是存储厂商的工程师完成的,不在本书讨论的范围之内,下面要讨论的是ASM配置。
1.ASM配置
配置 ASM 第一步是安装 ASM 驱动。下载驱动包时要注意根据操作系统内核版本号选择对应的包。查看OS内核版本号:
[oracle@indexserver1 ~]$ uname -a
Linux indexserver1 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64GNU/Linux
装好了驱动后,接下来就是配置ASM模块。
在 Oracle 11.2 中,Grid 和 Database 一般是用不同的操作系统用户安装的,因此在配置ASMLib时就要小心点了。因为Grid是用grid用户安装的,而grid的主组是oinstall,次要组是asmowner和asmdba,于是asmlib需要这样配置:
[root@london1 grid]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
Default user to own the driver interface []: grid
Default group to own the driver interface []: asmdba
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]
说明:关于这几个用户和用户组的作用,可以参考第2章中的详细介绍。
配置好后,ASMLib驱动会随着系统启动自动加载,接下来就要创建磁盘。
2.创建ASM磁盘
Oracle 11.2已经放弃了对于裸设备的支持(当然还会保持兼容),只能使用ASM磁盘,所以先要创建磁盘,创建磁盘是个有一定危险的动作,因为如果磁盘上有数据,这些数据就会被破坏。因此,我们必须先确保它没有被用。因此,作为一个谨慎的管理员,我们得先检查一下这个磁盘的使用情况,看它是不是已经属于其他的ASM组了。
使用oracleasm querydisk 命令,可以检查某个磁盘是否已经是 ASM 磁盘,以及属于哪个磁盘组,这个命令有两个可选参数-p和-d,其中-d用来查看设备号,-p查看的是设备路径名。
例如,要想知道/dev/emcpowera1这个分区是否已经是ASM磁盘以及它的名字是什么,可以这么做:
[root@searchdb2 ~]# oracleasm querydisk -v -p /dev/emcpowera1
Device "/dev/emcpowera1" is marked an ASM disk with the label "OCR"
反过来,要想知道哪个磁盘是被命名为OCR的磁盘,可以这么做:
[root@searchdb2 ~]# oracleasm qu erydisk -v -p OCR
Disk "OCR" is a valid ASM disk
/dev/emcpowera1: LABEL="OCR" TYPE="oracleasm"
/dev/sde1: LABEL="OCR" TYPE="oracleasm"
/dev/sdg1: LABEL="OCR" TYPE="oracleasm"
如果用-d,能看到的是设备号,要对应到真正的设备,还需要绕个弯,关于设备号和设备名的对应关系,可以参考其他的资料和文档。
如果不是ASM磁盘,看起来输出是这样的:
[root@searchdb2 ~]# oracleasm querydisk -v -d /dev/emcpowerb7
Device "/dev/emcpowerb7" is not marked as an ASM disk
确认磁盘可用之后,就要创建ASM磁盘了。
[root@searchdb2 ~]# oracleasm createdisk WXXRINDEX1 /dev/emcpowerb7
Writing disk header: done
Instantiating disk: done
创建磁盘就相当于格式化,给这个磁盘盘头写上ASM元数据,这个命令只需要在一台机器上执行就可以了。
其他机器要做的是扫描磁盘,把这个磁盘认出来,当然靠的也是盘头的ASM元数据。在每个机器上都进行如下所示的操作:
[root@searchdb2 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
然后再这么做:
[root@searchdb1 ~]# oracleasm listdisks
OCR
WXXRDATA1
WXXRDATA2
WXXRDATA3
WXXRDATA4
WXXRDATA5
WXXRINDEX1
确保每个节点上都能看到相同的列表。也就是说,所有节点都能识别出这些ASM磁盘。
1.4 安装
环境准备好后,就可以动手安装了。顺序是先装Grid、再装Database。这两个软件都支持图形化安装和Silent的静默安装。就个人体会而言,Oracle 11.2的各种安装卸载功能都比以前好了许多,基本都能做到了一次通过。所以,Silent 方式也是个不错的体验,我放在后面的附录中。
1.4.1 安装 Grid
以grid用户登录系统,在shelll下执行./runInstaller,启动安装程序。
(1)Metalink账号的设置,如图1-5所示。
图1-5 Metalink账号设置
Oracle 11.2的Database和Grid与Oracle服务体系(Metalink)结合得更紧密,比如,我们可以在安装过程中让 OUI 帮着去 Metalink 查看更新的补丁包,然后下载补丁并安装它。基本上类似于 Windows 中的各种自动更新。当然你需要先购买 Oracle 的服务、拥有 MOS 的账号才行。
这里先跳过这一步,保持安装过程的简洁。
(2)选择安装类型,如图1-6所示。这一步没什么可说的,我们就选第一项【Install and Configure Oracle Grid Infrastructure for a Cluster(安装并配置集群下的Grid)】。
图1-6 选择安装类型
(3)选择安装方式,如图1-7所示。这里我们要选第二项【Advanced Installation(高级安装)】,其实就是自定义安装。之所以不选第一项【Typical Installation(典型安装)】,是因为我想给这个集群起个牛气烘烘的名字(也叫SCAN名字),而不使用典型安装提供的缺省名字。
图1-7 选择安装方式
(4)选择安装语言,如图1-8所示。如果在上一步中选择了【Advanced Installation(高级安装)】,就会进入到这个界面,如果选择【Typical Installation(典型安装)】,会直接跳到步骤(6)。这里选择【English】,Oracle软件还是在英文环境下感觉最流畅自然。
图1-8 选择语言
(5)定义集群的名字、SCAN名字及监听端口和GNS,如图1-9所示。如果步骤(3)中选择了【Typical Installation】,那么我们是不会看到这个界面的。
图1-9 配置GPNP
在这里输入集群的名字、SCAN、SCAN端口号。在这个例子中不使用GNS,所以应取消【Configure GNS】复选框。
(6)定义集群的节点列表(如图1-10所示)以及身份等价。如果步骤(3)中选择【Typical Installation】,那么就会直接跳到这个界面。这里需要把集群中的4个节点都加进去,提供每个节点的节点名和VIP名。
图1-10 定义集群节点
4个节点都加好后,就要配置SSH等价了。这一步配置的是grid用户的等价性。单击【SSH Connectivity..】按钮,页面上就会多出一些内容,输入grid用户的密码,单击【Setup】按钮,然后就开始配置SSH等价(如图1-11所示),最后弹出如图1-12所示的配置成功通知。
图1-11 SSH自动配置大大减少了工作量
图1-12 SSH用户等价配置成功
配置成功!
之前在做环境准备时,我们有意在用户等价性一节只留个标题,原因就在这里。SSH等价本身并不属于Oracle内容,但它是做RAC配置必需的。Grid、Database在本机安装好后,会通过SSH把本地的这些文件目录复制到其他节点上去,这本身也是一个登录其他节点的过程,因此需要某种身份验证的机制。最简单的就是输入用户名、密码,但安装过程就会不断地被打断,输入每个节点的用户名和密码后才能继续,非常麻烦。SSH等价可以通过证书、密钥等方式去掉了手工输入密码的麻烦,使得后台的文件复制得以悄悄地进行。
SSH等价虽然简单,但配置繁琐,尤其当节点多的时候,于是Oracle干脆替我们全部搞定。对于安装人员来说确实是简单了,不过生生地把新人知晓 SSH 等价的机会给剥夺了,不知道算是好事还是坏事。
(7)配置网卡,如图1-13所示。这个界面用来定义共有网络和私有网络,不再细说。
图1-13 定义公共、私有网卡
(8)定义 OCR 保存位置,如图1-14所示。这里有两个选项,这里选择第一个【Oracle Automatic Storage Management(Oracle ASM)】。
图1-14 定义OCR存放的位置
Oracle 11.2 已经放弃对裸设备的支持,从这一步就看出来了。以前在 Oracle 10g、Oracle 11gR1时,这里是能够支持裸设备的。
(9)配置ASM,如图1-15所示。到这一步,Grid会扫描系统,把所有可用的ASM磁盘都列在这里,我们需要创建个磁盘组来保存 OCR 文件。创建磁盘组必不可少的选项有:冗余方式和ASM磁盘。
图1-15 配置ASM存储
(10)指定ASM管理员密码,如图1-16所示。
图1-16 定义ASM管理员的密码
(11)是否要使用 IPMI,如图1-17所示。选择第二项【Do not use Intelligent Platform Management Interface(IPMI)】,一般情况都不需要使用IPMI。关于IPMI的更多内容可以参见第2章。
图1-17 不需要使用IPMI
(12)指定ASM用户组,如图1-18所示。之前在准备主机环境时,我们已经在操作系统中创建了这3个用户组,确保你的选择与我一致。这些用户组的含义见2.1小节。
图1-18 保持这3个用户组不变
(13)指定安装位置,如图1-19所示。grid用户的环境里已经定义好了ORACLE_BASE和ORACLE_HOME两个环境变量,OUI会读出参数值自动填在这里。
图1-19 指定软件安装位置
(14)指定产品清单位置,如图1-20所示。我们会在第2章中详细介绍产品清单,这里就不多说了。保证这个目录的属组是【oinstall】,如图1-20所示。
图1-20 oraInventory目录的位置
到此,所有安装前的设置就结束了,已经可以开始安装了,不过为了确保一次过,O UI还要做一次完整的检查以确保能够安装成功。其实我们也可以自己做这样的检查,检查工具是cluvfy,OUI检查用的也是这个工具。
(15)系统检查,如图1-21所示。检查的内容包括操作系统内核参数、必需的包。如果有哪一项检查无法通过,解决之,然后再检查,尽量让所有的检查都通过。
图1-21 操作系统检查
有可能检查结果总是抱怨ASM磁盘检查失败,无法发现磁盘,如图1-22所示。
图1-22 bug引起的检查失败
这是因为遇到了bug 10310848,在我做这次安装时未发布补丁,可以直接跳过。具体可以参考文档1267569.1。
(16)开始安装Oracle 11g,如图1-23所示。安装过程很快,最后会看到执行配置脚本的提示界面,如图1-23所示。
图1-23 执行脚本提示
打开新窗口,以root身份执行要求的第一个脚本orainstRoot.sh:
root@indexserver4 oraInventory]# ./orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
然后执行第二个脚本root.sh:
[root@indexserver1 grid]# ./root.sh
Running Oracle 11g root script...
The following environment variables are set as:
ORACLE_OWNER= grid
ORACLE_HOME= /u01/app/11.2.0/grid
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
LOCAL ADD MODE
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
OLR initialization - successful
root wallet
root wallet cert
root cert export
peer wallet
profile reader wallet
pa wallet
peer wallet keys
pa wallet keys
peer cert request
pa cert request
peer cert
pa cert
peer root cert TP
profile reader root cert TP
pa root cert TP
peer pa cert TP
pa peer cert TP
profile reader pa cert TP
profile reader peer cert TP
peer user cert
pa user cert
Adding daemon to inittab
ACFS-9200: Supported
ACFS-9300: ADVM/ACFS distribution files found.
ACFS-9307: Installing requested ADVM/ACFS software.
ACFS-9308: Loading installed ADVM/ACFS drivers.
ACFS-9321: Creating udev for ADVM/ACFS.
ACFS-9323: Creating module dependencies - this may take some time.
ACFS-9327: Verifying ADVM/ACFS devices.
ACFS-9309: ADVM/ACFS installation correctness verified.
CRS-2672: Attempting to start 'ora.mdnsd' on 'indexserver1'
CRS-2676: Start of 'ora.mdnsd' on 'indexserver1' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'indexserver1'
CRS-2676: Start of 'ora.gpnpd' on 'indexserver1' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'indexserver1'
CRS-2672: Attempting to start 'ora.gipcd' on 'indexserver1'
CRS-2676: Start of 'ora.cssdmonitor' on 'indexserver1' succeeded
CRS-2676: Start of 'ora.gipcd' on 'indexserver1' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'indexserver1'
CRS-2672: Attempting to start 'ora.diskmon' on 'indexserver1'
CRS-2676: Start of 'ora.diskmon' on 'indexserver1' succeeded
CRS-2676: Start of 'ora.cssd' on 'indexserver1' succeeded
ASM created and started successfully.
Disk Group DATA created successfully.
clscfg: -install mode specified
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4256: Updating the profile
Successful addition of voting disk 06de730377e84f12bf4d915dc383006d.
Successfully replaced voting disk group with +DATA.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1.ONLINE 06de730377e84f12bf4d915dc383006d (ORCL:WXXRINDEX1) [DATA]
Located 1 voting disk(s).
CRS-2672: Attempting to start 'ora.asm' on 'indexserver1'
CRS-2676: Start of 'ora.asm' on 'indexserver1' succeeded
CRS-2672: Attempting to start 'ora.DATA.dg' on 'indexserver1'
CRS-2676: Start of 'ora.DATA.dg' on 'indexserver1' succeeded
ACFS-9200: Supported
ACFS-9200: Supported
CRS-2672: Attempting to start 'ora.registry.acfs' on 'indexserver1'
CRS-2676: Start of 'ora.registry.acfs' on 'indexserver1' succeeded
Configure Oracle Grid Infrastructure for a Cluster ...succeeded
看到了最后的succeeded,说明这个节点没问题。
继续在剩下的第2、3和4节点上执行这两个脚本,确保都没问题。这还没有结束,再回到刚才的安装界面,单击【OK】按钮,还有一点后续任务要做,如图1-24所示。
图1-24 后续任务
进度条终于到了100%,如果看到【Status】列表中有两个刺眼的红色图标,不要担心,单击【Details】按钮查看详细内容。
图1-25 终于来到这里
如果看到最后(如图1-26所示)失败的是OCVU,那还是之前那个bug问题,可以忽略掉,我们就安装成功了。
图1-26 失败的细节
可以收工了,不过因为之前有失败的地方,虽然我们知道这是个bug,但是OUI还是会友好地提示一下,如图1-27所示。不过我们也只能这样了。
图1-27 提示有bug
目前看起来软件是装上了,但是不是真的成功了,Grid 是不是真的跑起来了?我们得借助一些手段进行完整的调查后才能确认。这些检查方法可以参考 3.4 节,这里就先不细说了。
1.4.2 安装 Database
这次要以Oracle用户身份执行:
[oracle@indexserver1 database]$ ./runInstaller
(1)捆绑MOS服务。
这又是和Metalink有关的内容,我们设置一下看看什么效果。在如图1-8和图1-29所示的界面中输入Metalink的账号和密码,然后可以通过【Test Connection】按钮测试一下是不是能连接并登录Metalink系统。
图1-28 设置Metalink账号、密码(1)
图1-29 设置Metalink账号、密码(2)
如果用户名、密码没问题,则OUI会自动搜索最新补丁,并提示下载(如图1-30所示)。下载补丁与否并不影响后续的安装,不过起码我们心里有数了。
图1-30 还真找到了一个Patch,下载随意,安装由你,不影响后续安装
(2)选择安装方式,如图1-31所示,这里选第二项【Install database software only(只安装数据库软件)】,后面会通过DBCA来创建数据库。
图1-31 选择安装方式,只安装软件
(3)确定部署规模,如图1-32所示。
图1-32 部署规模和用户等价性
这里当然要选择第二项【Oracle Real Application Clusters database installation(Oracle RAC数据库安装)】,第一项是单实例数据库安装方式,第三项是Oracle RAC One Node数据库安装方式(后面有专门介绍)。
此外,还要确定规模,也就是都要在哪些节点上安装。这里在集群节点列表中选中所有的节点。
最后是配置Oracle用户的SSH等价性,与之前Grid完全一样,这里就不再赘述。
(4)接下来就是选择语言、指明安装目录以及Oracle用户所属的组,比较简单,没什么需要特殊说明的,如图1-33所示。
图1-33 语言、安装目录、用户组
到此,安装前的信息收集工作就算完成了,接下来就可以安装了。不过为了保证安装的一次过,OUI 还是会做一次环境检查工作。对检查结果中的不合格项,DBA 需要做出整改。然后再检查,直至全部检查通过为止(如图1-34所示)。
图1-34 检查和检查结果
和Grid的OUI一样,Database的也是通过cluvfy进行的检查,DBA也可以手工执行这个脚本来检查。
接下来就是正式的安装了(如图1-35所示),最后会弹出一个对话框,提示我们现在安装过程暂停,需要我们手工在每个节点上执行一个名为root.sh的脚本(如图1-36所示)。执行完毕后单击【OK】按钮关闭这个提示对话框,安装过程才能够继续进行。
图1-35 安装进度
图1-36 database的root.sh
以root身份执行这个脚本:
[root@indexserver1 ~]# /u01/app/oracle/11.2.0/product/root.sh
Running Oracle 11g root script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/11.2.0/product
Enter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed.No need to overwrite.
The contents of "oraenv" have not changed.No need to overwrite.
The contents of "coraenv" have not changed.No need to overwrite.
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
4个节点都执行之后,返回到如图1-30所示的界面,关闭该对话框,安装过程会继续进行,最后弹出安装成功的界面,如图1-37所示,大功告成。
图1-37 Database安装成功
应该说Database的安装要比之前的版本简单,因为ASM配置已经被移走了,和Grid放在了一起,包括监听器也被移到了Grid中,所以Database本身配置项就少了很多。
最后,我们创建数据库。
1.4.3 创建数据库
以Oracle的身份登录到任何一个节点上,并以Oracle的身份执行DBCA,出现的第一个界面应该是集群数据库的欢迎界面,如图1-38所示。
图1-38 集群的DBCA欢迎你
一定要确保看到的是这个界面,换句话说,就是要确保DBCA能够识别出这是一个集群环境而不是单机环境。我们会在2.2节中解释什么叫DBCA识别出集群环境,以及不能识别时的解决办法,如果现在看到的不是如图1-38所示的界面,那么可以参考2.2节的内容。
(1)选择哪种数据库。我们当然选择第一项【Oracle Real Application Clusters(RAC) database (RAC 数据库)】。第二项是【Oracle RAC One Node database】,后面会专门介绍,第三项是 【Oracle single instance database(单实例数据库)】。
(2)在如图1-39所示的界面中,选择要执行什么操作,这里选择第一项【Creat a Database (创建数据库)】。
图1-39 选择操作类型
(3)选择如何创建数据库,如图1-40所示。我一般喜欢选择第二项【Custom Database】,这样我对数据库具有哪些功能可以做到心里有底。而第一项、第三项都是根据特定的数据库模板来创建数据库。
图1-40 建库方式
这个界面和之前的版本有点区别。Oracle 10g中这里是4个选项,General Purpose和Transaction Processing两个是分开的,因为这两种模板非常相似,所以Oracle 11.2将给它们合并了。
这些数据库模板位于$ORACLE_HOME/assistants/dbca/templates,可以看一看:
[oracle@indexserver1 templates]$ ll
……
-rw-r--r-- 1 oracle oinstall 5104 Sep 5 2010 Data_Warehouse.dbc
-rw-r--r-- 1 oracle oinstall 4984 Sep 5 2010 General_Purpose.dbc
……
两个.dbc文件就是这两个模板。这是两个XML文件,可以打开来读读看。
这个目录下还有两个文件,英文名字 Seed_Database,就是所谓的种子数据库。你可以把它们看成是RMAN创建出来的备份集。于是这两种数据库的创建就成了RMAN的数据库恢复。所以这种库的创建速度会很快,如果只是个测试数据库,可以考虑这两种创建方式。
[oracle@indexserver1 templates]$ ll
……
-rwxr-xr-x 1 oracle oinstall 9748480 Nov 16 2010 Seed_Database.ctl
-rwxr-xr-x 1 oracle oinstall 263118848 Nov 16 2010 Seed_Database.dfb
这两个模板的区别就在于 STAR_TRANSFORMATION_ENABLED 参数值,对于 Data Warehouse是True,而General Purpose中这个参数是False。
如果选择定制方式创建数据库,数据库建成后,会执行$ORACLE_HOME/rdbms/admin目录下的许多脚本创建数据字典,比如catproc.sql、catalog.sql等。所以尽管建的库不大,但是时间会很长,就是因为要执行这些脚本。生产环境下最好使用这种方式来创建,对每个细节都做到心中有数。
(4)在如图1-41所示的界面中选择管理策略。这个界面是Oracle 11.2 中新亮相的,而这个特性也是 Oracle 11.2 新提出来的,我们会在后面的章节中专门讲解它。这里就选择第一项【Admin-Managed】。
图1-41 管理策略
目前我们只需要知道Admin管理策略和我们以前熟悉的管理方式一致,需要我们提供数据库名、SID前缀、节点列表。
数据库名最好不要以数字结尾,因为实例的名字是在数据库名后面加上数字。比如,testdb1、testdb2。如果数据库名是test1、test2,那实例的名字就成了test11、test12,会把人搞糊涂的。
(5)是否使用 EM,以及是用 DB Controle 还是 Grid Control(如图1-42所示)。EM 是Oracle提供的一种基于浏览器的、企业级的管理工具。
图1-42 EM设置
二者的区别在于 DB Control 是一个轻量级的管理方式,我喜欢叫它寄生的管理方式。DBControl 不需要安装特殊的软件,它是作为数据库的一个选项而存在的,只需在建库过程中打开而已。缺点是每个DB Control只能管理它所在的那个宿主数据库,并且可靠性也取决于宿主数据库。
Grid Control 是集中的管理方式,它本身是一个单独的软件,需要单独安装,它可以管理企业内所有数据库。而且Grid Control的定位是一个通用的管理平台,不仅仅管理数据库,还可以管理主机、防火墙、存储等资产。
对于我们这个测试数据库,采用DB Control方式就够了,选中如图1-42所示的选项。
(6)设置管理员密码,如图1-43所示。
图1-43 管理员密码
(7)定义数据文件存放方式。
这一步在Oracle 11.2中也有了一点变化,Grid中的ASM提供了卷管理器(ADVM)和集群文件系统(ACFS)。尽管ACFS是个集群文件系统,但却不支持自家的数据库文件。如果做了这种尝试,就会遇到如图1-44所示的错误。
图1-44 尽管ACFS、Database同出一门,但是并不相容
因此,这里只能选择ASM磁盘组,如图1-45所示。
图1-45 唯一的选择就是ASM
要想在 ASM 磁盘组里创建文件,必须能连接到 ASM 实例,因此需要提供必要的身份信息,如图1-46所示。
图1-46 ASM身份信息
注意,图1-46中要求的用户是ASMSNMP,不是我们想当然的sys,因此要保证ASM数据库里有ASMSNMP这个用户,账户没有锁定,而且要有DBA权限。这么做:
[grid@indexserver2 ~]$ export ORACLE_SID=+ASM1
[grid@indexserver2 ~]$ sqlplus " / as sysdba"
SQL> create user asmsnmp identified by Yourpassword ;
User created.
SQL> grant sysdba to asmsnmp;
Grant succeeded.
如果没有这个用户或者权限不足,就会遇到如图1-47所示的这个错误,ASMSNMP验证不通过。
图1-47 ASMSNMP用户权限不足
(8)再接下来的步骤就简单了,包括是不是要使用归档模式、是否打算使用FRA,是否需要预装的Schema、对初始化参数的调整、对数据文件的调整。相信对本书的读者来说,这些内容太浅显了,而且和之前版本没有变化,所以我就一带而过,参考图1-48即可。
图1-48 数据库创建
接下来就开始安装。终于要见到了胜利的曙光了!如果看到如图1-49所示的界面,那么就可以开香槟庆祝了。
图1-49 胜利的终点
大功告成了!安装就讲到这了,下一章我们讲为什么要这么安装、装好了怎么删除或者卸载。
1.5 小结
我一直觉得能从Oracle 8i开始接触Oracle的DBA是幸福的,因为那个时候天还是蓝的、水还是绿的,Oracle还就是个库,花哨的功能很少,所以对于有兴趣、有精力、喜欢刨根问底的读者,能刨的就剩下Oracle内部机制了,所以那时ODI一度风靡于网络。
从Oracle 9开始,由于数据库核心已经稳定了,所以Oracle开始在外延发力,各种工具、扩展、行业延伸让人眼花缭乱。当今的Oracle说它是数据库也行,说是应用服务器也不错,说是行业一揽子解决方案也没毛病,总之,Oracle把万千宠爱都集中到这个长子身上,恨不得武装到牙齿。现在的Oracle数据库可以研究的内容太多了,真正最朴素的那道光芒反而被无视了。比如,有一段时间我就在研究如何把jQuery集成到Oracle内置的Apex中建个人网站。这已经完全和数据库没有任何关系了!
对于RAC 11.2,我的感觉也是一样的,要讲的东西太多,所以这一章的安装演示我尽量压缩了,但还是整出了40多页。如果读者觉得有些步骤过于简单,或者读者初次接触RAC,我建议看看《大话Oracle RAC》一书,对于RAC的基本原理,那本书讲得要更透彻一些,而这本书关注的是Oracle 11.2的新内容,并未重复已有的内容。