一、概述
本文將介紹如何給oracle數據庫打最新補丁,數據庫版本為11.2.0.4單實例,操作系統為redhat6.5
二、下載相關升級包
1. 登錄MOS,查閱(ID 2118136.2),下載最新補丁包
PSU (Patch Set Update),數據庫補丁
2. 搜索"Patch 6880880",下載最新opatch
opatch是安裝補丁的程序,數據庫軟件安裝完成后,就自帶了opatch,但是版本太舊了,所以這里下載最新的opatch
至此已下載兩個文件
p6880880_112000_Linux-x86-64.zip:opatch升級包
p29913194_112040_Linux-x86-64.zip:數據庫補丁
三、升級opatch
opatch的升級比較簡單,就是個文件覆蓋
3. 查看原始opatch信息
[oracle@orasingle ~]$ cd $ORACLE_HOME/OPatch
[oracle@orasingle OPatch]$ ./opatch version # 查看版本信息
OPatch Version: 11.2.0.3.4 OPatch succeeded.
[oracle@orasingle OPatch]$ ./opatch lsinventory # 查看打補丁的情況
Oracle Interim Patch Installer version 11.2.0.3.4 Copyright (c) 2012, Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.4 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2019-12-25_14-26-47PM_1.log Lsinventory Output file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2019-12-25_14-26-47PM.txt -------------------------------------------------------------------------------- Installed Top-level Products (1): Oracle Database 11g 11.2.0.4.0 There are 1 products installed in this Oracle Home. There are no Interim patches installed in this Oracle Home. -------------------------------------------------------------------------------- OPatch succeeded.
4. 備份原opatch
[oracle@orasingle ~]$ cd $ORACLE_HOME
[oracle@orasingle db_1]$ mv OPatch OPatch.bak
5. 解壓新下載的opatch包
將下載的opatch包上傳到oracle的家目錄
[oracle@orasingle db_1]$ cd ~
[oracle@orasingle ~]$ unzip p6880880_112000_Linux-x86-64.zip -d $ORACLE_HOME
6. 再來查看opatch信息
[oracle@orasingle ~]$ cd $ORACLE_HOME/OPatch
[oracle@orasingle OPatch]$ ./opatch version # 查看版本信息
OPatch Version: 11.2.0.3.21 OPatch succeeded.
至此opatch升級完畢
四、打數據庫補丁
7. 關閉em、監聽、數據庫
[oracle@orasingle ~]$ emctl stop dbconsole # 如果沒有開啟em,這步可以跳過
[oracle@orasingle ~]$ lsnrctl stop
[oracle@orasingle ~]$ sqlplus / as sysdba
SQL> shutdown immediate
SQL> exit
8. 解壓新下載的補丁包
將下載的補丁包上傳到oracle的家目錄
[oracle@orasingle ~]$ cd ~
[oracle@orasingle ~]$ unzip p29913194_112040_Linux-x86-64.zip
9. 校驗該補丁包是否與之前的補丁有沖突
[oracle@orasingle ~]$ cd 29913194
[oracle@orasingle 29913194]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 11.2.0.3.21 Copyright (c) 2019, Oracle Corporation. All rights reserved. PREREQ session Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.21 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2019-12-25_14-46-26PM_1.log Invoking prereq "checkconflictagainstohwithdetail" Prereq "checkConflictAgainstOHWithDetail" passed. OPatch succeeded.
由於這個測試庫之前並沒有打什么補丁,所以這里就不可能有補丁沖突的問題,如果這里顯示有沖突,再去mos上查找相關解決方案。
10. 正式升級
[oracle@orasingle 29913194]$ $ORACLE_HOME/OPatch/opatch apply
這里要輸入3次y和一次回車,這個是時間耗時比較久的,耐心等待
升級完成后報上面的錯誤,通過查閱mos(ID 2265726.1),可知這個錯誤可以被忽略
11. 再次查看打補丁的情況
[oracle@orasingle 29913194]$ $ORACLE_HOME/OPatch/opatch lsinventory # 查看打補丁的情況
內容較多,略
12. 啟動數據庫,並運行sql文件
[oracle@orasingle 29913194]$ cd $ORACLE_HOME/rdbms/admin
[oracle@orasingle admin]$ sqlplus / as sysdba
SQL> startup
SQL> @catbundle.sql psu apply
SQL> quit
13. 啟動監聽、em
[oracle@orasingle ~]$ lsnrctl start
[oracle@orasingle ~]$ emctl start dbconsole # 如果沒有開啟em,這步可以跳過
至此數據庫打補丁已全部完成!
五、回退數據庫補丁
數據庫在做變更時,當然要考慮回退方案了,接下來介紹如何回退數據庫補丁
14. 關閉em、監聽、數據庫
[oracle@orasingle ~]$ emctl stop dbconsole # 如果沒有開啟em,這步可以跳過
[oracle@orasingle ~]$ lsnrctl stop
[oracle@orasingle ~]$ sqlplus / as sysdba
SQL> shutdown immediate
SQL> exit
15. 回退補丁
[oracle@orasingle ~]$ $ORACLE_HOME/OPatch/opatch rollback -id 29913194
這里要輸入一次y,時間比較久,耐心等待
這里提示warning,查閱mos(ID 1448337.1),得知可以忽略
16. 啟動數據庫,並運行sql文件
[oracle@orasingle 29913194]$ cd $ORACLE_HOME/rdbms/admin
[oracle@orasingle admin]$ sqlplus / as sysdba
SQL> startup
SQL> @catbundle_PSU_ORCLTEST_ROLLBACK.sql # 注意這里可能每個人都不一樣,orcltest是我的實例名
SQL> quit
17. 再查看打補丁的情況
[oracle@orasingle ~]$ cd $ORACLE_HOME/OPatch
[oracle@orasingle OPatch]$ ./opatch lsinventory # 查看打補丁的情況
OPatch Version: 11.2.0.3.21 OPatch succeeded. [oracle@orasingle OPatch]$ ./opatch lsinv Oracle Interim Patch Installer version 11.2.0.3.21 Copyright (c) 2019, Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.21 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2019-12-25_16-15-41PM_1.log Lsinventory Output file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2019-12-25_16-15-41PM.txt -------------------------------------------------------------------------------- Local Machine Information:: Hostname: orasingle ARU platform id: 226 ARU platform description:: Linux x86-64 Installed Top-level Products (1): Oracle Database 11g 11.2.0.4.0 There are 1 products installed in this Oracle Home. There are no Interim patches installed in this Oracle Home. -------------------------------------------------------------------------------- OPatch succeeded.
可以看到補丁都被卸載了
18. 啟動監聽和em
[oracle@orasingle ~]$ lsnrctl start
[oracle@orasingle ~]$ emctl start dbconsole # 如果沒有開啟em,這步可以跳過
六、總結
本文給大家介紹了最簡單的單實例數據庫打補丁步驟,僅作參考,實際應以補丁包中的readme為准。






