1. 程式人生 > >Oracle 補丁那些事兒(PS、PSU、CPU、SPU、BP、DBBP…)

Oracle 補丁那些事兒(PS、PSU、CPU、SPU、BP、DBBP…)

play 找問題 bugs 11.2.0.3 inux 授權 uri memory jdb

當前ORACLE數據庫提供兩種方式的補丁一種是主動的Proactive Patches和另一種被動的Reactive Patches,其中Reactive Patches是指過去的ONE-OFF Patch,而過去的PSU,SPU/CPU,BP都是Proactive Patches。從12c(12.1.0.2)起數據庫又提供了一個名為DBBP的補丁類型,在數據庫安裝選擇補丁時建議是PSU,CPU,DBBP中的一種,在12c以前至少是安裝相應版本的PSU,而從12.1.0.2起想要安裝更全的補丁集應該選擇DBBP,DBBP更是一種趨勢,以後可能會替代PSU,就像以前的CPU後改名為SPU,安裝SPU建議以PSU的方式一樣,DBBP成了更大的超集,下面來整理一份數據庫相關的補丁術語及註意事項。

patch number改變

從2015年11月開始數據庫相關的PSU,SPU,BP的版本號第5位發生改變,如11204的PSU的11.2.0.4.8下個版本不再是11.2.0.4.9,而是11.2.0.4.160119, 格式是與發布日期相關的YYMMDD,年份的後兩位月份和日期。方便查找PATCH的時間段。更多信息關註Doc ID 2061926.1

SPU/CPU改變

從12.1.0.1開始數據庫提供安全相關的修復不再單獨以SPU的形式發布,而是以PSU或DBBP打包的方式集中修復,這種方式也更為簡單,PSU從2009年起就是ORACLE主動修改首選,也許會從2016年後DBBP會成為首選(linux/unit)。更多信息關註1581950.1

BP FOR EXADATA AND DBIM改變

從2016年4月 Database Patch for Engineered Systems and Database In-Memory Bundle Patch (BP) ”改名為 “Database Proactive Bundle Patch”. 也就是DBBP,不再僅限於EXADATA系統,你也許會話如果以字母簡寫更應該呢DPBP或者是PBP for DB, “Database Proactive Bundle Patch”更是多個PSU的超集,包含了GI PSU、DB PSU及EXPDATA和DBIM的相關修復,從dba_registry_sqlpatch視圖中可以看到Database Bundle Patch (DBBP) 區別於原來的PSU,也就是從12.1.0.2以後Database Proactive Bundle Patch可以應用於所有數據庫環境。另外DBBP僅用於LINUX和UNIX環境,與WINDOWS 的BP沒有關系, Windows平臺還繼續使用Bundle Patch (Windows 32bit & 6bit). 更多信息關註Note 1937782.1

如何選擇最新的補丁?

查看Assistant: Download Reference for Oracle Database PSU, SPU(CPU), Bundle Patches, Patchsets and Base Releases (Doc ID 2118136.2)
另外SPU, PSU ,DBBP不兼容,更換補丁方法要檢查沖突,回滾之前的沖突,如安裝DBBP不能基於上一季度的PSU。

1) SPU contains only the CPU program security fixes

2)PSU contains the CPU program security fixes and additional high-impact/low-risk critical bug fixes

3)Proactive Bundle Patch (PBP) includes all PSU fixes along with fixes targeted at the specific Bundle Patch environment.

4)PSU – Can be applied on Database Servers, Client-Only and Instant Client.

5)GI PSU – Can be applied on GI Home (Oracle Restart or Oracle Clusterware) in conjunction with RAC, RACOne, Single Instance home, Client-Only and Instant Client.

6)Proactive Bundle Patch – Can be applied on GI Home in conjunction with RAC, RACOne, or Single Instance home, Client-Only and Instant Client.

補丁的術語:

名稱 說明
Release Release 版本的前2個字段指定(小數點分隔的字段)如ORACLE 10gR1 10gR2 , 11gR1 11gR2, 12cR1 12cR2…
Base/Major Release 版本的前4個字段, 如11.2.0.1, 可以在OTN、edelivery等站點上公開下載,
Patch Set Release 就是早期大家常說的PSR。這是在主版本號上發布的補丁集,版本的第4個字段指定,如11.2.0.4,修復了較多的Bug,可能會包含一些增強功能(Enhancement)。比如11.2.0.1是一個主版本,那麽11.2.0.2、11.2.0.3就是2個不同的Patch set。這種補丁集經過了嚴格的集成測試,也是累積型的。所以推薦安裝最新的Patch Set。
Database Patch Set Update 就是DBA&DMA們常論道的PSU.Oracle 選取在每個季度用戶下載數量最多,並且得到驗證具有較低風險的補丁放入到每個季度的PSU中,修復比較嚴重的一些問題,包含每個季度的CPU,是累積型的。針對數據庫以及數據庫客戶端的重要修復。包括安全(CPU)內容。沒有優化器修復,雖然在描述PSU的時候會用到數據庫版本第5位,但實際上打完PSU後並不會真正改變數據庫的版本,需要從opatch lsinv確認

¤ 註意

(1) Windows上沒有CPU和PSU,對於Windows和Exadata,Oracle使用Bundle Patch代替PSU,Bundle Patch會包含PSU的內容

(2) 在11G之前有些PSU可以直接安裝,而有些PSU則必須要求安裝了上一個版本的PSU之後才能繼續安裝。比如對於10.2.0.4版本的數據庫來說,PSU 10.2.0.4.4可以直接安裝在最原始的10.2.0.4.0版本中,而最新的PSU 10.2.0.4.8則必須要求先安裝10.2.0.4.4。更多信息參考PSU 附帶的readme.txt

(3)從11.2.0.2版本開始,一個新的補丁策略被引入,11.2.0.1之後發布的Patch Set本身就是一個完整的安裝包,不再需要基礎的Release 版本安裝。

MOS站點中Oracle Recommended Patches — Oracle Database [ID 756671.1] 文檔中查到各個產品版本最新的PSU。

查看PSU

$opatch lsinventory -bugs_fixed | grep -i ‘DATABASE PSU’

# 11g r2 and above

$ opatch lsinventory | grep “Patch Set Update”

Database Grid Infrastructure Patch Set Update 也就是GI PSU,適用於11.2.0.1以上的RAC DB 安裝在 Unix 平臺上 (包括單實例 RAC)。補丁包括 Grid Infrastructure 的重要修復,也包括匹配的 DB PSU,但不包括任何 OJVM PSU,季度發行,在11.2以前叫CRS PSU,從11.2後不再發行。
OJVM Patch Set Update 也就沒是OJVM PSU, 適用於數據庫版本DB 版本 11.1.0.7,11.2.0.3,11.2.0.4,12.1.0.1 及以上所有平臺。須知 Windows 平臺有特殊的 OJVM PSU 覆蓋補丁安裝於 Windows BP 上,

2014年10月提出 OJVM PSU,但是 OJVM 和 JDBC 有單獨的補丁。
2015年1月之後 OJVM PSU 包括 JDBC 針對數據庫的修復

在12c中的DBBP中包含了OJVM PSU

Timezone Patches DB 和 DB client 安裝,當對最新時區數據要求很高時,補丁僅包含時區數據,每半年發行一次。
Critical Patch Update Oracle在2005年開始引入的產品安全更新策略,CPU最早的雛形出現在2005年,該項目致力於為客戶周期性地提供累積性的補丁以修復安全漏洞。沒有一個強制要求安裝CPU的理由,Oracle僅僅是強烈推薦實施這些補丁以降低潛在的安全風險並降低受到駭客入侵成功的概率, 由月/年指定 如11.2.0.4 Jan 2015 SPU

¤ 這個指的就是CPU補丁。每季度發布一次,用來修復安全方面的一些補丁,是累積型的。目前(2012年10月)已經更名為Security Patch Update (SPU)

¤ 這類問題本來不屬於軟件錯誤,在正常使用中不會出現任何問題。但是別有用心的人可以通過運行非常精巧設計的代碼 ,繞過數據庫系統的安全管理機制,達到非授權存取的目的。

分為Normal CPU和Molecular CPU(最早是從10.2.0.3 CPUJUL2007)For LINUX/UNIT 平臺, CPU Bundle Patch For Windows平臺

¤ 重要補丁公告參見這裏.

PSU包含了最新的CPU, 從12.1.0.1開始CPU不再單獨發布而是包含在PSU中發布。

Interim Patch/One-Off Patch ¤ 是我們常說的小補丁,為了修復某(幾)個Bug而發布的補丁。這種補丁推薦在測試庫上測試無誤後再安裝在生產庫上。
Merged Patch ¤ 合並的補丁。當幾個小補丁之間有沖突,不能同時安裝的時候,需要提供這種Merged Patch。補丁沖突主要是由於2個或者多個補丁修改同一個文件,但是修改的內容是不同的。
“Quarterly Full Stack Download Patch” / “Combo Patch” 若幹不同的補丁打包在一起發布,適用於DB 版本 11.1.0.7,11.2.0.3,11.2.0.4,12.1.0.1 及以上,2014年10月開始每季度發行一次, 在一個下載中包括不同組件的 Patch Set Updates
例如:”Quarterly Full Stack Download Patch for Exadata” 把 “Quarterly Database Patch for Exadata”與 OJVM PSU 還有其他的 Exadata系統補丁包含在一個下載鏈接中。
Windows Bundle Patch(BP) ¤ 僅適用於WINDOWS平臺的補丁集修復多個Bug。在Windows平臺上的Oracle沒有小補丁,只有這種Bundle Patch。 這種累積型的補丁集會周期性的發布(至少每季一次),也就是每個Bundle Patch會包含之前所有的Bundle Patch。比如Windows Bundle Patch 16,它會包含之前所有15個Bundle Patch,所以我們總是推薦安裝最新的Bundle Patch。Oracle的集群軟件和數據庫軟件的Window Bundle Patch是同一個,比如Windows Bundle Patch 16(補丁號16167942,既可以打在集群上,也可以打在數據庫上) , 每季度會包含 DB PSU 和 OJVM PSU 內容。。

■要了解Windows Bundle Patch的補丁號,可以參考MOS文檔:
Note 161549.1 Oracle Database, Networking and Grid Agent Patches for Microsoft Platforms

Diagnostic Patch 診斷補丁。顧名思義,這類補丁不是用來解決問題的,而是用來尋找問題的原因的。這類補丁只在Oracle技術支持部門要求安裝時,才需要安裝。在得到需要的診斷信息後 ,應立即卸載這一補丁。
Composite Patch ¤ 從2012年4月份的Database PSU 11.2.0.3.211.2.0.2.0.7開始,推出一種新的概念叫Composite Patches。 這是一種新型的補丁包,它不同於其他的累積型補丁包。如果是第一次安裝Composite Patches,那麽該Composite Patches所包括的全部補丁都會被安裝,後續安裝的Composite Patches,只會安裝對比前一次Composite Patches有變化的部分和新增加的補丁。

¤ Composite Patche改進包括減少補丁安裝時間,減少回滾以前應用的overlay patches的需要。 新的Composite Patches格式,使以前PSU應用的overlay patches和新安裝的PSU並存成為可能。更多信息,請參考Document 1376691.1 ‘Composite Patches for Oracle Products’ 和Oracle Database Support NEWS April edition.

■ PSU就是一種Composite Patch

¤第一次安裝的composite patch為PSU 11.2.0.3.5:
Installed Top-level Products (1):

Oracle Database 11g 11.2.0.3.0
There are 1 products installed in this Oracle Home.

Interim patches (1) :

Patch 14727310: applied on Fri Dec 09 10:59:28 EST 2011
Patch Description: “Database Patch Set Update : 11.2.0.3.5 (14727310)” <==變化和新增的部分
Created on 14 Jan 2013, 07:56:00 hrs PST8PDT
Sub-patch 14275605; “Database Patch Set Update : 11.2.0.3.4 (14275605)”<==Sub-patch

Sub-patch 13923374; “Database Patch Set Update : 11.2.0.3.3 (13923374)”<==Sub-patch
Sub-patch 13696216; “Database Patch Set Update : 11.2.0.3.2 (13696216)”<==Sub-patch
Sub-patch 13343438; “Database Patch Set Update : 11.2.0.3.1 (13343438)”<==Sub-patch
Bugs fixed:
13566938, 13593999, 10350832, 14138130 …
¤安裝下一個composite patch PSU 11.2.0.3.6時,只需要安裝有變化的部分和新增加的patches,不需要再安裝之前已經安裝的11.2.0.3.1 、11.2.0.3.2,11.2.0.3.4和11.2.0.3.5,之前已經安裝的這部分就稱為sub-patch
Patch 16056266: applied on Sun Apr 28 12:42:57 CST 2013
Patch Description: “Database Patch Set Update : 11.2.0.3.6 (16056266)” <==變化和新增的部分
Created on 12 Mar 2013, 02:14:47 hrs PST8PDT
Sub-patch 14727310; “Database Patch Set Update : 11.2.0.3.5 (14727310)”<==Sub-patch

Sub-patch 14275605; “Database Patch Set Update : 11.2.0.3.4 (14275605)”<==Sub-patch

Sub-patch 13923374; “Database Patch Set Update : 11.2.0.3.3 (13923374)”<==Sub-patch
Sub-patch 13696216; “Database Patch Set Update : 11.2.0.3.2 (13696216)”<==Sub-patch
Sub-patch 13343438; “Database Patch Set Update : 11.2.0.3.1 (13343438)”<==Sub-patch

Bugs fixed:
13616375, 14035825, 12861463, 12834027, 15862021, 13632809, 13377816 …
¤在MOS文檔中有針對Composite Patches詳細的說明:Note 1376691.1 Composite Patches for Oracle Products

Database Patch for Exadata 也叫EXADBBP 或BP,僅用於exadata machine ORACLE 11G,每月發行, 每月重要 的BP都會放在本季度的Quarterly Full Stack Download Patch for Exadata
Quarterly Full Stack Download Patch for Exadata QFSDP for Exadata,同樣也是僅用於EXADATA MACHINE ORACLE 11G, 每季度發行,包括 Exadata 上的數據庫補丁以及其他 Exadata 組件的補丁。

不可用於非EXADATA系統。大多數更新都是專門為 Exadata 上的 Oracle Database (DB_BP) 和 Oracle Clusterware (GI_BP) 創建的 Bundle patches 發行的。Bundle patches 包含的不是 Exadata 特定代碼,但是,只能在用於測試目的,或者是為Exadata 系統提供災難恢復支持的時候,才可以在 non-Exadata 系統上安裝這些補丁。只有當 non-Exadata 系統用在 Data Guard 環境中作為 Exadata 系統的備用系統時,Oracle 才為 non-Exadata 系統提供在 Exadata bundle patches 基礎上的臨時修復。

Database Proactive Bundle Patch 適用於12c 數據庫安裝在 Exadata 上,同樣適用於任何使用 Database In-Memory (DBIM) 特性的 12c 系統,RAC 或 non-RAC。數據庫和 Grid 的 home 也適用。僅用於 12.1.0.2 及以上 DB on linux/unix平臺,從1937782.1可以看出在2016年4月前的補丁都是叫for Engineered Systems and DB In-Memory, 發布周期為每個月一次,截至2016年4月,Database Patch for Engineered Systems and Database In-Memory 已重新命名為”Database Proactive Bundle Patch”,不再只限於Engineered Systems and DB In-Memory,可以用於EXADATA也可以用於非EXADATA,和RAC及非RAC系統。為每季度發布一次,成為了一種新型的季度補丁,也是累計型,版本的第5個字段指定,”Database Proactive Bundle Patch”比Patch Set Update (PSU) 需要多一些測試,因為它提供了大量的修復.

¤DBBP就PSU的 超集,BP是增量包含的如10,包含1-9,也包含了創建BP時最近的PSU和CPU,所以建議安裝最新的BP, 準確應該是說包含了PSU,CPU修復的問題。

¤最新的BP latest Bundle Patch can be found in the MOS note 21188742.8 or in the Mos note: 12.1.0.2 Bundle Patches for Engineered Systems and DB In-Memory (Doc ID 1937782.1).

¤For In-Memory customers we recommend that you always run with the latest Bundle Patch!

¤重要的一點是12C的DBBP和以前的 “Windows Bundle Patch” (BP)沒有直接關系,windows 還是繼續使用之前的WINDOWS BP.

新的DBBP在單獨的子目錄中所含下列組件:

* Clusterware component the same as GI PSU

* ACFS component the same as GI PSU

* 一個數據庫bundle 組件包含了所有的PSU修復補丁及並且“以及專門針對Engineered Systems and DB In-Memory的額外修復”

¤雖然DBBP是包含了多個PSU和BUG FIXED,但是DBBP不能是基於上一季度的PSU繼續安裝,反之亦然,所以如果切換DBBP和PSU的補丁安裝技術需要提前rollback有沖突的PSU, 這樣做需要更我的時間窗口和停機時間。

如果下載同期的DBBP和PSU 會發現裏面的子補丁存在互斥, 在DBBP的readme中會看到DBBP明確是增量的包含了所有的PSU和CPU,雖然子補丁號不同 但是安裝後使用opatch lsinventory -bugs_fixed 會發現DBBP會包含了同期PSU修得的所有BUG,還能找到一些fixed的BUG在DBBP中,而沒有在PSU中 。除此之外,“Proactive”DBBP包含Non-Engineered Systems或DBIM時影響RDBMS的PSU中未包含修復的錯誤。 dba_registry_sqlpatch視圖的字段BUNDLE_SERIES可以看到安裝的PATCH是PSU還是DBBP. 前面所指的都是ORACLE企業版,在有些DBBP的readme中可能會寫標準版還是應該安裝PSU,註意是“應該”而不是“必須”.

o 該 bundle 的修復信息可能包括一些”Exadata”特定的修復,這是因為 bundle 同樣適用於 Exadata 系統。

o 詳情請參閱 Note 1937782.1 12.1.0.2 Database Proactive Bundle Patches / Bundle Patches for Engineered Systems and DB In-Memory – List of Fixes in each Bundle – 每個 bundle 的修復列表。

References :
老托的Oracle 數據庫Patch概念性小常識
Oracle Database – 數據庫補丁使用方法概述 (文檔 ID 2227021.1)
ORACLE DATABASE 12C: PSUS VS DATABASE PROACTIVE BUNDLE PATCHES

Oracle 補丁那些事兒(PS、PSU、CPU、SPU、BP、DBBP…)