Oracle資料庫補丁升級的一些積累
一、補丁相關的術語
在資料庫技術支援服務過程中,經常會遇到補丁相關的術語,現在集中做一下說明。1. interim patch/one-off patch
是我們常說的小補丁,為了修復某個bug而釋出的補丁,這種補丁推薦在測試庫上測試無誤後再安裝在生產庫上。
2. merged patch:
合併的補丁,當幾個小補丁之間衝突,不能同時安裝的時候,需要提供這種 merged patch。補丁衝突主要是由於2個或者多個補丁修改同一個檔案,但是修改的內容是不同的。
3. bundle patch
補丁集,修復多個bug。在windows 平臺的oracle 沒有小補丁,只有這種補丁集,至少每季度釋出一次,是累積性的,也就是說每個bundle patch 會包含之前所有的bundle patch。例如 windows bundle patch 16,它會包含之前所有的15個bundle patch,所以,建議總是安裝最新的bunlde patch。oracle 的叢集軟體和資料庫軟體的Windows bundle patch是同一個,例如Windows bundle patch 16 即可以打在叢集上,也可以打在資料庫上,要了解windows bundle patch 的補丁號,可參考mos:Note 161549.1 Oracle Database, Networking and Grid Agent Patches for Microsoft Platforms
4.critical patch update(CPU)
5.patch set update (PSU)
每季度釋出一次,修復比較嚴重的問題,包含每季度的CPU,是累積型的。雖然在描述PSU的時候會用到資料庫版本的第五位,比如 Database PSU 11.2.0.3.5,但實際上打完PSU後,並不會真正的改變資料庫的版本。從v$version中看到的版本還是11.2.0.3.0。
⚠️ Windows上沒有CPU和PSU。oracle資料庫的叢集和資料庫軟體使用不同的PSU。可以參考下面的mos文件瞭解每個季度的CPU,PSU,Windows bundle patch 的具體補丁號:Assistant: Download Reference for Oracle Database/GI PSU, SPU(CPU), Bundle Patches, Patchsets and Base Releases (
文件 ID 2118136.2)6.patch set
是在大版本上釋出的補丁集,修復了較多的bug,可能會包含一些增強功能,比如 11.2是一個大版本,那麼11.2.0.2就是一個patch set。這種補丁集經過了嚴格的整合測試,也是累積型的。所以我們總是推薦安裝最新的patch set。
7.diagnostic patch
診斷補丁,有時候診斷一個問題的時候。為了獲得更多的診斷資訊,oracle的開發部門會提供一個diagnostic patch 這種補丁不是為了修復問題,而是診斷問題。
8.composite patch
從2012年4月份的database psu 11.2.0.3.2開始,推出一種新的概念叫composite patches,這是一種新型的補丁包。它不同於其他型別的補丁包,如果第一次安裝composite patches 那麼composite patches所包含的全部補丁都會被安裝, 後續安裝的composite patches,只會安裝對比前一次composite patches 有變化的部分和新增加的補丁。
二、升級PSU需注意的事項
1.下載PSU補丁時,首先確認作業系統版本以及資料庫版本,之後下載相應的psu補丁集。
2.安裝任何補丁時一定要仔細閱讀補丁對應的readme 檔案,因為每個補丁的安裝步驟可能有所不同。
3.在grid infrastruncture patch set update(以下簡稱:GI PSU)中包含了DB PSU,所以只要下載並按照GI PSU的readme安裝補丁,並使用patch auto就可以把GI 和資料庫的PSU 都安裝上,而且使用opatch auto 的好處是完全自動化,不需要手工停止/啟動GI。安裝完成後,在GI和DB的oracle_home會分別安裝了GI和DB的PSU,也就是每個oracle_home下都有兩個psu,一個是gi的,一個是db的。推薦這種安裝方法,因為有的bug需要在gi 中修復,又需要在db中修復。
4.如果在資料庫(RDBMS)的oracle_home下沒建立任何的資料庫,也就是在ocr中找不到oracle_home下的資料庫,那麼 opatch auto並不會把psu 安裝在oracle_home下,只會把psu 安裝在GI的oracle_home下,這種情況下,如果要對資料庫的oracle_home安裝psu,需另外執行:#opatch auto unzip 補丁原始檔 -oh <RAC_HOME>,詳見mos文件 1361802.1和1479651.1.
5.安裝psu的過程是滾動的(rolling),也就是現在一臺節點按照readme 中的步驟安裝這個psu,當這臺執行完畢,所有的資源啟動後,依次在其他節點執行。⚠️opatch auto不能在多個節點同時執行。
⚠️opatch 工具 需要同時升級gi以及rdbms軟體中的opatch工具
7.oracle database psu 、bundle patch 的命名規則一般是按照推出的先後順序,比如在2015年10月 推出的11.2.0.4的第8個db psu 就命名為:db psu 11.2.0.4.8 ;2016年1月份推出了對psu 、spu 、 bundle patch 新的命名規則。新的命名規則以11.2.0.4為例:11.2.0.4 YYMMDD 此處的YYMMDD為patch釋出的具體日期。
三、補丁下載連結
1.最新的PSU補丁下載連結,登入mos,搜尋2118136.2文章Assistant: Download Reference for Oracle Database/GI PSU, SPU(CPU), Bundle Patches, Patchsets and Base Releases (文件ID 2118136.2)
2.oracle 官方推薦的補丁
Document 756671.1 Oracle Recommended Patches -- Oracle Database
3.opatch 工具的下載連結四、舉例說明
1.oracle rac 打psu 補丁主要步驟如下:
1.1 下載作業系統及資料庫版本相對應的psu補丁。1.2 下載readme 中要求opatch工具版本以上。1.3 詳細閱讀readme升級步驟,以及注意事項,2.以下為oracle rac 11.2.0.3 打 GI PSU 11.2.0.3.6為例,步驟如下:
2.1 升級opatch 工具
把grid_home和db_home上的<ORACLE_HOME>/OPatch 進行備份,然後將下載的OPatch補丁解壓到<ORACLE_HOME>/OPatch$unzip budingwenjian.zip -d <ORACLE_HOME>通過 ./opatch version 命令檢視更新結果。2.2 配置ocm
# su - grid$export JAVA_HOME=$ORACLE_HOME/jdk$GRID_HOME/OPatch/ocm/bin/emocmrsp -no_banner -output /apps/oracle/ocm.rsp2.3 檢視當前GI 以及RDBMS補丁資訊
#su - grid$<GRID_HOME>/OPatch/opatch lsinventory -detail -oh <GRID_HOME>#su - oracle$<db_home>/OPatch/opatch lsinventory -detail -oh <oracle_home>2.4 用grid使用者來上傳到伺服器並解壓
$cd <unzipped_patch_location_path>
$ unzip 補丁原始檔2.5 安裝或者回滾PSU 前必須用資料庫的屬主(一般為oracle)把EM agent停止:
#su - oracle
<DB_HOME>/bin/emctl stop dbconsole
2.6 檢查補丁衝突
#su - grid
$cd <unzipped_patch_location_path> --到步驟2.4已解壓的補丁檔案路徑下
$ $ORACLE_HOME/OPatch/opatch prereq
2.7 補丁安裝
⚠️適用於gi 和db 的oracle_home都在本地盤,不在共享盤,而且沒有使用ACFS
⚠️必須以root身份安裝補丁(不需要停止GI)
#opatch auto <unzipped_patch_location_path> -ocmrf <ocm response file>
示例:# opatch auto /u01/oracle/patches -ocmrf /u01/app/11.2.0/grid/OPatch/ocm/bin/ocm.rsp
執行了這個命令後,會自動停止這個節點上的GI和所有資源;然後在GI和DB的oracle_home下都安裝GI和DB的PSU;最後會將這個節點上的gi 和資源都啟動。2.8 升級資料庫字典
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus / as sysdba
SQL>@catbundle.sql psu apply2.9 升級catalog資料庫
如果使用了rman ,需要將您的rman catalog 庫升級一下,執行:
$rman catalog username/password@alias
RMAN>UPGRADE CATALOG
2.10 檢查是否成功,檢視dba_registry_history檢視
Check the following log files in $ORACLE_BASE/cfgtoollogs/catbundle for any errors:
catbundle_PSU_<database SID>_APPLY_<TIMESTAMP>.log
catbundle_PSU_<database SID>_GENERATE_<TIMESTAMP>.log