前言
相信在 Redhat 7 上安裝過 Oracle 12CR2 RAC 的朋友,看了本文一定會后悔沒有早點看到這篇完美的避坑指南!
如果有朋友不信邪,可以按照常規的方式安裝,大概率是會遇到下面我列出的這些坑。
一、聊聊哪些坑
本文主要介紹 Redhat 7.6 系統安裝 Oracle 12201 版本 RAC 的一些坑以及避坑方式。
絕對干貨滿滿,物超所值,當然更歡迎大家來補充和糾錯!
注意: 坑點主要位于 Grid 軟件安裝步驟中 cvu check 和 root.sh 執行。
坑 1:ASM device sharedness check
Grid 軟件安裝過程檢查報錯:Shared Storage Accessibility:/dev/asm_ocr ...FAILED (PRVG-11506)
可參照 MOS 文檔:
- 12.2: PRVG-0802 : Storage type for path "/dev/mapper/asm011p1" could not be determined (Doc ID 2251322.1)
這里先賣個關子,不說解決方案,MOS 建議是打一個補丁 25784424 來修復:
- Apply patch ?25784424, if CVU storage check fails for ASMLib paths
坑 2:執行 root.sh 報錯
先吐槽一下,這 TM 簡直巨坑無比!
當執行 root.sh 命令到進度 14/19 時,突然停止并且報錯 CLSRSC-400,并提示重啟主機系統,重啟之后安裝進程已經終止,繼續執行依然報錯,無奈卸載重裝,結果依然報錯,當時搞了將近 3 個多小時,網上找遍了都沒發現相關問題,真是一把心酸淚 !
在 MOS 上找了個相關文檔,但沒解決問題,可以參考一下:
- ALERT: root.sh Fails With "CLSRSC-400" While Installing GI 12.2.0.1 on RHEL or OL with RedHat Compatible Kernel (RHCK) 7.3 (Doc ID 2284463.1)
MOS 建議仍然是通過 applyOneOffs 打補丁來修復:
- Interim patch 25078431 is required before installing 12.2 GI on Linux 7.3 (RedHat and OL7 with RHCK).
注意: 這里雖然沒有幫助我解決問題,但是幫我打開了一個思路,讓我想到了 12C 開始支持的新的打補丁方式 applyPSU,對我后面解決問題帶來了很大的幫助!
坑 3:ASMCMD 報錯
在修復了上述 2 個問題之后,我又高高興興的開始執行 root.sh,看著一路暢通無阻,本想著收拾收拾回家了。
結果 root.sh 執行到進度 19/19 時,突然報錯停止,報錯內容為:kgfnGetConnDetails requires 4 parameters at/u01/app/12.2.0/grid/lib/asmcmdbase.pm line 5704,顯示 root.sh 執行失敗。
此時,我不認命的覺得它安裝成功,去試了下 asmcmd 命令,我直接裂開了 !
好吧,放下書包,看報錯日志,然后 MOS 一通發現了下面這些文檔,以供參考:
- install.sh Hung And root.sh Is Failing At asmcmd lsdg --suppressheader While Installing A Zone With Clusterware (Doc ID 2414241.1)
-
ASMCMD Failing With "KGFNGETCONNDETAILS Requires 4 Parameters at
/lib/asmcmdbase.pm (Doc ID 2748316.1)
這個問題還算簡單,但是還要卸載重裝一遍,最后經過九九八一難,使出九牛二虎之力,終于把 Grid 軟件安裝成功了,后面 Oracle 軟件安裝和建庫都尤為順利。
二、說說如何避坑
聊完了有哪些坑,下面當然要說說怎么避開了!
applyPSU
之前坑 2 有個 MOS 說要使用 applyOneOffs 打補丁來修復,于是就去搜了一下這個參數的用法,發現可以在 Grid 軟件安裝前打上補丁,順帶著還發現了 applyPSU,感覺找到了出路!
當時我使用 MOS 的方式進行單個補丁修復,結果一個又一個,感覺沒完了一樣,后來轉念一想,PSU 季度補丁是包含之前的 BUG 修復補丁的,直接使用 applyPSU 提前打上季度補丁來進行修復,就沒那么多問題,值得一試!
- How to Apply a Grid Infrastructure Patch Before Grid Infrastructure Configuration (before root.sh or rootupgrade.sh or gridsetup.bat) is Executed (Doc ID 1410202.1)
參考上述 MOS 文檔,有詳細的介紹和使用方法。
修復坑1、2
通過 12C 開始支持的 applyPSU 方式,提前給 Grid 軟件打上最新的季度 PSU 補丁,修復坑 1,2 的 BUG:
1、解壓 OPatch 補丁包
- ## grid 用戶下執行解壓,覆蓋 OPatch 舊版本
- unzip -o /soft/p6880880_122010_Linux-x86-64.zip -d /u01/app/12.2.0/grid/
2、查看 OPatch 補丁包版本
- ## grid 用戶下執行
- /u01/app/12.2.0/grid/OPatch/opatch version
- OPatch Version: 12.2.0.1.24
3、解壓最新 PSU 補丁
- ## grid 用戶下執行
- unzip /soft/p32226491_122010_Linux-x86-64.zip -d /soft
注意: 由于本文是在 2021年1月份寫的,所以補丁包版本非最新,請下載當前最新的 PSU 補丁包!
4、執行 Grid 軟件安裝
- ## grid 用戶下執行
- ./gridSetup.sh -applyPSU /soft/32226491
- Preparing the home to patch...
- Applying the patch /soft/32226491/...
- Successfully applied the patch.
- The log can be found at: /u01/app/oraInventory/logs/GridSetupActions2021-04-01_04-18-54PM/installerPatchActions_2021-04-01_04-18-54PM.log
- Launching Oracle Grid Infrastructure Setup Wizard...
通過上述命令執行結果,可以看到成功安裝了 PSU 補丁后才開始安裝 Grid 軟件!
注意: 當通過上述方式提前安裝了 PSU 補丁后,后面簡直可以說是一帆風順,直到執行 root.sh 到最后一步,遇到了坑 3。
修復坑 3
這個問題很簡單,只需要執行一行命令即可,但是要注意執行命令的時機。
- ## 在 root 用戶下執行,需要提前配置 grid 軟件的 ORACLE_HOME 環境變量
- /usr/bin/make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk client_sharedlib libasmclntsh12.ohso libasmperl12.ohso ORACLE_HOME=$ORACLE_HOME
執行順序:
當 Grid 軟件安裝 執行到出現 root.sh 提示框時,執行以上命令,需在兩個節點以root 身份執行該命令,ORACLE_HOME 路徑請根據實際情況填寫!確保所有節點執行完之后,再執行 root.sh,就可以完美修復坑 3。
接下來,就是順風順水,常規安裝步驟了!不過,有 19C 了誰還用 12C 呢?
三、知識拓展
咱們上面講的幾個坑,說白了都是 BUG,解決方案都是通過補丁來修復。事后我就在想,官方為什么不在安裝之前先把補丁都打上呢?這樣不就可以避免這些 BUG 報錯嘛!
于是,我在試著整了一版打好 PSU 的 12C GRID 安裝包,下面介紹一下如何操作!
1、實現依據
通過以下 兩個參數可以將基礎安裝包和補丁包進行集成打包。
- Oracle 12C開始支持Grid安裝前安裝PSU補丁:-applyPSU
- Oracle 18C/19C支持Grid/Oracle安裝前安裝RU補丁:-applyRU
集成目的: 安裝時可以省去安裝補丁的步驟,直接解壓集成安裝包安裝即可!
2、實現方式
以下舉例 12CR2 Grid 集成補丁包 32540149 步驟:
(1)上傳安裝介質
- ##Grid基礎安裝包
- LINUX.X64_122010_grid_home.zip
- ##OPatch補丁包
- p6880880_122010_Linux-x86-64.zip
- ##PSU補丁包
- p32540149_122010_Linux-x86-64.zip
- ##Oracle一鍵配置腳本
- OracleShellInstall.sh
(2)配置主機環境
使用我編寫的 Oracle 一鍵安裝腳本進行環境配置:
- ./OracleShellInstall.sh -i 10.211.55.100 `#Public ip`\
- -n restart `# hostname`\
- -o nocdb `# oraclesid`\
- -gp oracle `# grid user password`\
- -op oracle `# oracle user password`\
- -b /oracle/app `# install basedir`\
- -s AL32UTF8 `# characterset`\
- -m Y
(3)安裝補丁
分別解壓 OPatch 補丁包和 PSU 補丁包:
- ##解壓更新OPatch包
- unzip -o p6880880_122010_Linux-x86-64.zip -d /oracle/app/12.2.0/grid
- chown -R grid:oinstall /oracle/app/12.2.0/grid/OPatch
- ##解壓PSU補丁包
- unzip p32540149_122010_Linux-x86-64.zip /soft
- chown -R grid:oinstall /soft/32540149
Grid 安裝好補丁,但是不執行安裝過程:
- su - grid -c "/oracle/app/12.2.0/grid/gridSetup.sh -applyPSU /soft/32540149"
- ## 安裝成功后
- ## 1.修復bug:
- ## [INS-42505] The installer has detected that the Oracle Grid Infrastructure home software at (/oracle/GRID/12201) is not complete. (Doc ID 2697235.1)
- mv $ORACLE_HOME/install/files.lst $ORACLE_HOME/install/files.lst.bak
注意: 上面遇到這個小 BUG,也可以無視,沒有什么大影響。
(4)壓縮 ORACLE_HOME 目錄
這里我將安裝好的 Grid ORACLE_HOME 壓縮打包成 zip 安裝包:
- cd /oracle/app/12.2.0/grid/
- zip -r LINUX.X64_122010_grid_home_32540149.zip *
- mv LINUX.X64_122010_grid_home_32540149.zip /soft
至此,基礎安裝包和補丁包集成成功。
3、安裝測試
這里我們打開一臺新的主機進行安裝測試。
(1)上傳集成安裝包等介質
- ##Grid集成安裝包
- LINUX.X64_122010_grid_home_32540149.zip
- ##Oracle一鍵配置腳本
- OracleShellInstall.sh
(2)主機環境初始化配置
- ##iscsi掛載共享盤
- iscsiadm -m discovery -t st -p 10.211.55.22
- iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:10.211.55.22-lucifer -p 10.211.55.22 -l
- ##重命名安裝包
- mv LINUX.X64_122010_grid_home_32540149.zip LINUX.X64_122010_grid_home.zip
- ##執行腳本初始化配置
- cd /soft
- ./OracleShellInstall.sh -i 10.211.55.100 `#Public ip`\
- -n restart `# hostname`\
- -o nocdb `# oraclesid`\
- -gp oracle `# grid user password`\
- -op oracle `# oracle user password`\
- -b /u01/app `# install basedir`\
- -s AL32UTF8 `# characterset`\
- -dd /dev/sdc `# asm data disk`\
- -dn DATA `# asm data diskgroupname`\
- -dr EXTERNAL `# asm data redundancy`\
- -m Y
(3)安裝 Grid 軟件
- su - grid
- cd /oracle/app/12.2.0/grid/
- ./gridSetup.sh
執行 root.sh 前執行:
-
## 2.修復bug:ASMCMD Failing With "KGFNGETCONNDETAILS Requires 4 Parameters at
/lib/asmcmdbase.pm (Doc ID 2748316.1) - export ORACLE_HOME=/u01/app/12.2.0/grid
- /usr/bin/make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk client_sharedlib libasmclntsh12.ohso libasmperl12.ohso ORACLE_HOME=$ORACLE_HOME
順利安裝完畢!雖然實際用處不大,也算是一個思路吧,可以節省一些時間。
原文鏈接:https://mp.weixin.qq.com/s/KlP4IM4O7sHVvSNJ9rNXEA