oracle打補(bǔ)丁最常見原因?yàn)閎ug修復(fù)或安全迎檢漏洞修復(fù)需要打到最新的補(bǔ)丁版本。下文的經(jīng)驗(yàn)之談是基于rac環(huán)境,19c版本的最新補(bǔ)丁集的過程分享。
可以參考《Assistant:Download Reference for Oracle Database/GI Update, Revision, PSU,SPU(CPU), Bundle Patches, Patchsets and Base Releases (Doc ID2118136.2)》來下載補(bǔ)丁集,打開的頁面中,我們可以選擇下載db的基礎(chǔ)版本,db補(bǔ)丁集和ojvm的補(bǔ)丁集等。
下圖是基于19c版本今年7月份發(fā)布的19.8的補(bǔ)丁集。DatabaseUpdate只包含db補(bǔ)丁包,GIUpdate則既包含GI的補(bǔ)丁包也包含db的補(bǔ)丁包,具體的可以按需來進(jìn)行下載。
軟件的備份:備份重于一切,這是我們做變更的基礎(chǔ),一定要給自己留后路。在做補(bǔ)丁更新前,我們必須需對oracle軟件進(jìn)行備份(GI和DB)。
以下給出命令示例:
--關(guān)閉集群CRS,各個(gè)節(jié)點(diǎn)依次關(guān)閉 su – oracle srvctl stop database -d xxxx ==>手工停所有節(jié)點(diǎn)實(shí)例 su - root crsctl stop crs crsctl start crs ==》該步驟選做,驗(yàn)證crs能否正常啟動(dòng) crsctl stop crs ps -ef | grep grid ==> 有進(jìn)程kill掉 ps -ef | grep oracle ==> 有進(jìn)程kill掉 --備份各節(jié)點(diǎn)軟件目錄 su - root tar -zcvf /u01/oracle20200813.tar /u01/app/* -p -P ==>可以多帶帶對GI和DB的軟件目錄進(jìn)行備份。這里為了方便操作對整個(gè)目錄進(jìn)行備份。備份前注意清理小文件(audit,trace等) --還原 --停掉crs服務(wù) --解tar cd /u01 mv app appbak tar -xvf /u01/oracle20200813.tar -C /u01/ |
DB信息的備份
>>>>使用grid用戶檢查當(dāng)前GI的補(bǔ)丁情況,監(jiān)聽狀態(tài) crsctl status res -t > /home/grid/crs.txt $ORACLE_HOME/OPatch/opatch lsinventory >> /home/grid/grid_patch.txt $ORACLE_HOME/OPatch/opatch lsinv -detail -oh $ORACLE_HOME >> /home/grid/grid_patch.txt $ORACLE_HOME/OPatch/opatch lspatches >> /home/grid/grid_patch.txt lsnrctl status >> /home/grid/crs.txt >>>>使用oracle用戶檢查當(dāng)前oracle的補(bǔ)丁情況 su - oracle $ORACLE_HOME/OPatch/opatch lsinventory > /home/oracle/oracle_patch.txt $ORACLE_HOME/OPatch/opatch lsinv -detail -oh $ORACLE_HOME >> /home/oracle/oracle_patch.txt $ORACLE_HOME/OPatch/opatch lspatches >> /home/oracle/oracle_patch.txt >>>>使用oracle用戶,在其中一個(gè)節(jié)點(diǎn)登錄到所有實(shí)例當(dāng)中進(jìn)行查詢,記錄補(bǔ)丁、無效對象相關(guān)信息 sqlplus / as sysdba spool /home/oracle/db0813.txt set lines 200 pages 2000; show parameter name; col comp_id for a20; col version for a20; col status for a30; select comp_id,version,status from dba_registry; select owner,object_type,object_name from dba_objects where status<>VALID; select patch_id,patch_uid,status,action_time from dba_registry_sqlpatch; spool off |
主要調(diào)用該工具OPatchAuto和Datapatch這2個(gè)命令。簡單的可以理解為OPatchAuto更新軟件相關(guān)文件,Datapatch用于更新數(shù)據(jù)庫字典(dba_registry_sqlpatch)。
詳細(xì)的信息我們可以參考如下文章:
Datapatch:Database 12c or later Post Patch SQL Automation (Doc ID 1585822.1)
DatapatchUser Guide (Doc ID 2680521.1)
該文件為補(bǔ)丁說明書,必讀項(xiàng)??梢栽谙螺d補(bǔ)丁包或者在下載頁面的ReadMe的按鈕(如下圖)里找到。
下面提取今年7月份發(fā)布的19.8的GI補(bǔ)丁集的readme中的關(guān)鍵主題來分析下:
readme中會(huì)有明確的字眼提示adg是否可以先更打,如下圖:
下圖中有4個(gè)patchnumber,其中GI_HOME都要更打,DB_HOME只要更打2個(gè)。從這里大致應(yīng)該就能估算出打GI補(bǔ)丁的時(shí)間要比DB補(bǔ)丁多一半,可以估算出要停機(jī)的時(shí)間。
Readme中會(huì)有明確的字眼要求OPatch的最低版本,如下圖:
參考該文章來下載需要的opatch工具:MasterNote For OPatch (Doc ID 293369.1)
Readme中給出具體命令,如下圖,我們補(bǔ)全拿到環(huán)境中執(zhí)行就行。
我們主要關(guān)注跑出來的結(jié)果,如果提示成功沒報(bào)錯(cuò),那這一環(huán)節(jié)就可以不做處理。如果有報(bào)錯(cuò),那就需要提前準(zhǔn)備解決方案,比如下面這個(gè)示例:
注:運(yùn)行該命令對現(xiàn)有環(huán)境不影響,需要提前執(zhí)行,以便有報(bào)錯(cuò)提前準(zhǔn)備解決方案,避免和維護(hù)窗口時(shí)間沖突。
提前檢查空間是否足夠,如下圖,我們補(bǔ)全拿到環(huán)境中執(zhí)行就行。
這里的沖突可以是小補(bǔ)丁和小補(bǔ)丁之間的沖突,也可以是小補(bǔ)丁和補(bǔ)丁集之間的沖突。有2個(gè)解決思路,一個(gè)是提SR申請沖突小補(bǔ)丁的merge補(bǔ)丁,這個(gè)等待時(shí)間可能比較久。另外一個(gè)思路,就是更打較新的補(bǔ)丁集,一般最新發(fā)布的補(bǔ)丁集都會(huì)包含之前小補(bǔ)丁,那這塊就需要拿補(bǔ)丁集去確認(rèn)了。
小補(bǔ)丁和補(bǔ)丁集之間的沖突:這塊處理起來比較方便,比如說當(dāng)前安裝的是4月份補(bǔ)丁集,我們現(xiàn)在要更打到7月份的補(bǔ)丁集。那現(xiàn)在可以將4月份補(bǔ)丁集上的小補(bǔ)丁先回滾掉,待7月份的補(bǔ)丁集更打完成后,再更打基于7月份補(bǔ)丁集的這個(gè)小補(bǔ)丁。
使用opatchauto命令去更打補(bǔ)丁,一般GI和DB都分開更打??梢愿鶕?jù)readme中提供命令進(jìn)行補(bǔ)全(如下圖),整合出適合自己環(huán)境的命令。
以下給出命令示例:
>>>GI各個(gè)節(jié)點(diǎn)依次執(zhí)行打補(bǔ)丁命令 # /u01/app/19.0.3/grid/OPatch/opatchauto apply /u01/software/patch2020/31305339 -oh /u01/app/19.0.3/grid >>>DB各個(gè)節(jié)點(diǎn)依次執(zhí)行打補(bǔ)丁命令 #/u01/app/oracle/product/19.0.3/dbhome_1/OPatch/opatchauto apply /u01/software/patch2020/31305339 -oh /u01/app/oracle/product/19.0.3/dbhome_1 |
關(guān)于數(shù)據(jù)字典更新操作,根據(jù)補(bǔ)丁的readme中提供的命令補(bǔ)全即可:
下圖是補(bǔ)丁集更打后的操作:
下圖是OJVM補(bǔ)丁更打后的操作:
以下命令是補(bǔ)丁集+OJVM的數(shù)據(jù)字典更新(也是說只跑一次datapatch)的示例(adg端不跑),更參考:
####Loading Modified SQL Files Into the Database sqlplus /nolog SQL> CONNECT / AS SYSDBA SQL> STARTUP nomount SQL> alter system set cluster_database=false scope=spfile; SQL> shutdown immediate sqlplus /nolog SQL> CONNECT / AS SYSDBA SQL> STARTUP UPGRADE SQL> exit $ cd $ORACLE_HOME/OPatch $ ./datapatch -verbose sqlplus /nolog SQL> CONNECT / AS SYSDBA SQL> alter system set cluster_database=true scope=spfile; SQL> SHUTDOWN immedite $srvctl start database -db xxx |
其實(shí)做好前期準(zhǔn)備工作,基本是成功的幾率就很高了,如果還有報(bào)錯(cuò),可能就是遇到bug或者其他問題了。那就只能臨時(shí)去找解決方案了,如果最終拖的時(shí)間比較長,維護(hù)窗口時(shí)間有限,最后也就只能回退了。分享2個(gè)簡單報(bào)錯(cuò)示例:下圖是一個(gè)進(jìn)程占用報(bào)錯(cuò)的示例,可以通過fuser命令來確認(rèn)占用進(jìn)程,kill掉就行:
下圖是一個(gè)節(jié)點(diǎn)間互信問題的報(bào)錯(cuò)示例:
做好打補(bǔ)丁前準(zhǔn)備工作,工作量就已完成了大半。這里粗略做以下總結(jié):
備份重于一切,一定要對軟件進(jìn)行備份。
集群間通信檢查,確認(rèn)命令為:crsctl check cluster -all
grid、oracle節(jié)點(diǎn)間互信檢查
補(bǔ)丁包權(quán)限檢查、opatch版本檢查、補(bǔ)丁沖突檢查
臨時(shí)問題解決要依托第一案場“證據(jù)”順藤摸瓜
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/130146.html
集成安裝之Oracle12C補(bǔ)丁升級(jí)數(shù)據(jù)字典更新報(bào)錯(cuò)處理 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...
RAC補(bǔ)丁日常更新成功反遇異常處理 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; m...
摘要:就在昨天,發(fā)布了新版的我相信很多開發(fā)人員沉溺在編碼的樂趣中,還沒注意到相關(guān)消息。 就在昨天,Oracle發(fā)布了新版的JDK 11,我相信很多Java開發(fā)人員沉溺在編碼的樂趣中,還沒注意到相關(guān)消息。 在2017年9月份,Oracle官網(wǎng)發(fā)布了一則博客https://blogs.oracle.com/java... 總結(jié)來說,主要內(nèi)容涉及到: 調(diào)整JAVA SE的版本發(fā)布計(jì)劃節(jié)奏;從JAV...
閱讀 1435·2023-01-11 13:20
閱讀 1796·2023-01-11 13:20
閱讀 1249·2023-01-11 13:20
閱讀 1988·2023-01-11 13:20
閱讀 4212·2023-01-11 13:20
閱讀 2849·2023-01-11 13:20
閱讀 1468·2023-01-11 13:20
閱讀 3766·2023-01-11 13:20