【故障處理】DBCA建庫詭異問題處理--rac環境不能建立rac庫

lhrbest發表於2016-07-11

【故障處理】DBCA建庫詭異問題處理--rac環境不能建立rac

  1. BLOG文件結構圖

  1. 前言部分


  1. 導讀和注意事項

各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~

dbca靜默建立rac庫

② Inventory目錄作用及其2種重建方法(重點)

③ rac環境dbca工具不能建立rac庫的解決辦法

④ dbca靜默建庫常見問題處理

⑤ 重建CRS叢集環境執行root.sh指令碼


Tips

① 本文在ITpub(http://blog.itpub.net/26736162)和部落格園(http://www.cnblogs.com/lhrbest)有同步更新

② 文章中用到的所有程式碼,相關軟體,相關資料請前往小麥苗的雲盤下載(http://blog.itpub.net/26736162/viewspace-1624453/

③ 若文章程式碼格式有錯亂,推薦使用搜狗、360或QQ瀏覽器,也可以下載pdf格式的文件來檢視,pdf文件下載地址:http://blog.itpub.net/26736162/viewspace-1624453/

本篇BLOG中命令的輸出部分需要特別關注的地方我都用灰色背景和粉紅色字型來表示,比如下邊的例子中,thread 1的最大歸檔日誌號為33thread 2的最大歸檔日誌號為43是需要特別關注的地方;而命令一般使用黃色背景和紅色字型注;對程式碼或程式碼輸出部分的注釋一般採用藍色字型表示

本文如有錯誤或不完善的地方請大家多多指正,ITPUB留言或QQ皆可,您的批評指正是我寫作的最大動力。



  1. 故障分析及解決過程


  1. 故障環境介紹


專案

source db

db 型別

RAC

db version

11.2.0.4

db 儲存

ASM

OS版本及kernel版本

AIX 64 6.1.0.0



  1. 故障發生現象及報錯資訊

小麥苗採用dbca -silent+nodeinifo建立rac庫,原來用的好好的命令,結果在這個rac環境上建立出來的庫成了單例項的,很是鬱悶,,,,且看故障發生的現象:

大家看到這裡的安裝百分比是1%->3%->10%-17%.....,而rac庫建立的時候進度百分比應該是1%->3%->9%-15%.....,如下圖所示:


接下來小麥苗嘗試瞭如下的幾種方式:①dbca採用響應檔案的形式,②dbca圖形介面的方式,都是同樣的情況。


我的環境dbca圖形介面的第一張圖:



而正常rac環境下dbca圖形介面的第一步圖應該是:

以上都是目前出現的問題,初步預估是哪個配置檔案出錯了,dbca不能判斷叢集環境。


  1. 故障分析及解決過程


起初小麥苗以為是叢集出現了問題,在萬般無奈的情況下執行root.sh重建了叢集,按照以前的經驗,這個終極大招執行後叢集肯定可以恢復到正常的情況下,結果呢?結果還是令小麥苗很傷心,情況依舊沒有解決。重新執行root.sh的命令如下(注:重新執行root.sh並不會清掉db的資料):

ocrconfig -showbackup

ocrconfig -manualbackup



$ORACLE_HOME/crs/install/rootcrs.pl -deconfig -force -verbose

ls -l $ORACLE_BASE/Clusterware/ckptGridHA*

find $ORACLE_HOME/gpnp/* -type f

find $ORACLE_HOME/gpnp/* -type f -exec rm -rf {} \;




$ORACLE_HOME/crs/install/rootcrs.pl -deconfig -force -verbose -lastnode -keepdg

ls -l $ORACLE_BASE/Clusterware/ckptGridHA*

find $ORACLE_HOME/gpnp/* -type f

find $ORACLE_HOME/gpnp/* -type f -exec rm -rf {} \;



ipcs

$ORACLE_HOME/root.sh

/oracle/app/11.2.0/grid/perl/bin/perl -I/oracle/app/11.2.0/grid/perl/lib -I/oracle/app/11.2.0/grid/crs/install /oracle/app/11.2.0/grid/crs/install/rootcrs.pl


ipcs

$ORACLE_HOME/root.sh


---crs的配置檔案

---$ORACLE_HOME/crs/install/crsconfig_params

-- GRID

export DISPLAY=22.188.216.132:0.0

$ORACLE_HOME/crs/config/config.sh



這個終極大招已經使用過了,問題沒有解決只能說明不是許可權的問題,也不是叢集的問題,而是DB環境的問題。

於是硬著頭皮分析分析dbca的日誌,dbca建立庫的時候日誌在:11g:$ORACLE_BASE/cfgtoollogs/dbca , 10g:$ORACLE_HOME/cfgtoollogs/dbca

裡邊有trace.log檔案,拿到手,搜了下cluster,發現一個錯誤:

[main] [ 2016-07-05 17:37:30.694 GMT+08:00 ] [HAUtils.getDefaultListenerProperties:1666] PRCR-1001 : Resource ora.LISTENER.lsnr does not exist
PRCR-1001 : Resource ora.LISTENER.lsnr does not exist
    at oracle.cluster.impl.common.SoftwareModuleImpl.crsResource(SoftwareModuleImpl.java:776)
    at oracle.cluster.impl.nodeapps.ListenerImpl.crsResource(ListenerImpl.java:1107)

ora.LISTENER.lsnr該資源不存在,那就手動建立該資源:

報錯了,應該是監聽已經存在了,重新新增進crs中:

原本以為就是這個原因導致的,結果新增完ora.LISTENER.lsnr後還是單例項的,鬱悶。。。更鬱悶的是第二次建立後,trace檔案中已經沒有任何錯誤了,無論搜error或fail都搜不到,但是建立的資料庫還是單例項,,,第二次建立的日誌:

有種深深的挫敗感,於是解決同事碰到的那個DG問題,參考:http://blog.itpub.net/26736162/viewspace-2121688/時間就這樣過了2天,到了7月8號,手頭又沒什麼事情了,想起來dbca這個問題,想來想去還是得從日誌入手,老子一行一行的看,總能看出點東西來,但這次我比對的看,就是找一個dbca可以建立rac的環境,生成日誌來分析差異,結果令我震驚了。

當小麥苗看到第5行的日誌的時候,發現一個null的問題,Current Version From Inventory: null,截圖如下:

錯誤環境截圖:

而正常環境的rac是這個樣子的:

可以看到正常環境下,可以獲取到Homeinfo和Current Version From Inventory的值,當看到Inventory這個詞的時候我就想我已經找到問題的答案了。應該是Inventory這個目錄出現了問題,標準點的說法應該是/oracle/app/oraInventory/ContentsXML/inventory.xml這個檔案的內容有問題了。Inventory目錄存放的是Oracle軟體安裝的目錄資訊,Oracle升級也需要這個目錄,執行opatch lspatches也需要這個目錄。oraInventory目錄的位置在/etc/oraInst.loc中記錄,11g中我們可以透過$ORACLE_HOME/oui/bin/attachHome.sh來重建這個目錄。


在其中的1個節點上分別用oraclegrid來執行:

[ZFLHRDB1:root]:/oracle/app/oraInventory>$ORACLE_HOME/oui/bin/attachHome.sh

The user is root. Oracle Universal Installer cannot continue installation if the user is root.

A file or directory in the path name does not exist.
[ZFLHRDB1:root]:/oracle/app/oraInventory>su - grid  
[ZFLHRDB1:grid]:/home/grid>$ORACLE_HOME/oui/bin/attachHome.sh
Starting Oracle Universal Installer...
 
Checking swap space: must be greater than 500 MB.   Actual 8192 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
The inventory is located at /oracle/app/oraInventory
'AttachHome' was successful.
[ZFLHRDB1:grid]:/home/grid>cd /oracle/app/oraInventory/ContentsXML
[ZFLHRDB1:grid]:/oracle/app/oraInventory/ContentsXML>more inv*
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2013, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
   <SAVED_WITH>11.2.0.4.0</SAVED_WITH>
   <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="Ora11g_gridinfrahome1" LOC="/oracle/app/11.2.0/grid" TYPE="O" IDX="1" CRS="true">
   <NODE_LIST>
      <NODE NAME="ZFLHRDB1"/>
      <NODE NAME="ZFLHRDB2"/>
   </NODE_LIST>
</HOME>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>
[ZFLHRDB1:grid]:/oracle/app/oraInventory/ContentsXML>exit
[ZFLHRDB1:root]:/oracle/app/oraInventory>su - oracle
[ZFLHRDB1:oracle]:/oracle>$ORACLE_HOME/oui/bin/attachHome.sh
Starting Oracle Universal Installer...
 
Checking swap space: must be greater than 500 MB.   Actual 8192 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
The inventory is located at /oracle/app/oraInventory
'AttachHome' was successful.
[ZFLHRDB1:oracle]:/oracle>cd /oracle/app/oraInventory/ContentsXML
[ZFLHRDB1:oracle]:/oracle/app/oraInventory/ContentsXML>more inv*
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2013, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
   <SAVED_WITH>11.2.0.4.0</SAVED_WITH>
   <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="Ora11g_gridinfrahome1" LOC="/oracle/app/11.2.0/grid" TYPE="O" IDX="1" CRS="true">
   <NODE_LIST>
      <NODE NAME="ZFLHRDB1"/>
      <NODE NAME="ZFLHRDB2"/>
   </NODE_LIST>
</HOME>
<HOME NAME="DbHome1" LOC="/oracle/app/oracle/product/11.2.0/db" TYPE="O" IDX="2">
   <NODE_LIST>
      <NODE NAME="ZFLHRDB1"/>
      <NODE NAME="ZFLHRDB2"/>
   </NODE_LIST>
</HOME>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>




重建Inventory這個目錄後重新執行建庫指令碼:

已經正常了,唉,o(︶︿︶)o 唉,折騰了這麼久原來是這個檔案的問題,至於新環境為啥這個目錄的配置檔案不全,這個估計得追溯到rac的安裝過程了,這個就不去糾結了。



  1. 模擬讓故障重現

我們再來看看/oracle/app/oraInventory/ContentsXML/inventory.xml檔案的內容:

對了,看仔細了,檔案中有2個部分,若把藍色字型的部分刪掉,或者把/oracle/app/oraInventory/ContentsXML/inventory.xml的許可權修改為root使用者,那麼執行dbca的時候將又回到單庫的時代,原來dbca會從這裡去獲取是否叢集環境,小麥苗閱讀了dbca這個shell指令碼,無奈最後發現是呼叫的java,但java這是個二進位制檔案不是shell指令碼,所以就無法知道到底從哪裡獲取的叢集環境資訊。

小麥苗已親自測試過,各位朋友測試過了嗎????

  1. 關於重建Inventory目錄的2種辦法

重建Inventory目錄的時候,生成的log檔案在/oracle/app/oraInventory/logs下。

  1. 方法一:$ORACLE_HOME/oui/bin/attachHome.sh

這篇文件中提到有一個指令碼$ORACLE_HOME/oui/bin/attachHome.sh可以重建Inventory目錄,但是我們可以看到在不同的使用者下(grid和oracle),其OHOME的變數值不同,所以若單獨建立可以執行該指令碼即可。

備份2個節點的Inventory目錄,並重建空的Inventory目錄,然後分別在grid和oracle使用者下執行$ORACLE_HOME/oui/bin/attachHome.sh命令即可,注意只需要在其中的一個節點上執行即可。

  1. 方法二:叢集下統一建立

可以去小麥苗的雲盤下載該文件:


根據MOS(MOS:413939.1)的介紹,重建Inventory的步驟:

接下來分別備份2個節點的Inventory目錄,並重建空的Inventory目錄:

以下命令用grid使用者在節點一執行即可,節點二自動建立:

注意的2點:

a-Do not try attachHome in all the nodes, which may corrupt the inventory and it results in OUI-10197:Unable to create a new Oracle Home at /u01/app/oracle/product/10.2.0/crs_1. Oracle Home already exists at this location. Select another location. Attaching Home in one node will be propagated to other nodes.

b-Make absolutely sure you are have backed up the original inventory before starting this procedure, so that you can revert if necessary.



  1. 故障處理總結

    1. rac環境不能建立rac庫

在叢集環境中, dbca不能建立rac庫,那很可能就是/oracle/app/oraInventory/ContentsXML/inventory.xml檔案中丟失了db部分的內容,我們可以使用$ORACLE_HOME/oui/bin/attachHome.sh來重建該目錄,或手動修改該檔案。

若執行attachHome.sh報如下的錯誤,那麼刪除/oracle/app/oraInventory/ContentsXML下的3個檔案後繼續執行即可。

org.xml.sax.SAXParseException: : XML-20108: (Fatal Error) Start of root element expected.

at oracle.xml.parser.v2.XMLError.flushErrorHandler(XMLError.java:415)

  1. 其它dbca靜默建庫常見錯誤的解決辦法

    1. The Oracle system identifier(SID) "xxx" already exists. Specify another SID

用root使用者編輯/etc/oratab,刪除相應的記錄: xxx:/u01/oracle:N ,儲存退出問題解決。


  1. The cluster database(DB_NAME) "racdb" already exists. Please specify another DB_NAME.

原因:說明叢集環境中已經有racdb這個資料庫了。

解決辦法:若資料庫無用了,可以dbca -silent -deleteDatabase -sourceDB racdb來刪除資料庫,若資料庫不能啟動,則可以直接從crs中刪除資料庫的註冊資訊:srvctl remove db -d racdb -f後重新執行指令碼即可。



  1. DBCA建庫報錯CRS-2566 PRCR-1071 PRCR-1006

PRCR-1006 : Failed to add resource ora.lhrdg.db for lhrdg

PRCR-1071 : Failed to register or update resource ora.lhrdg.db

CRS-2566: User 'oracle' does not have sufficient permissions to operate on resource 'ora.LISTENER_LHRDG.lsnr', which is part of the dependency specification.

DBCA_PROGRESS : 100%


許可權不對,應該用grid來建立監聽:srvctl config listener -l LISTENER_LHRDG -a

具體參考我的blog:http://blog.itpub.net/26736162/viewspace-2114484/


用到的SQL集合

RAC建庫指令碼:

dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \

-gdbname racdb  -sid racdb \

-sysPassword lhr -systemPassword lhr \

-datafileDestination 'DATA/' -recoveryAreaDestination 'DATA/' \

-redoLogFileSize 50 \

-storageType ASM -asmsnmpPassword lhr  -diskGroupName 'DATA' \

-characterset ZHS16GBK -nationalCharacterSet AL16UTF16 \

-sampleSchema true \

-automaticMemoryManagement true -totalMemory 2048 \

-databaseType OLTP  \

-emConfiguration NONE \

-nodelist ZFLHRDB1,ZFLHRDB2

靜默建立監聽:netca -silent -responsefile $ORACLE_HOME/assistants/netca/netca.rsp

新增監聽:srvctl add listener -l LISTENER -p 1521 -o $ORACLE_HOME

 

oraInventory目錄:/oracle/app/oraInventory/ContentsXML/inventory.xml

重建的話,方法一: 備份2個節點的Inventory目錄,並重建空的Inventory目錄,然後分別在gridoracle使用者下執行$ORACLE_HOME/oui/bin/attachHome.sh命令即可,注意只需要在其中的一個節點上執行即可。方法二,在grid使用者下執行:

$ORACLE_HOME/oui/bin/runInstaller -silent -ignoreSysPrereqs \

-attachHome ORACLE_HOME="/oracle/app/11.2.0/grid" ORACLE_HOME_NAME="GridHome1" \

LOCAL_NODE="ZFLHRDB1" CLUSTER_NODES="{ZFLHRDB1,ZFLHRDB2}" CRS=true

 

$ORACLE_HOME/oui/bin/runInstaller -silent -ignoreSysPrereqs \

-attachHome ORACLE_HOME="/oracle/app/oracle/product/11.2.0/db" ORACLE_HOME_NAME="DbHome1" \

LOCAL_NODE="ZFLHRDB1" CLUSTER_NODES="{ZFLHRDB1,ZFLHRDB2}"

 

 

 

重新執行root.sh指令碼:

ocrconfig -showbackup

ocrconfig -manualbackup  

 

 

$ORACLE_HOME/crs/install/rootcrs.pl -deconfig -force -verbose

ls -l $ORACLE_BASE/Clusterware/ckptGridHA*

find $ORACLE_HOME/gpnp/* -type f

find $ORACLE_HOME/gpnp/* -type f -exec rm -rf {} \;

 

 

 

$ORACLE_HOME/crs/install/rootcrs.pl -deconfig -force -verbose -lastnode -keepdg

ls -l $ORACLE_BASE/Clusterware/ckptGridHA*

find $ORACLE_HOME/gpnp/* -type f

find $ORACLE_HOME/gpnp/* -type f -exec rm -rf {} \;

 

 

ipcs

$ORACLE_HOME/root.sh

/oracle/app/11.2.0/grid/perl/bin/perl -I/oracle/app/11.2.0/grid/perl/lib -I/oracle/app/11.2.0/grid/crs/install /oracle/app/11.2.0/grid/crs/install/rootcrs.pl

 

ipcs

$ORACLE_HOME/root.sh



About Me

..........................................................................................................................................................................................................
本文作者:小麥苗,只專注於資料庫的技術,更注重技術的運用
本文在ITpub(http://blog.itpub.net/26736162)和部落格園(http://www.cnblogs.com/lhrbest)有同步更新
本文地址:http://blog.itpub.net/26736162/viewspace-2121863/
本文pdf版: (提取碼:ed9b) 
小麥苗分享的其它資料:http://blog.itpub.net/26736162/viewspace-1624453/
聯絡我請加QQ好友(642808185),註明新增緣由
於 2016-07-05 16:00~ 2016-07-08 19:00 在中行完成
【版權所有,文章允許轉載,但須以連結方式註明源地址,否則追究法律責任】
..........................................................................................................................................................................................................

拿起手機掃描下邊的圖片來關注小麥苗的微信公眾號:xiaomaimiaolhr,學習最實用的資料庫技術。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2121863/,如需轉載,請註明出處,否則將追究法律責任。

相關文章