天天看點

詳解Oracle RAC入門和提高(3)

Oracle執行個體的私有網絡

Oracle執行個體的心跳網絡使用方式的優先級從高到低如下:

(1) 如果使用了第三方叢集的IPC,替換了對應$ORACLE_HOME/lib/libskgxnX.so檔案,那麼資料庫執行個體的cache fusion會使用對應的網絡協定,而忽略ocr中和資料庫初始化參數中cluster_interconnects的配置,下面的例子當中就使用了 VCSIPC,可以從對應的alert log中驗證:

  1. db_name = r10g  
  2. open_cursors = 300  
  3. pga_aggregate_target = 1237319680  
  4. Fri Mar 13 14:00:35 2009  
  5. Oracle instance running with ODM: Veritas 6.0 ODM Library, Version 1.1  
  6. cluster interconnect IPC version:  
  7. VERITAS IPC 5.1.0.0 15:16:24 Feb 12 2009  
  8. IPC Vendor 86 proto 76  
  9. Version 1.0  
  10. PMON started with pid=2, OS id=4399196  
  11. DIAG started with pid=3, OS id=3936288 

(2) 如果沒有使用第三方IPC,則優先使用資料庫初始化參數的cluster_interconnects配置,這個參數的格式為if1:if2:...:ifn,可以不同于crs的私有網絡,需要注意的是,該參數不支援多個網卡的故障切換;

(3) 沒有上面兩個配置,資料庫會使用oifcfg列出的心跳的網絡,在對應的告警日志中可以得到:

  1. Interface type 1 en6 192.168.61.0 configured from OCR for use as a cluster interconnect  
  2. Interface type 1 en0 10.182.0.0 configured from OCR for use as a public interface  
  3. . . . .  
  4. Cluster communication is configured to use the following interface(s) for this instance  
  5. 192.168.61.0 

(4) 沒有1和2的配置,并且oifcfg也沒有配置cluster_interconnect,則資料庫會使用共有網絡進行心跳資訊的傳輸,這種配置其實是配置失敗的情況,資料庫雖然能夠啟動,但急需DBA修正,在告警日志中可以看到:

  1. WARNING: No cluster interconnect has been specified. Depending on  
  2. the communication driver configured Oracle cluster traffic  
  3. may be directed to the public interface of this machine.  
  4. Oracle recommends that RAC clustered databases be configured  
  5. with a private interconnect for enhanced security and  
  6. performance. 

對于一個已經有的系統,可以用下面幾種方法确認資料庫執行個體的心跳配置,包括網卡名稱,IP位址,使用的網絡協定:

(1) 最簡單的方法:可以在資料庫的背景報警日志中得到。具體參見上面列出的告警日志;

(2) 使用oradebug ;

  1. SQL> oradebug setmypid  
  2. SQL> oradebug ipc  
  3. SQL> oradebug tracefile_name 

找到對應trace檔案的這一行:socket no 10 IP 10.0.0.1 UDP 49197

(3) 從資料字典中得到(V$CLUSTER_INTERCONNECTS 和 V$CONFIGURED_INTERCONNECTS),或查詢x$ksxpia

  1. SQL> SELECT * FROM V$CLUSTER_INTERCONNECTS; ----Oracle 11g 開始支援此試圖  
  2. NAME IP_ADDRESS IS_ SOURCE  
  3. ------------------------------ ---------------- --- -------------------------------  
  4. en3 192.168.2.31 NO Oracle Cluster Repository  
  5. en5 192.168.3.231 NO Oracle Cluster Repository  
  6. SQL> SELECT * FROM V$CONFIGURED_INTERCONNECTS;  
  7. NAME IP_ADDRESS IS_ SOURCE  
  8. ------------------------------ ---------------- --- -------------------------------  
  9. en3 192.168.2.31 NO Oracle Cluster Repository  
  10. en5 192.168.3.231 NO Oracle Cluster Repository  
  11. en0 10.200.59.231 YES Oracle Cluster Repository  
  12. SQL> select * from x$ksxpia ;  
  13. ADDR INDX INST_ID PUB_KSXPIA PICKED_KSXPIA NAME_KSXPIA IP_KSXPIA  
  14. ---------------- ---------- ---------- ---------- --------------- --------------- ----------------  
  15. 00000001104AAF28 0 1 N OCR en6 192.168.61.121  
  16. 00000001104AAF28 1 1 Y OCR en0 10.182.6.211 

為了避免心跳網絡成為系統的單一故障點,簡單地我們可以使用作業系統綁定的網卡來作為Oracle的心跳網絡,以AIX為例,我們可以使用etherchannel技術,假設系統中有ent0/1/2/3四塊網卡,我們綁定2和3作為心跳:

  1. #mkdev -c adapter -s pseudo -t ibm_ech -a adapter_names='ent2,ent3' ## 将生成網卡裝置ent4  
  2. #/usr/lib/methods/defif  
  3. #lsdev -Cc adapter | grep ent  
  4. #lsattr -El ent4  
  5. #ifconfig en4 inet 192.168.3.231 netmask 255.255.255.0 up  
  6. 在Solaris上可以使用dladm來建立鍊路聚合:  
  7. # dladm create-aggr -d bge2 -d bge3 1  
  8. # ifconfig aggr1 plumb 192.168.3.231 netmask 255.255.255.0 up  
  9. # dladm show-aggr  
  10. # ifconfig -a 

同樣在HPUX和Linux對應的技術分别叫APA和bonding。

UDP私有網絡的調優

當使用UDP作為資料庫執行個體間cashe fusion的通信協定時,在作業系統上需要調整相關參數,以提高UDP傳輸效率,并在較大資料時避免出現超出OS限制的錯誤:

(1) UDP資料包發送緩沖區:大小通常設定要大于(db_block_size * db_multiblock_read_count )+4k,

(2) UDP資料包接收緩沖區:大小通常設定10倍發送緩沖區;

(3) UDP緩沖區最大值:設定盡量大(通常大于2M)并一定要大于前兩個值;

各個平台對應檢視和修改指令如下:

Solaris 檢視

  1. ndd /dev/udp udp_xmit_hiwat udp_recv_hiwat udp_max_buf ;  
  2. 修改 ndd -set /dev/udp udp_xmit_hiwat 262144  
  3. ndd -set /dev/udp udp_recv_hiwat 262144  
  4. ndd -set /dev/udp udp_max_buf 2621440 

AIX 檢視

  1. no -a |egrep “udp_|tcp_|sb_max”  
  2. 修改 no -p -o udp_sendspace=262144 
  3. no -p -o udp_recvspace=1310720 
  4. no -p -o tcp_sendspace=262144 
  5. no -p -o tcp_recvspace=262144 
  6. no -p -o sb_max=2621440 

Linux 檢視

  1. 檔案/etc/sysctl.conf  
  2. 修改 sysctl -w net.core.rmem_max=2621440 
  3. sysctl -w net.core.wmem_max=2621440 
  4. sysctl -w net.core.rmem_default=262144 
  5. 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 不需要

常見安裝、管理錯誤

1. 安裝CRS失敗,或執行root.sh報錯,可能原因:

(1) 節點間的時間不同步,解決方法:使用ntp服務

(2) Linux下啟用了預設的防火牆,導緻執行root.sh報錯:

Failure at final check of Oracle CRS stack.

10

解決方法:禁用iptables ,注釋/etc/pam.d/other ;

  1. # service iptables stop; # chkconfig iptables off. 

(3) 裸裝置的權限問題,可能因為作業系統重新啟動後權限發生變化。(RHEL4)

解決方法: 把 chown oracle:dba /dev/raw/raw* 指令加入到/etc/rc.local中,每次開機自動執行

或者修改檔案/etc/udev/permissions.d/50-udev.permissions

第113行raw/*:root:disk:0660 改成 raw/*:oracle:dba:0660

(4) Solaris使用了包括cylinder 0的磁盤分區來存儲OCR或者vote disk。

解決辦法:相關分區不應該包括cylinder 0,可以從1開始。

(5) 使用的公網IP位址不可路由,

解決方法:添加相關網關

(6) 在/etc/hosts 中沒有loopback位址,即127.0.0.1 localhost

(7) 主機名含有大些字母、減号或者下劃線等特殊字元;

(8) HPUX中oracle不要使用gnu的bash,修改使用預設shell;

(9) 檢查作業系統、第三方叢集是否是oracle官方支援的,是否需要更新檔,比如在AIX5.3+HACMP上安裝

Oracle 10g/11g RAC,oslevel就需要06及以上;

(10) AIX平台,需要将共享裝置的reserve_policy (reserve_lock) 屬性修改為no_reserve(no);

(11) 所有節點看到的OCR和vote裝置的路徑名應該一緻,如果不一緻,可以用軟連接配接解決;

(12) 心跳裝置問題或者ocr/votedisk 通路問題,unix/linux檢視有無/tmp/crsctl.*檔案,得到錯誤資訊;

(13) 在CRS舊的安裝的環境中重新安裝失敗

解決方法: dd清除ocr和vote disk,并使用下面語句清理舊的crs配置檔案

  1. rm -rf /usr/tmp/.oracle /var/tmp/.oracle /tmp/.oracle /etc/oracle/* /var/opt/oracle/*  
  2. rm -rf /etc/init.cssd /etc/init.crs* /etc/init.evmd /etc/init.d/init.cssd /etc/init.d/init.crs  
  3. rm -rf /etc/init.d/init.crsd /etc/init.d/init.evmd /etc/rc3.d/K96init.crs /etc/rc3.d/S96init.crs  
  4. rm -rf /etc/rc.d/rc2.d/K96init.crs /etc/rc.d/rc2.d/S96init.crs 

2 用戶端有時候報錯:

ORA-12545: Connect failed because target host or object does not exist

ORA-12545: 因目标主機或對象不存在, 連接配接失敗

解決方法:設定local_listener初始化參數

3 如果選擇節點界面出不來。

(1)HACMP環境中需要檢查oracle 使用者必須在 hagsuser組裡.

(2)如果是hacmp5.4,需要打Oracle更新檔6718715;

(3)可以使用叢集配置檔案cluster CONFIGURATION FILE ,内容模闆如下:

  1. MyCluster  
  2. rac01 rac01-priv rac01-vip  
  3. rac02 rac02-priv rac02-vip  
  4. rac03 rac03-priv rac03-vip  
  5. rac04 rac04-priv rac04-vip 

4. AIX上資料庫啟動報錯

  1. ora-27504 IPC error creating OSD context  
  2. ora-27300 OS system dependent operation:sendmsg failed with status:59  
  3. ora-27301 OS failure message:Message too long  
  4. ora-27302 failure occurred at:sskgxpsnd1 

原因:沒有設定網絡參數udp_recvspace/udp_sendspace

5. Windows平台,ORA-600 [kccsbck_first]

解決方法:關閉Media Sense(媒體感覺)

6. 系統循環重新開機:

可能是CRS導緻,如果因為crs,首先設定 crsctl disable crs 來禁止oracle crs的自動啟動。

檢視OS、crsd和cssd的對應日志,看/tmp/下是否有crs檔案 (ls -lrt /tmp/crsctl*),确定crs失敗原因。

7. 第二個節點的資料執行個體無法mount,挂起或者報錯,

原因1:使用了vendor clusterware ,libskgxn2.so檔案連結錯誤,

解決方法:比較兩個節點的ORACLE_HOME/lib/libskgxn2和CRS_HOME/lib/libskgxn2*都是否相同,

如果不同需要重新link

原因2:任何平台Oracle 9i,沒有設定網絡參數udp參數

導緻udp_sendspace或者udp_recvspace小于 db_block_size * db_file_multiblock_read_count

解決方法:設定對應參數,如AIX上設定udp_recvspace = 65536 udp_sendspace = 65536

原因3:AIX/HACMP/Oracle9i,在hacmp中定義了service IP

解決方法:在初始化參數中定義cluster_interconnects

原因4:任何平台,設定了錯誤的cluster_interconnects

解決方法:檢查并糾正此參數,

8. 建庫時不能識别裸裝置;

原因1:Oracle,10.2.0.3 ,很多平台(比如aix和linux)有rawutl相關bug,

解決辦法:還原10.2.0.1中的rawutl工具,該程式在 $ORACLE_HOME/bin目錄中。

原因2:Oracle9i,AIX平台,需要設定環境變量export PGSD_SUBSYS=grpsvcs

  1. /etc/rc.d/init.d/iptables stop ;chkconfig iptables off