詳解Oracle RAC入門(mén)和提高
本文將詳細(xì)講述Oracle RAC入門(mén)和提高,希望對(duì)廣大Oracle數(shù)據(jù)庫(kù)管理人員以及致力于學(xué)習(xí)Oracle數(shù)據(jù)庫(kù)的管理人有所幫助。
Oracle RAC 產(chǎn)品概述
Oracle Real Application Server,真正應(yīng)用集群,簡(jiǎn)稱(chēng)Oracle RAC ,是Oracle的并行集群,位于不同服務(wù)器系統(tǒng)的Oracle實(shí)例同時(shí)訪問(wèn)同一個(gè)Oracle數(shù)據(jù)庫(kù),節(jié)點(diǎn)之間通過(guò)私有網(wǎng)絡(luò)進(jìn)行通信,所有的控制文件、聯(lián)機(jī)日志和數(shù)據(jù)文件存放在共享的設(shè)備上,能夠被集群中的所有節(jié)點(diǎn)同時(shí)讀寫(xiě)。其系統(tǒng)架構(gòu)如下圖:
RAC提供的好處包括:
(1)多節(jié)點(diǎn)負(fù)載均衡;
(2)提供高可用:故障容錯(cuò)和無(wú)縫切換功能,將硬件和軟件錯(cuò)誤造成的影響最小化,下表是RAC與傳統(tǒng)的雙機(jī)熱備方式切換時(shí)間的對(duì)比:
(3)通過(guò)并行執(zhí)行技術(shù)提高事務(wù)響應(yīng)時(shí)間----通常用于數(shù)據(jù)分析系統(tǒng);
(4)通過(guò)橫向擴(kuò)展提高每秒交易數(shù)和連接數(shù) ;----通常對(duì)于聯(lián)機(jī)事務(wù)系統(tǒng);
(5)節(jié)約硬件成本,可以用多個(gè)廉價(jià)PC服務(wù)器代替昂貴的小型機(jī)或大型機(jī),同時(shí)節(jié)約相應(yīng)維護(hù)成本;
(6)可擴(kuò)展性好,可以方便添加刪除節(jié)點(diǎn),擴(kuò)展硬件資源;
RAC的缺點(diǎn)有:
相對(duì)單機(jī),管理更復(fù)雜,要求更高;
在系統(tǒng)規(guī)劃設(shè)計(jì)較差時(shí)性能甚至不如單節(jié)點(diǎn);
可能會(huì)增加軟件成本(如果使用高配置的pc服務(wù)器,Oracle一般按照CPU個(gè)數(shù)收費(fèi))
在Oracle9i之前,RAC的名稱(chēng)是OPS (Oracle parallel Server)。RAC 與 OPS 之間的一個(gè)較大區(qū)別是,RAC采用了Cache Fusion(高速緩存合并)技術(shù)。在 OPS 中,節(jié)點(diǎn)間的數(shù)據(jù)請(qǐng)求需要先將數(shù)據(jù)寫(xiě)入磁盤(pán),然后發(fā)出請(qǐng)求的節(jié)點(diǎn)才可以讀取該數(shù)據(jù)。使用Cache fusion時(shí),RAC的各個(gè)節(jié)點(diǎn)的數(shù)據(jù)緩沖區(qū)通過(guò)高速、低延遲的內(nèi)部網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)塊的傳輸。
Oracle RAC在中國(guó)各行各業(yè)使用都比較廣泛,包括通信移動(dòng)、金融服務(wù)、社會(huì)保障和電子商務(wù)等,據(jù)Oracle統(tǒng)計(jì),2007財(cái)年中國(guó)有500多家企業(yè)使用Oracle實(shí)時(shí)應(yīng)用集群,考慮到未登記信息,實(shí)際數(shù)字更高于這一數(shù)字。典型的用戶(hù)包括:中彩在線(xiàn)/OLTP/4節(jié)點(diǎn)/10gR2/AIX5.3、淘寶/DataWarehouse/4節(jié)點(diǎn)/10gR2/RHEL4、北京社保/6節(jié)點(diǎn) /HP_Alpha/ MA8000、建行證券系統(tǒng)/2節(jié)點(diǎn)/IBM_P595/EMC_DMX3、上海電力/2節(jié)點(diǎn)/Alpha_GS160、廣東移動(dòng)、山東網(wǎng)通等。
#p#
Oracle RAC/Clusterware的結(jié)構(gòu)和組件
一、RAC主要組件, 軟硬件兩部分
(1) 服務(wù)器 >= 2
(2) 操作系統(tǒng),推薦使用Oracle認(rèn)證的系統(tǒng);版本不要太老,也不要太新
(3) CPU/內(nèi)存 根據(jù)業(yè)務(wù)需要,內(nèi)存至少1G
(4) 本地磁盤(pán)空間,>=30G
(5) 網(wǎng)卡 >=2 ,推薦4個(gè)以上千兆網(wǎng)卡
(6) 私有以太網(wǎng)絡(luò),推薦千兆交換機(jī)以上
(7) HBA卡 ,如果是SAN,推薦2個(gè)冗余HBA
(8) 共享存儲(chǔ)設(shè)備,推薦SAN設(shè)備
(9) 存儲(chǔ)管理, ASM/Cluster LV/裸分區(qū)/CFS,不推薦用OCFS,卷管理軟件、多路徑軟件等
(10) 第三方集群軟件: 可選
(11) Oracle Clusterware 軟件
(12) Oracle RDBMS 軟件
二、Clusterware主要進(jìn)程
(1)crsd: 負(fù)責(zé)管理集群的高可用操作。管理的crs資源包括數(shù)據(jù)庫(kù)、實(shí)例、監(jiān)聽(tīng)、虛擬IP,ons,gds或者其他,操作包括啟動(dòng)、關(guān)閉、監(jiān)控及故障切換。改進(jìn)程由root用戶(hù)管理和啟動(dòng)。crsd如果有故障會(huì)導(dǎo)致系統(tǒng)重啟。
(2)cssd,管理各節(jié)點(diǎn)的關(guān)系,用于節(jié)點(diǎn)間通信,節(jié)點(diǎn)在加入或離開(kāi)集群時(shí)通知集群。該進(jìn)程由oracle用戶(hù)運(yùn)行管理。發(fā)生故障時(shí)cssd也會(huì)自動(dòng)重啟系統(tǒng)。
(3)oprocd – 集群進(jìn)程管理 —Process monitor for the cluster. 用于保護(hù)共享數(shù)據(jù)IO fencing。
僅在沒(méi)有使用vendor的集群軟件狀態(tài)下運(yùn)行
(4)evmd :事件檢測(cè)進(jìn)程,由oracle用戶(hù)運(yùn)行管理
三、Clusterware使用的共享設(shè)備
(1) Oracle Cluster Registry(OCR):記錄集群的配置信息;
(2) Voting disk : 即投票盤(pán),保存節(jié)點(diǎn)的成員信息,當(dāng)配置多個(gè)投票盤(pán)的時(shí)候個(gè)數(shù)必須為奇數(shù),每個(gè)節(jié)點(diǎn)必須同時(shí)能夠連接半數(shù)以上的投票盤(pán)才能夠存活;
四、安裝路徑的選擇
注:
(1)在Oracle RAC中,軟件不建議安裝在共享文件系統(tǒng)上;包括CRS_HOME和ORACLE_HOME,尤其是CRS軟件,推薦安裝在本地文件系統(tǒng)中,這樣在進(jìn)行軟件升級(jí),以及安裝patch和patchset的時(shí)候可以使用滾動(dòng)升級(jí)(rolling upgrade)的方式,減少計(jì)劃當(dāng)機(jī)時(shí)間。另外如果軟件安裝在共享文件系統(tǒng)也會(huì)增加單一故障點(diǎn)。
(2)如果使用ASM存儲(chǔ),需要為asm單獨(dú)安裝ORACLE軟件,獨(dú)立的ORACLE_HOME,易于管理和維護(hù),比如當(dāng)遇到asm的bug需要安裝補(bǔ)丁時(shí),就不會(huì)影響RDBMS文件和軟件。
(3)在Oracle 11gR2中將新增存儲(chǔ)選項(xiàng):acfs (Oracle ASM Cluster File System)
第三方集群
在Oracle9i中,除了Windows和Linux,在安裝RAC之前必須先安裝vendor clusterware,即第三方集群,包括IBM的HACMP, HP的ServiceGuard for oracle RAC, Sun cluster,Veritas SFRAC等,這一類(lèi)的集群軟件為Oracle RAC提供了下面的功能:
(1)共享的邏輯卷管理或者集群文件系統(tǒng)用于存放數(shù)據(jù)文件;
(2)提供了統(tǒng)一的集群的成員組管理;
(3)使用更健壯的SCSI-3 PGR機(jī)制來(lái)防止心跳故障(即裂腦split brain)導(dǎo)致的數(shù)據(jù)損壞,這種功能一般叫做IO fencing;
(4)提供效率更高的、更低延遲的心跳網(wǎng)絡(luò)用于cache fusion,可以相對(duì)減少TCP/IP的開(kāi)銷(xiāo),包括:
HP SGeRAC: HMP (Hyper Messaging Protocol),
Sun Cluster: RSM (Remote Shared Memory),
Veritas SFRAC: LLT (low-latency transport),
Compac True Cluster: RDG (reliable data grams);
通常如果要使用第三方集群的心跳協(xié)議,需要將$ORACLE_HOME/lib/libskgxpX.so文件替換為第三方集群
軟件提供的libskgxpX.so文件(其中X代表Oracle版本號(hào)9/10/11),skgxp 是System Kernel Generic Interface Inter-Process Communications的縮寫(xiě),是oracle開(kāi)放的一個(gè)應(yīng)用接口,用于傳輸GCS和GES 的數(shù)據(jù)。Oracle自帶的libskgxp文件定義的傳輸協(xié)議是UDP/IP。
5)提供擴(kuò)展的容災(zāi)方案,例如campus cluster/metro cluster/extended RAC;如下圖, 以Veritas的SFRAC為例,它提供兩種Oracle Extended RAC方案,方案一是使用Veritas Volume Manager對(duì)底層陣列進(jìn)行鏡像,提供同城容災(zāi)級(jí)別的實(shí)時(shí)數(shù)據(jù)保護(hù);方案二使用GCO/VVR對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)復(fù)制,可以實(shí)現(xiàn)距離更遠(yuǎn)、超過(guò)10km廣域網(wǎng)的容災(zāi);
(6)Veritas SFRAC 還提供了以下特性:
補(bǔ)充的Oracle ODM,可以使Oracle同時(shí)擁有文件系統(tǒng)的易管理和裸設(shè)備的性能;
標(biāo)準(zhǔn)的多路徑軟件(DMP),不需要再安裝其他軟件就可支持絕大多數(shù)磁盤(pán)陣列,在異構(gòu)SAN環(huán)境中有更好的兼容性;
從Oracle10g起,Oracle提供了自己的集群軟件,叫Oracle clusterware簡(jiǎn)稱(chēng)CRS,這個(gè)軟件是安裝oracle rac的前提,而上述第三方集群則成了安裝的可選項(xiàng)。同時(shí)提供了另外一個(gè)新特性叫做ASM,可以用于RAC下的共享磁盤(pán)設(shè)備的管理,還實(shí)現(xiàn)了數(shù)據(jù)文件的條帶化和鏡像,以提高性能和安全性 (S.A.M.E: stripe and mirror everything ) ,不再依賴(lài)第三方存儲(chǔ)軟件來(lái)搭建RAC系統(tǒng)。
那么Oracle是如何識(shí)別第三方集群的呢?
在安裝完第三方集群后,會(huì)在特定目錄下生成Oracle RAC接口文件,這個(gè)文件的作用就是上面的第二點(diǎn)功能:集群成員管理信息(cluster membership 簡(jiǎn)稱(chēng)CM)。在HPUX下該文件是/opt/nmapi/nmapi2/lib/pa20_64,在AIX/Solaris/Linux下這個(gè)文件是 /opt/ORCLcluster/lib/libskgxn2.so 。
當(dāng)安裝CRS的的檢查階段,就會(huì)檢測(cè)是否有該文件,如果有的話(huà),在安裝CRS過(guò)程中生成一個(gè)軟連接文件,文件名是ligskgxn2.so,指向上面的libskgxn2.so或pa20_64文件,這個(gè)軟連接的位置在CRS_HOME/lib/目錄;如果沒(méi)有第三方集群,那么CRS安裝過(guò)程中生成自己的libskgxn2.so文件。換句話(huà)說(shuō),在有第三方集群存在的情況下,CRS的集群成員信息是來(lái)自于第三方集群,兩套集群的成員信息保持一致和同步;沒(méi)有第三方集群情況時(shí),CRS自己管理成員信息。
通過(guò)查詢(xún)$CRS_HOME/log/hostname/cssd/ocssd.log可以看到css識(shí)別到的第三方集群,下面的例子分別是HACMP、SFRAC、SunCluster、ServiceGuide :
- [CSSD]2008-05-27 15:09:43.456 [1029] >TRACE: clssnm_skgxninit: initialized skgxn version (2/0/IBM AIX skgxn)
- [CSSD]2008-12-30 21:44:56.172 [1029] >TRACE: clssnm_skgxninit: initialized skgxn version (2/0/Veritas Cluster Server MM
- [CSSD]2007-08-10 02:19:39.572 [3] >TRACE: clssnm_skgxninit: initialized skgxn version (2/2/Oracle Solaris UDLM)
- [CSSD]2006-09-29 18:57:53.323 [5] >TRACE: clssnm_skgxninit: initialized skgxn version (2/0/Hewlett-Packard SKGXN 2.0)
在9i/8i中沒(méi)有css/crs,該信息可以在后臺(tái)進(jìn)程lmon的trace文件中得到(在bdump中);
在安裝Oracle 9i RAC/8i OPS的過(guò)程中,Oracle識(shí)別集群方法類(lèi)似。
在多個(gè)平臺(tái)上,如果兩個(gè)節(jié)點(diǎn)沒(méi)有正確鏈接libskgxn2文件,可能會(huì)導(dǎo)致第二個(gè)實(shí)例無(wú)法mount或出現(xiàn)ORA-600錯(cuò)誤。
Oracle支持的RAC環(huán)境
因?yàn)镺racle RAC本身比較復(fù)雜,在安裝和管理中可能會(huì)遇到各種問(wèn)題,涉及到OS、RDBMS、Cluster軟件和網(wǎng)絡(luò)、主機(jī)、存儲(chǔ)等硬件,為了避免不必要的問(wèn)題發(fā)生,在安裝之前,我們需要確認(rèn)安裝環(huán)境是否滿(mǎn)足要求,包括軟件和硬件兩方面,尤其是Vendor clusterware和OS 的版本的兼容性需要注意,可以從metalink中得到最新的Oracle官方認(rèn)證信息:登陸Metalink.oracle.com 選擇 Certify,選擇by product,選擇real application server,選擇對(duì)應(yīng)平臺(tái)就可以得到。下面列出一些關(guān)于硬件和平臺(tái)支持的常見(jiàn)問(wèn)題:
官方不支持的:Vmware, Sun LDOM ,Solaris Local Container/Zones
官方支持的: IBM LPAR, IBM VIOS(Virtual IO Server), Solaris Global Containers
RHEL GFS , ISCSI,
私有網(wǎng)絡(luò)(心跳線(xiàn))的支持: 不支持使用交叉線(xiàn),支持 Infiniband RDS (10gR2之后)
異構(gòu)環(huán)境:支持不同的硬件、但相同的軟件(OS/Oracle)組成的集群,不支持32位與64位系統(tǒng)間的集群
目前支持的NFS的server包括:
EMC Celerra
Fujitsu Filer NR1000 Series
IBM N Series
NetApp FAS, F, G Series
Pillar Data Systems Axiom 500
Sun StorageTek 5000 Series
Oracle Clusterware的心跳
Oracle clusterware 使用兩種心跳設(shè)備來(lái)驗(yàn)證成員的狀態(tài),保證集群的完整性;一是對(duì)voting disk的心跳,ocssd進(jìn)程每秒向votedisk寫(xiě)入一條心跳信息;二是節(jié)點(diǎn)間的私有以太網(wǎng)的心跳,兩種心跳機(jī)制都有一個(gè)對(duì)應(yīng)的超時(shí)時(shí)間,分別叫做 misscount和disktimeout:
misscount 用于定義節(jié)點(diǎn)間心跳通信的超時(shí),單位為秒;
disktimeout ,默認(rèn)200秒,定義css進(jìn)程與vote disk連接的超時(shí)時(shí)間;
reboottime ,發(fā)生裂腦并且一個(gè)節(jié)點(diǎn)被踢出后,這個(gè)節(jié)點(diǎn)將在reboottime的時(shí)間內(nèi)重啟;默認(rèn)是3秒;
其中misscount默認(rèn)值見(jiàn)下表
用下面的命令查看上述參數(shù)的實(shí)際值:
- 1. # crsctl get css misscount
- 2. # grep misscount $CRS_HOME/log/hostname/cssd/ocssd.log
- [CSSD]2008-11-27 22:29:42.397 [1] >TRACE: clssnmInitNMInfo: misscount set to 600
在下面兩種情況發(fā)生時(shí),css會(huì)踢出節(jié)點(diǎn)來(lái)保證數(shù)據(jù)的完整,:
(1) Private Network IO time > misscount,會(huì)發(fā)生split brain即裂腦現(xiàn)象,產(chǎn)生多個(gè)“子集群”(subcluster) ,這些子集群進(jìn)行投票來(lái)選擇哪個(gè)存活,踢出節(jié)點(diǎn)的原則按照下面的原則:
節(jié)點(diǎn)數(shù)目不一致的,節(jié)點(diǎn)數(shù)多的subcluster存活;節(jié)點(diǎn)數(shù)相同的,node ID小的節(jié)點(diǎn)存活。
(2) Vote Disk IO Time > disktimeout ,踢出節(jié)點(diǎn)原則如下:失去半數(shù)以上vote disk連接的節(jié)點(diǎn)將在reboottime的時(shí)間內(nèi)重啟;例如有5個(gè)vote disk,當(dāng)由于網(wǎng)絡(luò)或者存儲(chǔ)原因某個(gè)節(jié)點(diǎn)與其中>=3個(gè)vote disk連接超時(shí)時(shí),該節(jié)點(diǎn)就會(huì)重啟。當(dāng)一個(gè)或者兩個(gè)vote disk損壞時(shí)則不會(huì)影響集群的運(yùn)行。
可以手工修改這三個(gè)參數(shù)的值,單位都是秒:(謹(jǐn)慎使用)
- $CRS_HOME/bin/crsctl set css misscount
- $CRS_HOME/bin/crsctl set css reboottime [-force]
- $CRS_HOME/bin/crsctl set css disktimeout [-force]
- 或者重新設(shè)置成默認(rèn)值:crsctl unset css misscount
Clusterware的私有網(wǎng)絡(luò)
在Oracle 10g/11g中,Oracle的私有網(wǎng)絡(luò)(private network)包括clusterware的私有網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)實(shí)例的私有網(wǎng)絡(luò):
clusterware的私有網(wǎng)絡(luò)主要包括css數(shù)據(jù)的傳送,即用一種特殊的ping命令來(lái)檢測(cè)其他機(jī)器的狀態(tài);
數(shù)據(jù)庫(kù)實(shí)例的私有網(wǎng)絡(luò),包括RDMS和ASM的,用于cache fusion(GCS/GES)數(shù)據(jù)的傳輸。
當(dāng)我們只使用一個(gè)私有網(wǎng)卡的時(shí),同時(shí)傳送上面兩類(lèi)的數(shù)據(jù)。如果我們?cè)诎惭b時(shí)指定了兩個(gè)私有網(wǎng)卡,首先使用如下面$CRS_HOME/bin/oifcfg getif命令來(lái)得到所有網(wǎng)絡(luò)接口列表,這些信息保存在ocr中:
- # oifcfg getif
- en0 10.200.56.0 global public
- en3 192.168.3.0 global cluster_interconnect
- en5 192.168.5.0 global cluster_interconnect
情況會(huì)有所不同,clusterware的私有網(wǎng)絡(luò),目前(10g/11g)只能使用一個(gè)網(wǎng)絡(luò)接口,對(duì)應(yīng)于/etc/hosts中定義的private hostname的那個(gè)網(wǎng)卡,可以通過(guò)查看ocssd的log來(lái)確定:
當(dāng)/etc/hosts 中定義private hostname為192.168.3.233時(shí)看到 :
- [ CSSD]2009-01-16 17:34:12.406 [1029] >TRACE: clssgmPeerListener: Listening on (ADDRESS=(PROTOCOL=tcp)(DEV=12) (HOST=192.168.3.233)(PORT=45527))
這個(gè)是與其他節(jié)點(diǎn)css進(jìn)行通信的信息:
- [ CSSD]2009-01-16 17:36:27.463 [1029] >TRACE: clssgmConnectToNode:
- node 2 clsc (ADDRESS=(PROTOCOL=tcp)(DEV=12) (HOST=192.168.3.234)(PORT=37732)) - size 64 ver 1
當(dāng)/etc/hosts 中定義private hostname為192.168.5.233時(shí),css使用了另外一個(gè)網(wǎng)絡(luò):
- [ CSSD]2009-01-16 18:59:56.411 [1029] >TRACE: clssgmPeerListener:
- Listening on (ADDRESS=(PROTOCOL=tcp)(DEV=12) (HOST=192.168.5.233)(PORT=50415))
Oracle實(shí)例的私有網(wǎng)絡(luò)
Oracle實(shí)例的心跳網(wǎng)絡(luò)使用方式的優(yōu)先級(jí)從高到低如下:
(1) 如果使用了第三方集群的IPC,替換了對(duì)應(yīng)$ORACLE_HOME/lib/libskgxnX.so文件,那么數(shù)據(jù)庫(kù)實(shí)例的cache fusion會(huì)使用對(duì)應(yīng)的網(wǎng)絡(luò)協(xié)議,而忽略ocr中和數(shù)據(jù)庫(kù)初始化參數(shù)中cluster_interconnects的配置,下面的例子當(dāng)中就使用了 VCSIPC,可以從對(duì)應(yīng)的alert log中驗(yàn)證:
- db_name = r10g
- open_cursors = 300
- pga_aggregate_target = 1237319680
- Fri Mar 13 14:00:35 2009
- Oracle instance running with ODM: Veritas 6.0 ODM Library, Version 1.1
- cluster interconnect IPC version:
- VERITAS IPC 5.1.0.0 15:16:24 Feb 12 2009
- IPC Vendor 86 proto 76
- Version 1.0
- PMON started with pid=2, OS id=4399196
- DIAG started with pid=3, OS id=3936288
(2) 如果沒(méi)有使用第三方IPC,則優(yōu)先使用數(shù)據(jù)庫(kù)初始化參數(shù)的cluster_interconnects配置,這個(gè)參數(shù)的格式為if1:if2:...:ifn,可以不同于crs的私有網(wǎng)絡(luò),需要注意的是,該參數(shù)不支持多個(gè)網(wǎng)卡的故障切換;
(3) 沒(méi)有上面兩個(gè)配置,數(shù)據(jù)庫(kù)會(huì)使用oifcfg列出的心跳的網(wǎng)絡(luò),在對(duì)應(yīng)的告警日志中可以得到:
- Interface type 1 en6 192.168.61.0 configured from OCR for use as a cluster interconnect
- Interface type 1 en0 10.182.0.0 configured from OCR for use as a public interface
- . . . .
- Cluster communication is configured to use the following interface(s) for this instance
- 192.168.61.0
(4) 沒(méi)有1和2的配置,并且oifcfg也沒(méi)有配置cluster_interconnect,則數(shù)據(jù)庫(kù)會(huì)使用共有網(wǎng)絡(luò)進(jìn)行心跳信息的傳輸,這種配置其實(shí)是配置失敗的情況,數(shù)據(jù)庫(kù)雖然能夠啟動(dòng),但急需DBA修正,在告警日志中可以看到:
- WARNING: No cluster interconnect has been specified. Depending on
- the communication driver configured Oracle cluster traffic
- may be directed to the public interface of this machine.
- Oracle recommends that RAC clustered databases be configured
- with a private interconnect for enhanced security and
- performance.
對(duì)于一個(gè)已經(jīng)有的系統(tǒng),可以用下面幾種方法確認(rèn)數(shù)據(jù)庫(kù)實(shí)例的心跳配置,包括網(wǎng)卡名稱(chēng),IP地址,使用的網(wǎng)絡(luò)協(xié)議:
(1) 最簡(jiǎn)單的方法:可以在數(shù)據(jù)庫(kù)的后臺(tái)報(bào)警日志中得到。具體參見(jiàn)上面列出的告警日志;
(2) 使用oradebug ;
- SQL> oradebug setmypid
- SQL> oradebug ipc
- SQL> oradebug tracefile_name
找到對(duì)應(yīng)trace文件的這一行:socket no 10 IP 10.0.0.1 UDP 49197
(3) 從數(shù)據(jù)字典中得到(V$CLUSTER_INTERCONNECTS 和 V$CONFIGURED_INTERCONNECTS),或查詢(xún)x$ksxpia
- SQL> SELECT * FROM V$CLUSTER_INTERCONNECTS; ----Oracle 11g 開(kāi)始支持此試圖
- NAME IP_ADDRESS IS_ SOURCE
- ------------------------------ ---------------- --- -------------------------------
- en3 192.168.2.31 NO Oracle Cluster Repository
- en5 192.168.3.231 NO Oracle Cluster Repository
- SQL> SELECT * FROM V$CONFIGURED_INTERCONNECTS;
- NAME IP_ADDRESS IS_ SOURCE
- ------------------------------ ---------------- --- -------------------------------
- en3 192.168.2.31 NO Oracle Cluster Repository
- en5 192.168.3.231 NO Oracle Cluster Repository
- en0 10.200.59.231 YES Oracle Cluster Repository
- SQL> select * from x$ksxpia ;
- ADDR INDX INST_ID PUB_KSXPIA PICKED_KSXPIA NAME_KSXPIA IP_KSXPIA
- ---------------- ---------- ---------- ---------- --------------- --------------- ----------------
- 00000001104AAF28 0 1 N OCR en6 192.168.61.121
- 00000001104AAF28 1 1 Y OCR en0 10.182.6.211
為了避免心跳網(wǎng)絡(luò)成為系統(tǒng)的單一故障點(diǎn),簡(jiǎn)單地我們可以使用操作系統(tǒng)綁定的網(wǎng)卡來(lái)作為Oracle的心跳網(wǎng)絡(luò),以AIX為例,我們可以使用etherchannel技術(shù),假設(shè)系統(tǒng)中有ent0/1/2/3四塊網(wǎng)卡,我們綁定2和3作為心跳:
- #mkdev -c adapter -s pseudo -t ibm_ech -a adapter_names='ent2,ent3' ## 將生成網(wǎng)卡設(shè)備ent4
- #/usr/lib/methods/defif
- #lsdev -Cc adapter | grep ent
- #lsattr -El ent4
- #ifconfig en4 inet 192.168.3.231 netmask 255.255.255.0 up
- 在Solaris上可以使用dladm來(lái)創(chuàng)建鏈路聚合:
- # dladm create-aggr -d bge2 -d bge3 1
- # ifconfig aggr1 plumb 192.168.3.231 netmask 255.255.255.0 up
- # dladm show-aggr
- # ifconfig -a
同樣在HPUX和Linux對(duì)應(yīng)的技術(shù)分別叫APA和bonding。
UDP私有網(wǎng)絡(luò)的調(diào)優(yōu)
當(dāng)使用UDP作為數(shù)據(jù)庫(kù)實(shí)例間cashe fusion的通信協(xié)議時(shí),在操作系統(tǒng)上需要調(diào)整相關(guān)參數(shù),以提高UDP傳輸效率,并在較大數(shù)據(jù)時(shí)避免出現(xiàn)超出OS限制的錯(cuò)誤:
(1) UDP數(shù)據(jù)包發(fā)送緩沖區(qū):大小通常設(shè)置要大于(db_block_size * db_multiblock_read_count )+4k,
(2) UDP數(shù)據(jù)包接收緩沖區(qū):大小通常設(shè)置10倍發(fā)送緩沖區(qū);
(3) UDP緩沖區(qū)最大值:設(shè)置盡量大(通常大于2M)并一定要大于前兩個(gè)值;
各個(gè)平臺(tái)對(duì)應(yīng)查看和修改命令如下:
Solaris 查看
- ndd /dev/udp udp_xmit_hiwat udp_recv_hiwat udp_max_buf ;
- 修改 ndd -set /dev/udp udp_xmit_hiwat 262144
- ndd -set /dev/udp udp_recv_hiwat 262144
- ndd -set /dev/udp udp_max_buf 2621440
AIX 查看
- no -a |egrep “udp_|tcp_|sb_max”
- 修改 no -p -o udp_sendspace=262144
- no -p -o udp_recvspace=1310720
- no -p -o tcp_sendspace=262144
- no -p -o tcp_recvspace=262144
- no -p -o sb_max=2621440
Linux 查看
- 文件/etc/sysctl.conf
- 修改 sysctl -w net.core.rmem_max=2621440
- sysctl -w net.core.wmem_max=2621440
- sysctl -w net.core.rmem_default=262144
- sysctl -w net.core.wmem_default=262144
HP-UX 不需要
HP TRU64 查看 /sbin/sysconfig -q udp
修改: 編輯文件/etc/sysconfigtab
inet: udp_recvspace = 65536
udp_sendspace = 65536
Windows 不需要
常見(jiàn)安裝、管理錯(cuò)誤
1. 安裝CRS失敗,或執(zhí)行root.sh報(bào)錯(cuò),可能原因:
(1) 節(jié)點(diǎn)間的時(shí)間不同步,解決方法:使用ntp服務(wù)
(2) Linux下啟用了默認(rèn)的防火墻,導(dǎo)致執(zhí)行root.sh報(bào)錯(cuò):
Failure at final check of Oracle CRS stack.
10
解決方法:禁用iptables ,注釋/etc/pam.d/other ;
- # service iptables stop; # chkconfig iptables off.
(3) 裸設(shè)備的權(quán)限問(wèn)題,可能因?yàn)椴僮飨到y(tǒng)重新啟動(dòng)后權(quán)限發(fā)生變化。(RHEL4)
解決方法: 把 chown oracle:dba /dev/raw/raw* 命令加入到/etc/rc.local中,每次開(kāi)機(jī)自動(dòng)執(zhí)行
或者修改文件/etc/udev/permissions.d/50-udev.permissions
第113行raw/*:root:disk:0660 改成 raw/*:oracle:dba:0660
(4) Solaris使用了包括cylinder 0的磁盤(pán)分區(qū)來(lái)存儲(chǔ)OCR或者vote disk。
解決辦法:相關(guān)分區(qū)不應(yīng)該包括cylinder 0,可以從1開(kāi)始。
(5) 使用的公網(wǎng)IP地址不可路由,
解決方法:添加相關(guān)網(wǎng)關(guān)
(6) 在/etc/hosts 中沒(méi)有l(wèi)oopback地址,即127.0.0.1 localhost
(7) 主機(jī)名含有大些字母、減號(hào)或者下劃線(xiàn)等特殊字符;
(8) HPUX中oracle不要使用gnu的bash,修改使用默認(rèn)shell;
(9) 檢查操作系統(tǒng)、第三方集群是否是oracle官方支持的,是否需要補(bǔ)丁,比如在AIX5.3+HACMP上安裝
Oracle 10g/11g RAC,oslevel就需要06及以上;
(10) AIX平臺(tái),需要將共享設(shè)備的reserve_policy (reserve_lock) 屬性修改為no_reserve(no);
(11) 所有節(jié)點(diǎn)看到的OCR和vote設(shè)備的路徑名應(yīng)該一致,如果不一致,可以用軟連接解決;
(12) 心跳設(shè)備問(wèn)題或者ocr/votedisk 訪問(wèn)問(wèn)題,unix/linux查看有無(wú)/tmp/crsctl.*文件,得到錯(cuò)誤信息;
(13) 在CRS舊的安裝的環(huán)境中重新安裝失敗
解決方法: dd清除ocr和vote disk,并使用下面語(yǔ)句清理舊的crs配置文件
- rm -rf /usr/tmp/.oracle /var/tmp/.oracle /tmp/.oracle /etc/oracle/* /var/opt/oracle/*
- rm -rf /etc/init.cssd /etc/init.crs* /etc/init.evmd /etc/init.d/init.cssd /etc/init.d/init.crs
- rm -rf /etc/init.d/init.crsd /etc/init.d/init.evmd /etc/rc3.d/K96init.crs /etc/rc3.d/S96init.crs
- rm -rf /etc/rc.d/rc2.d/K96init.crs /etc/rc.d/rc2.d/S96init.crs
2 客戶(hù)端有時(shí)候報(bào)錯(cuò):
ORA-12545: Connect failed because target host or object does not exist
ORA-12545: 因目標(biāo)主機(jī)或?qū)ο蟛淮嬖? 連接失敗
解決方法:設(shè)置local_listener初始化參數(shù)
3 如果選擇節(jié)點(diǎn)界面出不來(lái)。
(1)HACMP環(huán)境中需要檢查oracle 用戶(hù)必須在 hagsuser組里.
(2)如果是hacmp5.4,需要打Oracle補(bǔ)丁6718715;
(3)可以使用集群配置文件cluster CONFIGURATION FILE ,內(nèi)容模板如下:
- MyCluster
- rac01 rac01-priv rac01-vip
- rac02 rac02-priv rac02-vip
- rac03 rac03-priv rac03-vip
- rac04 rac04-priv rac04-vip
4. AIX上數(shù)據(jù)庫(kù)啟動(dòng)報(bào)錯(cuò)
- ora-27504 IPC error creating OSD context
- ora-27300 OS system dependent operation:sendmsg failed with status:59
- ora-27301 OS failure message:Message too long
- ora-27302 failure occurred at:sskgxpsnd1
原因:沒(méi)有設(shè)置網(wǎng)絡(luò)參數(shù)udp_recvspace/udp_sendspace
5. Windows平臺(tái),ORA-600 [kccsbck_first]
解決方法:關(guān)閉Media Sense(媒體感知)
6. 系統(tǒng)循環(huán)重啟:
可能是CRS導(dǎo)致,如果因?yàn)閏rs,首先設(shè)置 crsctl disable crs 來(lái)禁止oracle crs的自動(dòng)啟動(dòng)。
查看OS、crsd和cssd的對(duì)應(yīng)日志,看/tmp/下是否有crs文件 (ls -lrt /tmp/crsctl*),確定crs失敗原因。
7. 第二個(gè)節(jié)點(diǎn)的數(shù)據(jù)實(shí)例無(wú)法mount,掛起或者報(bào)錯(cuò),
原因1:使用了vendor clusterware ,libskgxn2.so文件鏈接錯(cuò)誤,
解決方法:比較兩個(gè)節(jié)點(diǎn)的ORACLE_HOME/lib/libskgxn2和CRS_HOME/lib/libskgxn2*都是否相同,
如果不同需要重新link
原因2:任何平臺(tái)Oracle 9i,沒(méi)有設(shè)置網(wǎng)絡(luò)參數(shù)udp參數(shù)
導(dǎo)致udp_sendspace或者udp_recvspace小于 db_block_size * db_file_multiblock_read_count
解決方法:設(shè)置對(duì)應(yīng)參數(shù),如AIX上設(shè)置udp_recvspace = 65536 udp_sendspace = 65536
原因3:AIX/HACMP/Oracle9i,在hacmp中定義了service IP
解決方法:在初始化參數(shù)中定義cluster_interconnects
原因4:任何平臺(tái),設(shè)置了錯(cuò)誤的cluster_interconnects
解決方法:檢查并糾正此參數(shù),
8. 建庫(kù)時(shí)不能識(shí)別裸設(shè)備;
原因1:Oracle,10.2.0.3 ,很多平臺(tái)(比如aix和linux)有rawutl相關(guān)bug,
解決辦法:還原10.2.0.1中的rawutl工具,該程序在 $ORACLE_HOME/bin目錄中。
原因2:Oracle9i,AIX平臺(tái),需要設(shè)置環(huán)境變量export PGSD_SUBSYS=grpsvcs
9. evm資源自動(dòng)報(bào)錯(cuò)oac_init:2: Could not connect to server, clsc retcode = 9
解決方法:關(guān)閉 “UDP ICMP rejections”
- /etc/rc.d/init.d/iptables stop ;chkconfig iptables off
【編輯推薦】