文章詳情頁
VMware下RedHat安裝Oracle 9i RAC全攻略
瀏覽:55日期:2023-11-26 11:22:21
;;摘要:大家都知道,Oracle 9i RAC(以下簡稱RAC)是oracle里相對比較復雜的部分,很大一部分原因是由于RAC的環境搭建相對不如單實例方便。通常典型的配置是兩臺主機加一臺存儲,但是平常我們個人假如想在家研究測試RAC的話,很少會去購買這么多設備來做測試的。 幸好,我們有VMware GSX Server(以下簡稱VMware),通過使用這款非常好的虛擬機模擬工具,我們可以在一臺PC電腦上模擬出多臺主機加存儲的這樣一個RAC環境。 ;本文首先簡要介紹了RAC的原理,隨后著重具體敘述了如何在一臺PC電腦上,使用VMware構建兩臺RedHat Linux AS3(以下簡稱AS3),并虛擬一個共享存儲,創建裸設備,最后在實現RAC的搭建。;1.RAC簡介;簡單來說,RAC就是位于多個主機(通常都稱為節點)上的多個oracle實例同時治理一個數據庫。數據庫必須放在共享存儲設備上,包括數據文件、控制文件、聯機日志以及spfile都必須放在共享存儲上,這樣每個節點才能同時訪問存儲設備。每個節點之間通過高速光纖互相連接,并同步內存數據。oracle在治理不同實例里的內存里的數據結構,同時要最大程度的降低I/O,引入了全局緩沖服務(GCS:Global Cache Service),同時還引入了全局鎖定服務(GES:Global Enqueue Service)用來在不同節點之間通訊時進行同步治理。這些服務都是通過一組非凡的后臺進程完成的,這些后臺進程主要包括:;(1)global cache service processes(LMSN):n從0到9,具體由信息傳輸的數量決定。用來控制信息到其他實例的流向,同時還治理對全局數據塊的訪問。LMSn進程同樣在不同實例的數據塊緩存(buffer cache)里傳遞數據庫鏡像(block image)。該進程是Cache Fusion特性的一部分。;(2)global enqueue service monitor(LMON):監控全局鎖定(global enqueues)及其資源,并提供global enqueues資源的恢復操作。enqueues是用來進行串行化行更新的共享的內存結構。;(3)global enqueue service daemon(LMD):治理對全局鎖定(global enqueues)以及全局資源的訪問。在每個實例中,LMD進程對傳入當前實例的對其他資源的訪問請求進行治理。;(4)lock process(LCK)治理non-Cache Fusion資源的請求,比如library cache或row cache的請求。;(5)diagnosability daemon(DIAG):獲得實例中有關進程失敗的診斷信息。該daemon的操作是自動的,并且它會更新alert<SID>.log文件,以記錄它所做的動作。;注重:cache fusion表示一種在RAC里的非磁盤交互方式的內存同步機制。該機制使得獲得block的實例能夠將block直接從內存轉移到需要該block的實例的SGA里去。這樣,由于減少了磁盤交互,所以將block從一個實例轉移到另一個實例的性能提高很多。而且治理也更加簡便。;RAC能夠對客戶端的連接請求進行負載均衡,把所有客戶的連接盡可能的平均分布在不同的實例上。同時,RAC還提供failover的功能,也就是說假如其中一個節點發生意外,只要這個時候連在該損壞節點上的session沒有正在進行事務運行,則該session不需要退出后重新登錄,oracle會自動將該session連接到一個可用的節點上,從而保證了7×24應用的安全性和穩定性。;不過,RAC不提供容災的功能,也就是說假如共享存儲損壞,仍然會導致整個應用崩潰。所以,需要采用其他容災方案結合使用,比如RAC+DataGuard等。;2.預備工作;VMware GSX Server:筆者測試所使用的是3.2版本,建議使用3.2及以上的版本。 Linux:筆者使用的是RedHat Linux AS3。請使用AS2.1以上版本的linux。因為AS2.1以下的版本假如要 支持RAC需要進行很多額外的配置,比如watchdog之類的,到了AS2.1以后缺省都不使用了,而是使用hangcheck,假如要使用watchdog,需要進行很多不必要的配置。安裝介質可以是光盤,也可以是ISO文件。筆者使用的是ISO文件。 Oracle:筆者使用的是oracle 9204 for linux,可以直接從oracle的官方網站上下載。筆者是從oracle官方網站上下載下來的三個壓縮包。;主要的預備工作就是這些,當然安裝過程中可能還會需要其他的一些軟件,比如plainmaker等。在需要的時候,筆者也會說明如何使用這些軟件的。3.安裝虛擬節點;3.1 創建虛擬節點;VMware安裝好以后,進入主界面,我們就可以創建兩個虛擬節點。點擊File->New Virtual Machine…,在打開的窗口中,在選擇所安裝的操作系統時,我們選擇RedHat Enterprise Linux 3,其他都選擇缺省值,點擊next,一直到讓你輸入disk size時,缺省事4G,我們改成8G,最后點擊finish。這樣就創建好了一個虛擬節點,取名為linux1。同樣的方法,我們創建第二個虛擬節點,取名為linux2。;3.2安裝linux;創建完兩個虛擬節點以后,我們要開始安裝linux了。在窗口的左邊的Inventory框里,右鍵節點linux1,選擇virtual machine settings…,在彈出的框中,我們選中CD-ROM,然后選擇Use ISO Image,并輸入相應的linux安裝介質的第一個ISO文件的位置,如下圖所示。選擇ok以后,點擊Power->Power On,相當于為節點 ;
點擊查看大圖;加電,剩下的工作與在單PC機器上安裝linux過程一樣。這里提一點,就是在給磁盤分區時,假如不使用LVM,那么在分區時,/boot給120M,/swap給256M,/給2900M,然后再創建一個/oracle,把剩下的空間都給/oracle。在安裝過程中,當提示需要換另外一張盤時,你只要再次進入圖一所示界面,更改ISO文件并確定以后,再進入虛擬機,選擇提示中的ok即可。同樣的方法,我們可以安裝好另外一臺虛擬機上的linux。;RAC里每個節點都需要兩塊網卡并使用固定ip,一塊作為兩個節點互相內部通信用,另外一塊作為外部連接用。我們同樣的,選擇linux1,進入圖一界面,選擇add按鈕,然后選擇Ethernet Adapter,然后都選擇缺省值并點擊next直到結束。這樣就為linux1添加了第二塊網卡。同樣的方法為linux2添加第二塊網卡。分別啟動兩個節點以后,我們在linux為網卡配置ip地址。筆者的配置是linux1的內部通信ip為:134.251.0.140,外部通信ip為:134.251.114.141。而linux2的內部通信ip為:134.251.0.141,外部通信ip為:134.251.114.140。;4.安裝共享磁盤;4.1 創建共享磁盤;在VMware里,共享磁盤需要使用plainmaker.exe這個工具來創建。可以到VMware GSX Server的安裝目錄下找該工具是否存在。假如不存在,則可以到Google上搜索。很多站點提供該工具的下載。進入命令提示符,輸入下面的命令來創建共享磁盤。;C:>plainmaker D:virtualossharedisk.pln 2048m;該命令運行以后,就會在D:virtualos目錄下創建一個名位sharedisk.pln的共享磁盤,大小為2G。;4.2 添加共享磁盤;共享磁盤安裝好以后,我們需要把它加入到前面安裝好的兩臺linux虛擬機里。選擇linux1,仍然進入到圖一所示的界面里,選擇左邊的add按鈕,在彈出的框中,選擇Hard Disk,并點擊next,選擇方式如下面圖二 ;所示,并點擊next,輸入我們剛才創建的共享磁盤名:D:virtualossharedisk.pln,然后不要點擊finish,要點擊advanced,選擇磁盤為SCSI 1:0。如下圖三所示。最后點擊finish。這樣,我們就為linux1節點添加了共享存儲。隨后,我們用同樣的方法為linux2節點也添加該共享存儲。 ;4.3 配置共享磁盤;把共享存儲添加到兩個節點以后,還不算完,必須修改兩個虛擬機的配置文件。在每個節點所在目錄下都存在一個后綴名為vmx的文件,這就是虛擬機的配置文件了,用notepad打開,把下面三行記錄添加進去。注重,這三行中的每一行都不能重復,所以仔細檢查一下vmx文件,確保這三行記錄唯一。每個節點的配置文件都必須添加這三行記錄。;disk.locking = FALSE scsi1.sharedBus = 'virtual' scsi1:0.mode = 'persistent';到這里,我們才算是為兩個節點都配置好了共享存儲。分別啟動兩個linux節點以后,進入linux,我們可以使用如下命令來確定兩個節點是否都能夠找到該存儲了。假如提示出有設備,則表示能夠識別共享存儲。fdisk –l /dev/sdb;5.設置兩個節點的互相信任機制;由于RAC的節點之間需要完全無障礙的訪問,因此需要設定主機名互相訪問以及互相信任機制。注重:以下所有步驟都必須在兩臺節點上各自完成。;5.1 設置主機名;首先,RAC之間互相不能通過ip來訪問,而必須使用主機名來訪問,因此需要設定hosts內容。筆者設定的是節點linux1的內部訪問主機名為linux1-prv,而外部訪問節點名為linux1;節點linux2的內部訪問主機名為linux2-prv,而外部訪問節點名為linux2。需要將這些信息添加到/etc/hosts文件里去,如下所示。注重,要將127.0.0.1原來所對應的linux1改名為localhost。;# Do not remove the following line, or various programs ;# that require network functionality will fail. 127.0.0.1localhostlocalhost.localdomainlocalhost 134.251.114.140 linux1 134.251.114.141 linux2 134.251.0.140linux1-prv 134.251.0.141linux2-prv;同樣的,修改linux2的/etc/hosts文件,也要將127.0.0.1原來所對應的linux2改名為localhost。其他設置與linux1節點一樣。設置好以后,在linux1上ping linux2,在linux2上也ping linux1,假如都通的話,說明設置無誤。;5.2 設置telnet訪問;(1)通常缺省都會安裝telnet-client。主要確定是否安裝了telnet-server軟件。 [root@linux1 root]# rpm –qa grep telnet;(2)假如沒有安裝,則從AS3安裝介質上找到該rpm包,并進行安裝。;(3)安裝好以后,需要啟動telnet服務。輸入以下命令,并從彈出的框中選中telnet后確認。 [root@linux1 root]# ntsysv;(4)激活telnet服務 [root@linux1 root]# service xinetd restart;(5)設置答應root進行telnet登錄 [root @linux1 /root]# vi /etc/pam.d/login;將authrequiredpam_securetty.so這一行開頭添加#,從而注釋該行。;5.3 設置rlogin、rsh;由于在第一個節點上安裝oracle軟件時,oracle會自動將第一個節點上安裝完畢的文件拷貝到第二個節點上,因此需要配置rlogin和rsh以及rcp等。;(1)確定是否安裝了rsh-server軟件。 [root@linux1 root]# rpm –qa grep rsh;(2)假如沒有安裝,則從AS3安裝介質上找到該rpm包,并進行安裝。;(3)安裝好以后,需要啟動rsh、rlogin、rexec服務。輸入以下命令,并從彈出的框中選中rsh、rlogin、rexec后確認。 [root@linux1 root]# ntsysv;(4)激活rsh、rlongin服務 [root@linux1 root]# service xinetd restart;(5)修改/etc/securetty [root@linux1 root]# echo 'rexec' >> /etc/securetty;echo 'rlogin'>> /etc/securetty;echo 'rsh' >> /etc/securetty;(6)設置答應root進行rsh、rlogin [root @linux1 /root]# vi /etc/pam.d/rlogin;將authrequiredpam_securetty.so這一行開頭添加#,從而注釋該行。;(7)在/etc目錄下建立hosts.equiv文件,表示兩臺linux節點互相信任。 [root @linux1 /root]# vi /etc/hosts.equiv;在該文件里添加如下內容:;linux1 ;linux2 linux1-prv linux2-prv;(8)在root的$HOME目錄下,建立.rhosts文件。 [root @linux1 /root]# vi .rhosts;在該文件里添加如下內容。這樣,root用戶就可以直接rlogin、rsh而不用輸入密碼。;linux1 root linux2 root linux1-prv root linux2-prv root;(9)配置完以后,我們可以測試一下是否成功。 [root @linux1 /root]# rlogin linux2 [root @linux1 /root]# rsh –l root linux2 cat /etc/hosts [root @linux1 /root]# rcp /tmp/testlinux2:/tmp 6.修改linux內核參數以及其他相應配置 [root @linux1 /root]# vi /etc/sysctl.conf;在該文件末尾添加如下內容: kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.shmall = 2097152 kernel.sem = 250 32000 100 128 fs.file-max = 65536 這里,對每個參數值做個簡要的解釋和說明。;(1)shmmax:該參數定義了共享內存段的最大尺寸(以字節為單位)。缺省為32M,對于oracle來說,該缺省值太低了,通常將其設置為2G。 (2)shmmni:這個內核參數用于設置系統范圍內共享內存段的最大數量。該參數的默認值是 4096 。通常不需要更改。 (3)shmall:該參數表示系統一次可以使用的共享內存總量(以頁為單位)。缺省值就是2097152,通常不需要修改。 (4)sem:該參數表示設置的信號量。 (5)file-max:該參數表示文件句柄的最大數量。文件句柄設置表示在linux系統中可以打開的文件數量。;修改好內核以后,執行下面的命令使新的配置生效。 [root @linux1 /root]# /sbin/sysctl -p;通常,出于性能上的考慮,還需要進行如下的設定,以便改進Oracle用戶的有關 nofile(可打開的文件描述符的最大數)和nproc(單個用戶可用的最大進程數量)。方法如下: [root @linux1 /root]# vi /etc/security/limits.conf;在該文件里添加如下內容:;oracle soft nofile 65536 ;oracle hard nofile 65536 oracle soft nproc 16384 oracle hard nproc 163847.配置 hangcheck-timer 內核模塊;Oracle9202以前,都是使用watchdog來檢查系統是否掛起。從9202以后,oracle使用hangcheck-timer模塊。hangcheck-timer模塊被加載到內核中,能夠定時檢查系統是否掛起。有個可配置的參數用來表示多少時間以后系統沒響應就認為是掛起。該模塊在AS3中是自帶的。;使用如下命令檢查該模塊是否存在: [root @linux1 /root]# find /lib/modules -name 'hangcheck-timer.o';使用相應的參數加載該模塊: [root @linux1 /root]# /sbin/insmod hangcheck-timer hangcheck_tick=30hangcheck_margin=180;這里解釋一下兩個參數的含義:;hangcheck_tick:該參數定義了模塊啟動的間隔時段。其默認值為 60 秒。 Oracle建議將其設置為 30 秒。 hangcheck_margin:該參數定義了多少時間以后系統沒響應就認為是掛起。以秒為單位。其默認值為 180秒。Oracle 建議將其設置為 180 秒。;檢查該模塊是否被成功加載: [root @linux1 /root]# grep Hangcheck /var/log/messages;為了在linux重啟以后,自動加載該模塊,可以將加載模塊的命令添加到/etc/modules.conf中 [root @linux1 /root]# echo 'options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180' >> /etc/modules.conf8.創建oracle用戶和dba組 [root @linux1 /root]# groupadd dba [root @linux1 /root]# useradd –g dba oracle [root @linux1 /root]# passwd oracle;創建安裝oracle所需要的目錄。 [root @linux1 /root]# mkdir –p /oracle/ora9/prodUCt/9.2 [root @linux1 /root]# chown –R oracle.dba /oracle/ora9;;為oracle用戶配置.bashrc文件。 [root @linux1 /root]# su – oracle [oracle@linux1 oracle]$ vi .bashrc;將以下內容添加到.bashrc文件里。 eXPort LD_ASSUME_KERNEL=2.4.1 export ORACLE_BASE=/oracle/ora9 export ORACLE_HOME=/oracle/ora9/product/9.2 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH export ORACLE_OWNER=oracle export ORACLE_SID=rac9i1 export ORACLE_TERM=vt100 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH;以上步驟必須在兩個節點上分別完成。;注重: 紅色部分,在節點linux1上ORACLE_SID=rac9i1,而在節點linux2上則為ORACLE_SID=rac9i2。而藍色部分,很多資料上只是說LD_LIBRARY_PATH=$ORACLE_HOME/lib即可。但是經過筆者測試,只寫這些是不夠的,在下面srvconfig –init時會報錯。必須按照上面藍色部分的內容進行配置。;9.為共享設備劃分裸設備;通常,對于RAC,我們都會使用裸設備來存放數據文件等需要共享的數據庫文件。這就需要我們對共享存儲劃分出若干的裸設備,每個裸設備對應一個文件。;9.1 磁盤分區;我們要對共享存儲進行分區,該步驟只需要在其中一個節點上完成即可。筆者劃分了3個主分區(primary)和一個包含11個分區的擴展分區(extend)。注重,linux上最多只能劃分15個分區。超過的部分,linux是無法識別的。對每個分區的規劃如下所示:;分區名尺寸存放的文件 ;/dev/sdb110M用于存放Cluster Manager Quorum文件 /dev/sdb2350M回滾段表空間1:Undotbs1 /dev/sdb3350M回滾段表空間1:Undotbs2 /dev/sdb5500M系統表空間:system /dev/sdb610MSpfile /dev/sdb7300M臨時表空間:temp /dev/sdb8300M用戶表空間:user和indx,也可以不設置該分區 /dev/sdb910M控制文件:control file /dev/sdb1010M控制文件:control file /dev/sdb1120M第一個節點的第一組聯機日志文件 /dev/sdb1220M第一個節點的第二組聯機日志文件 /dev/sdb1320M第二個節點的第一組聯機日志文件 /dev/sdb1420M第二個節點的第二組聯機日志文件 /dev/sdb15100MSrvconfig模塊所需要的Shared Configuration文件;規劃好以后,我們可以開始實際創建這些分區了。進入linux,執行如下命令進入分區界面。 [root @linux1 /root]# fdisk /dev/sdb;首先輸入n,然后輸入p,再輸入1,回車接受缺省值,再輸入+10M,這樣我們就創建了/dev/sdb1。同樣的方法,我們可以創建sdb2和sdb3。再次輸入n,然后輸入e,回車接受缺省值,再回車接受缺省值,這樣,我們就創建了擴展分區sdb4,同時把剩下的空間全都給了sdb4。接下來,我們輸入n,然后回車接受缺省值,再輸入+500M,這樣,我們就創建了sdb5。同樣的方法,我們可以把剩下的所有分區都創建出來。;創建完畢以后,輸入p,顯示我們剛才所創建的所有分區,確認無誤以后,輸入w,從而保存我們所創建的分區,并更新分區表。;9.2 掛載裸設備;該步驟需要在兩個節點分別進行。對裸設備的規劃如下:;裸設備文件名掛載的分區存放的文件 /dev/raw/raw1/dev/sdb1Cluster Manager Quorum /dev/raw/raw2/dev/sdb2Undotbs1 /dev/raw/raw3/dev/sdb3Undotbs2 /dev/raw/raw4/dev/sdb5system /dev/raw/raw5/dev/sdb6Spfile /dev/raw/raw6/dev/sdb7temp /dev/raw/raw7/dev/sdb8user和indx /dev/raw/raw8/dev/sdb9control file /dev/raw/raw9/dev/sdb10control file /dev/raw/raw10/dev/sdb11Log1-thread1 /dev/raw/raw11/dev/sdb12Log2-thread1 /dev/raw/raw12/dev/sdb13Log3-thread2 /dev/raw/raw13/dev/sdb14Log4-thread2 /dev/raw/raw14/dev/sdb15Shared Configuration;確定了裸設備的規劃以后,將以下內容添加到/etc/rc.local文件。 raw /dev/raw/raw1 /dev/sdb1# Cluster Manager Quorum raw /dev/raw/raw2 /dev/sdb2#undotbs1 raw /dev/raw/raw3 /dev/sdb3#undotbs2 raw /dev/raw/raw4 /dev/sdb5#sys01 raw /dev/raw/raw5 /dev/sdb6#spfile raw /dev/raw/raw6 /dev/sdb7#temp01 raw /dev/raw/raw7 /dev/sdb8#user01&indx01 raw /dev/raw/raw8 /dev/sdb9#ctl1 ;raw /dev/raw/raw9 /dev/sdb10#ctl2 raw /dev/raw/raw10 /dev/sdb11#log1-thread1 raw /dev/raw/raw11 /dev/sdb12#log2-thread1 raw /dev/raw/raw12 /dev/sdb13#log3-thread2 raw /dev/raw/raw13 /dev/sdb14#log4-thread2 raw /dev/raw/raw14 /dev/sdb15#share configuration file;檢查無誤后,修改/dev/raw1、/dev/raw/raw2一直到/dev/raw/raw15這15個裸設備文件的宿主為oracle。 [root @linux1 /root]# chown oracle.dba /dev/raw/raw1 [root @linux1 /root]# chown oracle.dba /dev/raw/raw2 。。。。。。。 [root @linux1 /root]# chown oracle.dba /dev/raw/raw15;分別重新啟動兩個節點。啟動完畢以后,運行如下命令確定裸設備的配置情況。 [root @linux1 /root]# raw -aq;10.檢查安裝oracle所需要的linux模塊以及補丁;在兩個節點上分別確定以下這些rpm包是否都存在。;make-3.79 binutils-2.11 openmotif-2.2.2-16 setarch-1.3-1 compat-gcc-c++-7.3-2.96.122 compat-libstdc++-7.3-2.96.122 compat-gcc-7.3-2.96.122 compat-db-4.0.14-5 compat-libstdc++-devel-7.3-2.96.122;假如沒有,則從AS3的安裝介質上找到這些包并加以安裝。安裝好上面這些模塊以后,需要打補丁,補丁號為:3006854。可以到oracle官方網站下載該補丁,發送到兩個節點上以后,執行: [root @linux1 /root]# sh rhel3_pre_install.sh;11.安裝Oracle Cluster Manager;11.1 生成OCM治理文件;該OCM治理文件必須位于共享存儲上,按照我們的規劃,應該放在/dev/raw/raw1上。該步驟只需要在其中一個節點上執行即可。 [root @linux1 /root]# su - oracle [oracle@linux1 oracle]$ dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=1024;11.2 安裝OCM [oracle@linux1 oracle]$ su - root [root @linux1 /root]# mv /usr/bin/gcc /usr/bin/gcc323 [root @linux1 /root]# ln -s /usr/bin/gcc296 /usr/bin/gcc [root @linux1 /root]# mv /usr/bin/g++ /usr/bin/g++323 [root @linux1 /root]# ln -s /usr/bin/g++296 /usr/bin/g++;檢驗一下gcc和g++的版本。 [root@linux1 root]# gcc -v Reading specs from /usr/lib/gcc-lib/i386-redhat-linux7/2.96/specs gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-122) [root@linux1 root]# g++ -v Reading specs from /usr/lib/gcc-lib/i386-redhat-linux7/2.96/specs gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-122);將下載下來的oracle安裝介質(筆者下載的是ship_9204_linux_disk1.cpio.gz、ship_9204_linux_disk2.cpio.gz和ship_9204_linux_disk3.cpio.gz)拷貝到其中一個節點上。可以通過FTP拷貝也可以通過samba服務來拷貝。筆者個人傾向samba,很方便。拷貝完畢以后,使用如下命令解壓。 [root @linux1 /setup]# gunzip ship_9204_linux_disk1.cpio.gz [root @linux1 /setup]# gunzip ship_9204_linux_disk2.cpio.gz [root @linux1 /setup]# gunzip ship_9204_linux_disk3.cpio.gz [root @linux1 /setup]# cpio -idmv < ship_9204_linux_disk1.cpio [root @linux1 /setup]# rm –f ship_9204_linux_disk1.cpio [root @linux1 /setup]# cpio -idmv < ship_9204_linux_disk2.cpio [root @linux1 /setup]# rm –f ship_9204_linux_disk2.cpio [root @linux1 /setup]# cpio -idmv < ship_9204_linux_disk3.cpio [root @linux1 /setup]# rm –f ship_9204_linux_disk3.cpio;解壓完畢,在當前目錄下有三個目錄:Disk1、Disk2、Disk3。修改宿主信息。 [root @linux1 /setup]# chown –R oracle.dba Disk1 [root @linux1 /setup]# chown –R oracle.dba Disk2 [root @linux1 /setup]# chown –R oracle.dba Disk3;;設置xhost + [root @linux1 /setup]# xhost +;開始安裝OCM [root @linux1 /setup]# su - oracle [oracle@linux1 oracle]$ /oracle/setup/Disk1/runInstall.sh;在界面上,選擇安裝oracle cluster manager。點擊next,會要求你輸入public node,這時你分兩行輸入linux1和linux2。點擊next,會要求你輸入private node,這時你分兩行輸入linux1-prv和linux2-prv。點擊next,會要求輸入Quorum文件,這時輸入/dev/raw/raw1。點擊next開始安裝cluster manager軟件。這個軟件很小,安裝很快就會結束。;11.3 配置OCM [oracle@linux1 oracle]$ cd $ORACLE_HOME/oracm/admin [oracle@linux1 admin]$ cp cmcfg.ora.tmp cmcfg.ora [oracle@linux1 admin]$ vi cmcfg.ora;將該文件內容修改為如下內容:;HeartBeat=15000 ;ClusterName=Oracle Cluster Manager, version 9i PollInterval=1000 MissCount=20 PrivateNodeNames=linux1-prv linux2-prv PublicNodeNames=linux1 linux2 ServicePort=9998 HostName=linux1 CmDiskFile=/dev/raw/raw1;11.4 啟動OCM [oracle@linux1 oracle]$ rm $ORACLE_HOME/oracm/log/*.ts[oracle@linux1 oracle]$ cd $ORACLE_HOME/oracm/bin[oracle@linux1 bin]$ ./ocmstart.sh[oracle@linux1 bin]$ ps –efgrep oracm;;假如沒有發現oracm進程,則檢查$ORACLE_HOME/oracm/log/下的cm.log文件,查看錯誤消息。;;12.安裝Oracle軟件 [oracle@linux1 oracle]$ /oracle/setup/Disk1/runInstall.sh;安裝過程比較簡單,也沒有出現任何錯誤。注重選擇只安裝oracle軟件,不要安裝數據庫。;13.初始化Shared Configuration文件;Oracle軟件安裝完畢以后,開始設置Shared Configuration文件。 [oracle@linux1 oracle]$ su - root [root @linux1 /root]# mkdir -p /var/opt/oracle [root @linux1 /root]# touch /var/opt/oracle/srvConfig.loc [root @linux1 /root]# chown oracle:dba /var/opt/oracle/srvConfig.loc [root @linux1 /root]# chmod 755 /var/opt/oracle/srvConfig.loc;在srvConfig.loc文件中添加Shared Configuration文件所在的路徑。而筆者的Shared Configuration文件位于共享存儲上,對應/dev/raw/raw14。 [root @linux1 /root]# echo “srvconfig_loc=/dev/raw/raw14” >> /var/opt/oracle/srvConfig.loc;創建該Shared Configuration文件。 [root @linux1 /root]# su - oracle[oracle@linux1 oracle]$ dd if=/dev/zero of=/dev/raw/raw14 bs=1024 count=102400;;初始化該Shared Configuration文件 [oracle@linux1 oracle]$ srvconfig -init;筆者一開始執行報錯,結果把環境變量$LD_LIBRARY_PATH在.bashrc中設置為如下值后,再啟動就不會報錯了:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH。;14.創建數據庫;使用dbca創建數據庫還是很簡單的。不過,筆者還是走了些彎路。主要是undotbs1不能太小,筆者一開始設置為240M,結果建庫時總是報錯。后來加大到350M后,成功建庫。啟動dbca前,要先在兩個節點上分別啟動gsd進程。 [oracle@linux1 oracle]$ $ORACLE_HOME/bin/gsdctl start;然后啟動dbca。 [oracle@linux1 oracle]$ dbca;選擇創建cluster database,點擊next,把所有可以不選的組件都不選,點擊next后,在初始化參數設置的地方,修改spfile的路徑為:/dev/raw/raw5。然后點擊next,直到最后界面,筆者把表空間indx、users、tools都刪除了,為了建庫干凈。然后按照前面的規劃,分別把裸設備文件名填寫到對應的文件上去。注重,每個文件都不要設定autoextend on。最后選擇生成腳本,點擊finish。;當腳本生成完畢時,先別急著點ok。進入腳本所在目錄,檢查一下init.ora.xxxxxxxxxxxxx文件(這里xxxxxxxxxxxxx為隨即序列號)。著重檢查最后幾行,不知為何,自動生成的init.ora文件會有點問題。比如,筆者這里生成的init.ora.7232006164055內容為:;rac9i1.instance_name=rac9i ;rac9i2.instance_name=rac9i2 rac9i1.instance_number=1 rac9i2.instance_number=2 rac9i2.local_listener=LISTENER_RAC9I rac9i1.local_listener=LISTENER_RAC9I1 rac9i2.thread=2 rac9i1.thread=1 rac9i2.undo_tablespace=UNDOTBS2 rac9i1.undo_tablespace=UNDOTBS1;筆者用紅色標示出來的地方是有問題的,按照這樣的初始化參數建立起來的RAC數據庫,第二個節點沒有辦法通過負載均衡來訪問。同時,最好把local_listener和remote_listener修改掉。最后修改后的這塊內容為:;rac9i1.instance_name=rac9i1 rac9i2.instance_name=rac9i2 rac9i1.instance_number=1 rac9i2.instance_number=2 rac9i2.local_listener='(address=(protocol=tcp)(host=linux2)(port=1521))' rac9i2.remote_listener='(address=(protocol=tcp)(host=linux1)(port=1521))' rac9i1.local_listener='(address=(protocol=tcp)(host=linux1)(port=1521))' rac9i1.remote_listener='(address=(protocol=tcp)(host=linux2)(port=1521))' rac9i2.thread=2 rac9i1.thread=1 rac9i2.undo_tablespace=UNDOTBS2 rac9i1.undo_tablespace=UNDOTBS1 修改完這些內容以后,回到原來的dbca界面,點擊ok,就開始數據庫的正式安裝了。當然,也可以在dbca創建好數據庫以后再修改這些內容也是可以的。創建完數據庫以后,第二個節點的實例也會自動啟動。這時,整個RAC數據庫環境就已經搭建完畢了。;15.驗證并測試RAC數據庫;在服務器端,執行如下語句。觀察是否有兩個實例在運行。 SQL> select INSTANCE_NUMBER, STATUS,HOST_NAME from gv$instance; INSTANCE_NUMBER STATUSHOST_NAME --------------- ------------ ------------------ 1OPENlinux1 2OPENlinux2;15.1 測試負載均衡;在客戶端上修改tnsnames.ora文件,添加如下內容: rac = (DESCRIPTION = ;(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = linux2)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = linux1)(PORT = 1521)) ) (CONNECT_DATA = (service_name = rac9i) (failover_mode=(type=select)(method=basic)) ) (LOAD_BALANCE=ON) (FAILOVER=ON) );然后,為了能識別主機名linux1和linux2,筆者還修改了C:WINDOWSsystem32driversetc目錄下的hosts文件,添加如下內容:;134.251.114.140linux1 134.251.114.141linux2;最后,在命令窗口執行tnsping rac來檢驗是否能夠連通。檢測無誤以后,開始測試。分兩種方法,第一種方法是開兩個命令行窗口,在一個窗口中分別輸入如下的命令,然后再在另外一個窗口也輸入如下的命令。 D:>sqlplus /nolog SQL> connect sys/hanson@rac as sysdba SQL> select instance_name from v$instance; SQL> exit;但是,從結果看起來,并沒有實現負載均衡。兩個窗口出現的都是rac9i1。而不是筆者想象中的一個窗口是rac9i1,另一個窗口是rac9i2。筆者又開了一個命令行窗口,再次重復執行上面的命令,仍然顯示rac9i1。;換第二種測試方法,建立一個test.sql文件,內容如下: connect test/test@rac; select instance_name from v$instance; exit;然后,打開一個命令行窗口,反復執行如下命令: D:>sqlplus /nolog @c:test.sql;這時,顯示出來的實例名確實是負載均衡了,rac9i1和rac9i2交替出現。筆者認為,這樣的負載均衡意義似乎不是很大。;15.2 測試failover;實現failover,需要在客戶端的tnsnames.ora文件的CONNECT_DATA節點里添加如下行:;(failover_mode=(type=select)(method=basic));進入命令行窗口。 D:>sqlplus /nolog SQL> connect sys/hanson@rac as sysdba SQL> select instance_name from v$instance; INSTANCE_NAME --------------- rac9i1;這時,進入linux1節點,shutdown實例以后,再次回到上面的命令行窗口,再次執行如下語句: SQL> select instance_name from v$instance; INSTANCE_NAME --------------- rac9i2;;從結果可以看到,確實自動切換到了rac9i2實例上。說明failover起作用了。

排行榜
