- 大話Oracle Grid:云時代的RAC
- 張曉明
- 143字
- 2019-01-02 08:20:32
第一部分 安裝
第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的新內容,并未重復已有的內容。
- 企業數字化創新引擎:企業級PaaS平臺HZERO
- Learning Spring Boot
- Libgdx Cross/platform Game Development Cookbook
- 醫療大數據挖掘與可視化
- Neural Network Programming with TensorFlow
- 大數據Hadoop 3.X分布式處理實戰
- 基于Apache CXF構建SOA應用
- Spark大數據編程實用教程
- 視覺大數據智能分析算法實戰
- Oracle數據庫管理、開發與實踐
- Hands-On System Programming with C++
- Spring Boot 2.0 Cookbook(Second Edition)
- Python 3爬蟲、數據清洗與可視化實戰
- 信息融合中估計算法的性能評估
- 數字化轉型實踐:構建云原生大數據平臺