天天看點

狗血記之RAC資料庫SQLPLUS啟庫

狗血記之RAC資料庫SQLPLUS啟庫

目錄

問題解決過程

反思總結

oracle的rac資料庫叢集現在已經被廣泛應用,最近在資料集市項目中将原來aix平台10g單節點資料庫遷移更新至x86平台11r2rac叢集資料庫,為了保證資料庫的高可用性和可擴充性,采用了rac的grid大叢集和資料庫小叢集方式(例如本次問題的環境是4節點asm叢集支撐2套2節點rac資料庫,每個執行個體1台主機)。部署好第一套2節點rac資料庫之後,因項目進展的需要,再添加2節點給另一個地市使用。在将grid和db叢集軟體、資料庫都建立完成之後,同僚告訴我新添加的2節點rac資料庫不能用sqlplus正常啟動,必須使用叢集指令啟動。憑着以往的經驗,rac節點的資料庫無論是用sqlplus還是叢集指令都必須可以在任意節點進行任意順序啟動,不需要按照特定的順序啟動。

現在這套rac節點資料庫還在安裝階段,還沒有投入使用,是以可以進行各種各樣的操作和測試。接到這個問題請求之後,首先進行測試,按照同僚的說法,先啟動1節點,後啟動2節點,資料庫可以使用sqlplus正常啟動;先啟動2節點,後啟動1節點,發現2節點可以正常啟動,1節點連nomount狀态都未能進入,就報錯退出。退出之後,就檢視資料庫的alert日志,發現在退出前報錯叢集無法進行通信。

狗血記之RAC資料庫SQLPLUS啟庫

根據報錯資訊分析,是由于叢集間無法通信,導緻資料庫無法啟動,那麼根據這一點提示資訊就拼命的從叢集通信方面入手。因為這2個節點是後期采用添加節點的方式添加進去,第一懷疑是不是添加節點加出了問題,反複詢問同僚,明确回複我在添加節點時無任何的報錯資訊。那麼就隻能從使用叢集指令對整個叢集進行檢查。使用了crsctl status resource –t ,crsctl check cluster –all,oifcfg,olsnodes,srvctl等指令進行檢查,檢查的結果都無異議,從中未能發現一點蛛絲馬迹。

狗血記之RAC資料庫SQLPLUS啟庫
狗血記之RAC資料庫SQLPLUS啟庫
狗血記之RAC資料庫SQLPLUS啟庫

再仔細對1節點的資料庫alert日志向上檢視,發現有列印私網通信位址為169.254.183.196,立即檢視資料庫的私網通信位址發現是192.168.110.12。此時就有一個疑問,資料庫alert日志中列印的私網ip位址與規劃的私網ip不一緻。這個時候隻好外事不決問百度,問了百度之後發現是oracle在11.2.0.2.0之後添加的新特性haip。

狗血記之RAC資料庫SQLPLUS啟庫

又因為項目趕進度,是以在内部進行商讨,看看有無遇到相似或相同的案例,結果聽同僚說過,他們遇到過,也是相同的問題,但沒有找到根本原因。後續申請協調各種資源進行分析 ,終于有了進一步的發現。發現在2節點使用sqlplus啟庫時,alert日志中列印的叢集ip有問題,叢集間通信應該使用私網,怎麼使用sqplus啟庫列印為公網ip,這點就特别疑惑了。

狗血記之RAC資料庫SQLPLUS啟庫

172.31.0.116這個ip在此套rac資料庫中定義為公網ip,那麼這個問題就初步歸結為2節點使用sqlplus啟庫會使用公網ip作為叢集的通信網絡。又再次對叢集的公網、私網等網絡進行核查和分析,并協調網絡廠家、作業系統廠家進行核查,都沒有發現問題。

到這裡之後,幾乎是山窮水盡,問題依然存在。再次百度,得到的答案是由于haip異常引起。于是分别獨立啟動單節點庫,檢視其對就的haip,發現1節點為169.254.183.196,2節點為172.31.0.116。

狗血記之RAC資料庫SQLPLUS啟庫

再次對2個節點的資料庫alert日志進行對比,發現其中存在一些不同的報錯資訊。1節點獨立啟庫,能夠正常擷取公網、私網的ip資訊。2節點則提示gpnp異常,未能擷取正常的私網、公網資訊。後續緊接着檢視gpnp的日志,發現gpnp在正常工作,未有任何的報錯資訊。

狗血記之RAC資料庫SQLPLUS啟庫
狗血記之RAC資料庫SQLPLUS啟庫
狗血記之RAC資料庫SQLPLUS啟庫
狗血記之RAC資料庫SQLPLUS啟庫

于是到這裡,突然靈光一閃,是不是可以用trace的方法跟蹤啟動過程,能否從trace中分析出2節點為什麼使用公網ip做為叢集通信。由于是啟庫,隻能重新啟動2節點至nomount狀态,然後建立pfile,在pfile中添加10046事件,然後使用pfile啟動資料庫至nomount狀态。然後到trace目錄中去檢視trace檔案。對trace檔案打開分析,發現trace檔案中提示gpnp中某個檔案無法通路。

狗血記之RAC資料庫SQLPLUS啟庫

使用ls指令對檔案進行檢視,發現的确不存該檔案,再仔細一看路徑,這個路徑不是grid叢集的安裝路徑。

狗血記之RAC資料庫SQLPLUS啟庫

仔細一看這個目錄,再結合作業系統為suse linux 11 sp2,初步确定為oracle使用者的環境變量問題。如果對2個節點oracle的環境變量進行對比,果然不同,2節點多了2行。

狗血記之RAC資料庫SQLPLUS啟庫

看到2節點多出來的2個環境變更ora_crs_home、ora_asm_home,立即找到suse linux為oracle特意準備的環境變量檔案/etc/profile.d/oracle.sh,立即将這個檔案重命名,然後退出會話,重新登陸,環境變量消失。于是使用2個會話視窗,1個檢視資料庫alert日志,另1個使用sqlplus啟庫,alert日志中顯示資料庫正常能夠擷取私網、公網的ip網絡,而且haip也是使用169網段的。待2節點使用sqlplus啟庫完成之後,再在1節點使用sqlplus啟庫,一切正常。然後再核查其他3個節點的/etc/profile.d/oracle.sh發現該檔案要麼被删除、要麼被重命名。

至此為止,經過不斷的折騰,這個問題終于被解決,但是回想整個解決過程,其實很冗長,也走了很多的彎路。

檢查資料庫alert日志,隻檢查出問題節點,沒有立即檢查未出問題節點。

未對作業系統及其對應的環境變量熟悉,其實/etc/profile.d/oracle.sh是suse專門為oracle定制的環境變量,加上這是第1次使用suse安裝oracle資料庫,經驗不足,也是其一。

其實也曾想過是不是配置有問題,引起此次問題。在其中曾讓當初部署的同僚按照oracle的官方文檔對作業系統配置進行一遍徹底的核查。但也未能核查出隐藏在/etc/profile.d/oracle.sh這個環境變量檔案。這也正是suse為oracle定制的特色。

作者介紹:夏海雁

新炬網絡公司進階技術專家,7年oracle資料庫、timesten記憶體資料庫運維管理經驗。

精通oracle 10g、11g資料庫管理和linux/unix系統管理。

擅長進行資料庫及叢集的故障診斷與系統優化,并持續專注于故障診斷技術的研究與實踐。

<b></b>

<b>本文來自雲栖社群合作夥伴"dbaplus",原文釋出時間:2016-01-06</b>