一、簡單介紹:
Oracle補丁一般分爲2類:CPU和PSU
Ø CPU:Critical Patch Update,緊急補丁更新。每季度發佈一次,用來修復安全方面的累積型補丁,即最新的CPU補丁已經包含以往的CPU補丁,只需安裝最新的CPU補丁即可。CPU已更名爲SPU(Security Patch Update)。
Ø PSU:Patch Set Update,補丁集更新。Oracle選取在每個季度用戶下載數量最多、且得到驗證具有較低風險的補丁放入到每個季度的PSU中。在每個PSU中不但包含Bug的修復,還包含了最新的CPU。PSU通常隨CPU一起發佈。PSU通常是增量的,大部分PSU可以直接安裝,但有些PSU必須要求安裝上一個版本的PSU之後才能繼續安裝。
二、演示環境:
1、IP:192.168.1.220
2、操作系統:CentOS 6.10 x86_64
3、Oracle軟件安裝包:p13390677_112040_Linux-x86-64_1of7.zip、p13390677_112040_Linux-x86-64_2of7.zip
4、Oracle版本:11.2.0.4.0
5、OPatch軟件安裝包:p6880880_112000_Linux-x86-64.zip(大小爲108M)
6、OPatch版本:11.2.0.3.20
7、Patch補丁包:p28729262_112040_Linux-x86-64.zip
8、Patch ID:Patch 28729262(Oracle Database Patch Set Update 11.2.0.4.190115)
三、打PSU補丁:
1、查看當前OPatch版本:$ $ORACLE_HOME/OPatch/opatch version
備註:根據補丁包中的README.html幫助文檔,Patch 28729262要求的OPatch最低版本爲11.2.0.3.5
2、升級OPatch版本:
# unzip -q p6880880_112000_Linux-x86-64.zip
# chown -R oracle.oinstall OPatch
# su - oracle
$ mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_bak
$ mv OPatch $ORACLE_HOME/
$ $ORACLE_HOME/OPatch/opatch version
3、查看系統中已打過的補丁:
$ $ORACLE_HOME/OPatch/opatch lspatches
$ $ORACLE_HOME/OPatch/opatch lsinv
SQL> col ACTION format a6
SQL> col VERSION format a8
SQL> col BUNDLE_SERIES format a13
SQL> col COMMENTS format a19
SQL> select ACTION,VERSION,BUNDLE_SERIES,COMMENTS from dba_registry_history;
4、關閉數據庫實例和監聽,結束所有Oracle相關進程:
SQL> shutdown immediate
SQL> !lsnrctl stop
5、使用expdp數據泵備份全庫數據
6、使用tar命令備份整個數據庫目錄
7、解壓補丁包,並設置權限:
# unzip -q p28729262_112040_Linux-x86-64.zip
備註:解壓後得到目錄28729262和文件PatchSearch.xml
# chown -R oracle.oinstall 28729262
# su - oracle
$ cd 28729262
$ ls
備註:打補丁前務必仔細閱讀README.html幫助文檔
8、檢查PSU補丁是否有衝突:
$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
備註:必須要在28729262目錄中執行上述命令
9、手動生成OPatch所需的OCM(Oracle Configuration Manager)文件ocm.rsp:
$ $ORACLE_HOME/OPatch/ocm/bin/emocmrsp
$ ll -lh | grep ocm.rsp
10、打補丁:$ $ORACLE_HOME/OPatch/opatch apply -silent -ocmrf ocm.rsp
備註:上述提示信息可忽略
備註:上述提示信息可忽略
11、升級數據字典:
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> !lsnrctl start
SQL> startup
SQL> @$ORACLE_HOME/rdbms/admin/catbundle.sql psu apply
SQL> shutdown immediate
SQL> startup
12、重新編譯無效對象:
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
備註:可查看日誌確認執行是否成功,此處SID爲TESTDB
$ less /oracle/cfgtoollogs/catbundle/catbundle_PSU_TESTDB_APPLY_2019Jan27_20_02_44.log
$ less /oracle/cfgtoollogs/catbundle/catbundle_PSU_TESTDB_GENERATE_2019Jan27_20_02_43.log
13、打OJVM(Oracle JavaVM Component Database PSU)補丁:
SQL > @$ORACLE_HOME/rdbms/admin/dbmsjdev.sql
SQL > exec dbms_java_dev.disable
14、查看系統中已打過的補丁:
$ $ORACLE_HOME/OPatch/opatch lspatches
$ $ORACLE_HOME/OPatch/opatch lsinv
SQL> col ACTION format a6
SQL> col VERSION format a8
SQL> col BUNDLE_SERIES format a13
SQL> col COMMENTS format a19
SQL> select ACTION,VERSION,BUNDLE_SERIES,COMMENTS from dba_registry_history;
四、刪除PSU補丁:
1、執行ROLLBACK.sql:
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> startup
SQL> @$ORACLE_HOME/rdbms/admin/catbundle_PSU_TESTDB_ROLLBACK.sql
SQL> quit
備註:此處SID爲TESTDB
2、執行utlrp.sql,並關閉數據庫實例和監聽,結束所有Oracle相關進程:
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
SQL> shutdown immediate
SQL> !lsnrctl stop
3、補丁回退:
$ $ORACLE_HOME/OPatch/opatch rollback -id 28729262
備註:上述提示信息可忽略
4、使用tar命令解壓升級前備份的數據庫目錄
5、使用impdp數據泵導入升級前備份的全庫數據
6、啓動數據庫實例和監聽:
SQL> startup
SQL> !lsnrctl start
7、查看系統中已打過的補丁:
$ $ORACLE_HOME/OPatch/opatch lspatches
$ $ORACLE_HOME/OPatch/opatch lsinv
SQL> col ACTION format a8
SQL> col VERSION format a8
SQL> col BUNDLE_SERIES format a13
SQL> col COMMENTS format a19
SQL> select ACTION,VERSION,BUNDLE_SERIES,COMMENTS from dba_registry_history;