oracle打補丁最常見原因為bug修復或安全迎檢漏洞修復需要打到最新的補丁版本。下文的經驗之談是基于rac環境,19c版本的最新補丁集的過程分享。
可以參考《Assistant:Download Reference for Oracle Database/GI Update, Revision, PSU,SPU(CPU), Bundle Patches, Patchsets and Base Releases (Doc ID2118136.2)》來下載補丁集,打開的頁面中,我們可以選擇下載db的基礎版本,db補丁集和ojvm的補丁集等。
下圖是基于19c版本今年7月份發布的19.8的補丁集。DatabaseUpdate只包含db補丁包,GIUpdate則既包含GI的補丁包也包含db的補丁包,具體的可以按需來進行下載。
軟件的備份:備份重于一切,這是我們做變更的基礎,一定要給自己留后路。在做補丁更新前,我們必須需對oracle軟件進行備份(GI和DB)。
以下給出命令示例:
--關閉集群CRS,各個節點依次關閉 su – oracle srvctl stop database -d xxxx ==>手工停所有節點實例 su - root crsctl stop crs crsctl start crs ==》該步驟選做,驗證crs能否正常啟動 crsctl stop crs ps -ef | grep grid ==> 有進程kill掉 ps -ef | grep oracle ==> 有進程kill掉 --備份各節點軟件目錄 su - root tar -zcvf /u01/oracle20200813.tar /u01/app/* -p -P ==>可以多帶帶對GI和DB的軟件目錄進行備份。這里為了方便操作對整個目錄進行備份。備份前注意清理小文件(audit,trace等) --還原 --停掉crs服務 --解tar cd /u01 mv app appbak tar -xvf /u01/oracle20200813.tar -C /u01/ |
DB信息的備份
>>>>使用grid用戶檢查當前GI的補丁情況,監聽狀態 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用戶檢查當前oracle的補丁情況 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用戶,在其中一個節點登錄到所有實例當中進行查詢,記錄補丁、無效對象相關信息 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 |
主要調用該工具OPatchAuto和Datapatch這2個命令。簡單的可以理解為OPatchAuto更新軟件相關文件,Datapatch用于更新數據庫字典(dba_registry_sqlpatch)。
詳細的信息我們可以參考如下文章:
Datapatch:Database 12c or later Post Patch SQL Automation (Doc ID 1585822.1)
DatapatchUser Guide (Doc ID 2680521.1)
該文件為補丁說明書,必讀項。可以在下載補丁包或者在下載頁面的ReadMe的按鈕(如下圖)里找到。
下面提取今年7月份發布的19.8的GI補丁集的readme中的關鍵主題來分析下:
readme中會有明確的字眼提示adg是否可以先更打,如下圖:
下圖中有4個patchnumber,其中GI_HOME都要更打,DB_HOME只要更打2個。從這里大致應該就能估算出打GI補丁的時間要比DB補丁多一半,可以估算出要停機的時間。
Readme中會有明確的字眼要求OPatch的最低版本,如下圖:
參考該文章來下載需要的opatch工具:MasterNote For OPatch (Doc ID 293369.1)
Readme中給出具體命令,如下圖,我們補全拿到環境中執行就行。
我們主要關注跑出來的結果,如果提示成功沒報錯,那這一環節就可以不做處理。如果有報錯,那就需要提前準備解決方案,比如下面這個示例:
注:運行該命令對現有環境不影響,需要提前執行,以便有報錯提前準備解決方案,避免和維護窗口時間沖突。
提前檢查空間是否足夠,如下圖,我們補全拿到環境中執行就行。
這里的沖突可以是小補丁和小補丁之間的沖突,也可以是小補丁和補丁集之間的沖突。有2個解決思路,一個是提SR申請沖突小補丁的merge補丁,這個等待時間可能比較久。另外一個思路,就是更打較新的補丁集,一般最新發布的補丁集都會包含之前小補丁,那這塊就需要拿補丁集去確認了。
小補丁和補丁集之間的沖突:這塊處理起來比較方便,比如說當前安裝的是4月份補丁集,我們現在要更打到7月份的補丁集。那現在可以將4月份補丁集上的小補丁先回滾掉,待7月份的補丁集更打完成后,再更打基于7月份補丁集的這個小補丁。
使用opatchauto命令去更打補丁,一般GI和DB都分開更打。可以根據readme中提供命令進行補全(如下圖),整合出適合自己環境的命令。
以下給出命令示例:
>>>GI各個節點依次執行打補丁命令 # /u01/app/19.0.3/grid/OPatch/opatchauto apply /u01/software/patch2020/31305339 -oh /u01/app/19.0.3/grid >>>DB各個節點依次執行打補丁命令 #/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 |
關于數據字典更新操作,根據補丁的readme中提供的命令補全即可:
下圖是補丁集更打后的操作:
下圖是OJVM補丁更打后的操作:
以下命令是補丁集+OJVM的數據字典更新(也是說只跑一次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 |
其實做好前期準備工作,基本是成功的幾率就很高了,如果還有報錯,可能就是遇到bug或者其他問題了。那就只能臨時去找解決方案了,如果最終拖的時間比較長,維護窗口時間有限,最后也就只能回退了。分享2個簡單報錯示例:下圖是一個進程占用報錯的示例,可以通過fuser命令來確認占用進程,kill掉就行:
下圖是一個節點間互信問題的報錯示例:
做好打補丁前準備工作,工作量就已完成了大半。這里粗略做以下總結:
備份重于一切,一定要對軟件進行備份。
集群間通信檢查,確認命令為:crsctl check cluster -all
grid、oracle節點間互信檢查
補丁包權限檢查、opatch版本檢查、補丁沖突檢查
臨時問題解決要依托第一案場“證據”順藤摸瓜
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130146.html
集成安裝之Oracle12C補丁升級數據字典更新報錯處理 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...
RAC補丁日常更新成功反遇異常處理 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; m...
摘要:就在昨天,發布了新版的我相信很多開發人員沉溺在編碼的樂趣中,還沒注意到相關消息。 就在昨天,Oracle發布了新版的JDK 11,我相信很多Java開發人員沉溺在編碼的樂趣中,還沒注意到相關消息。 在2017年9月份,Oracle官網發布了一則博客https://blogs.oracle.com/java... 總結來說,主要內容涉及到: 調整JAVA SE的版本發布計劃節奏;從JAV...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20