oracle 補丁種類和升級方法以及oracle RAC Rolling Patch 說明

不一樣的天空w發表於2017-11-16
一、oracle 補丁種類和升級方法

oracle有很多種補丁型別,我們應該對oracle的補丁型別有一定了解,特別是一些關鍵的補丁,可能客戶會定期對資料庫升級,無論修復bug,還是為了安全。

下面我對資料庫的補丁進行一定的講解:

補丁型別:
1. release

這個是資料庫的基本版本,標準產品釋出。如OracleDatabase 10g Release 2的第一個發行版本為10.2.0.1,可以在OTN、edelivery等站點上公開下載,現在在網上只能下載oracle 11g和oracle 12c。

2. Patch Set Release

就是早期大家常說的PSR。這是在主版本號上釋出的補丁集,修復了較多的Bug,可能會包含一些增強功能(Enhancement)。比如11.2.0.1是一個主版本,那麼11.2.0.2、11.2.0.3就是2個不同的Patchset。這種補丁集經過了嚴格的整合測試,也是累積型的。所以推薦安裝最新的Patchsets

這種補丁在oracle 11.2之前都是覆蓋方式升級,就是直接補丁覆蓋原來軟體,這樣停機時間會長。如果需要升級到oracle10.2.0.5,那麼只能先安裝oracle 10.2.0.1,然後升級到oracle 10.2.0.5;
而到oracle11.2之後 oracle使用Out-of-Place,就是補丁可以直接安裝了,並且如果想升級到oracle 11.2.0.4的時候不需要先安裝oracle11.2.0.1,然後升級到oracle 11.2.0.4,可以直接安裝oracle 11.2.0.4。可以將Oracle Database安裝到新的OracleHome目錄,當安裝結束後,舊的database會遷移到新的Oracle HOME目錄。 這種方法是oracle推薦的方式,它可以降低停機時間,也相對更安全。但是這種方法需要至少兩倍的磁碟空間。

3. Patch Set Update

就是DBA&DMA們常論道的PSU。Oracle選取在每個季度使用者下載數量最多,並且得到驗證具有較低風險的補丁放入到每個季度的PSU中,修復比較嚴重的一些問題,包含每個季度的CPU,是累積型的。雖然在描述PSU的時候會用到資料庫版本第5位,比如DatabasePSU 11.2.0.3.5,但實際上打完PSU後並不會真正改變資料庫的版本,從v$version中看到的版本還是4位的(11.2.0.3.0),第5位仍然是0

這種補丁客戶會經常進行操作的,也是我們需要必會的

4. Critical Patch Update

這個指的就是CPU補丁。每季度釋出一次,用來修復安全方面的一些補丁,是累積型的。目前(2012年10月)已經更名為Security Patch Update (SPU)
這類問題本來不屬於軟體錯誤,在正常使用中不會出現任何問題。但是別有用心的人可以透過執行非常精巧設計的程式碼 ,繞過資料庫系統的安全管理機制,達到非授權存取的目的

這種補丁是偏向安全的,就是修復oracle漏洞。

5. Interim Patch/One-Off Patch

是我們常說的小補丁,為了修復某(幾)個Bug而釋出的補丁。這種補丁推薦在測試庫上測試無誤後再安裝在生產庫上,這種補丁是oracle最小單元。

6. Bundle Patch(BP)

補丁集,修復多個Bug。在Windows平臺上的Oracle沒有小補丁,只有這種Bundle Patch。 這種累積型的補丁集會週期性的釋出(至少每季一次),也就是每個Bundle Patch會包含之前所有的Bundle Patch。比如Windows Bundle Patch 16,它會包含之前所有15個BundlePatch,所以我們總是推薦安裝最新的Bundle Patch。Oracle的叢集軟體和資料庫軟體的Window Bundle Patch是同一個,比如Windows Bundle Patch 16(補丁號16167942,既可以打在叢集上,也可以打在資料庫上)


7.補丁打得方法和注意事項:

以上的補丁除了PSR直接使用runInstaller,其他的補丁型別都是使用opatch命令,在oracle 10g之前,我們需要單獨下載此命令,到oracle 10g之後這個命令在 ORACLE_HOME/Opatch下,因此,最好在環境變數path中新增以下.打補丁需要inventory是沒有問題的,需要透過opatch lsinventory來驗證

由於rac環境除了PSR,其他補丁型別可以每臺伺服器單獨打,因此在打補丁的時候加上-local。如:
 opatch apply -local

除了PSR,其他補丁可以回退,回退方法:opatch rollback -id 後邊跟補丁號


二、 Oracle RAC Rolling Patch 說明
關於Oracle 的Patch安裝,之前有整理過幾篇文件,如下:

Oracle 補丁體系 及opatch 工具 介紹
http://blog.csdn.net/tianlesoftware/article/details/5809526

Oracle 11g 新特性 --Online Patching (Hot Patching 熱補丁)說明
http://blog.csdn.net/tianlesoftware/article/details/8214412

Oracle 更新 OPatch 工具版本 的方法說明
http://blog.csdn.net/tianlesoftware/article/details/6857059

這裡看一下RAC的Patch。 這裡是針對DB Patch 來說明,如果是RAC的GI升級,或者是PSR,還是需要停機的。因為GI的升級需要停掉整個CRS,但對資料庫獨立patch則可以採取滾動方式來安裝。

 
RAC Patch的幾種方法

RAC 環境下有三種不同的patch方法:

1.1 對所有節點同時Patch(All-Node Patch)

對於這種模式,OPatch 先在本地節點apply patch,然後在其他節點apply,最後更新inventory。 在這個patch的過程中,所有例項都必須shutdown。

該模式的操作步驟如下:

(1)關閉所有節點上的例項。
(2)在所有節點上apply patch。
(3)啟動所有例項。

 
1.2 使用最小當機時間來打Patch

在這種模式下,OPatch 先對本地節點打opatch。然後讓使用者選擇其他的節點來進行patch,其他節點也patch完成,最後在更新inventory。

在這種模式下,downtime的時間就是第二個節點關閉到第一個節點起來之間的時間

最小當機的操作步驟如下:

(1)關閉節點1的例項
(2)在節點1上apply Patch
(3)關閉節點2上的例項。
(4)在節點2上應用Patch。
(5)關閉節點3上的例項。
(6)在這個時候,節點1和節點2的例項可以啟動
(7)在節點3上應用patch。
(8)啟動節點3上的例項。

以上整個過程,downtime就是節點3 shutdown到節點1,2啟動這段時間。

 
1.3 Rolling Patch(不需要down time)
在這種方法裡,沒有downtime 時間。 每個節點都可以打patch,並且其他節點也可以正常執行,這種情況下對系統就沒有影響。

Rolling Patch 也不總是不需要downtime時間因為有些patch支援 rolling patch,有些不支援對於不支援rolling patch的,只能按照老方法來安裝

Rolling patch的步驟如下:

(1)關閉節點1的例項
(2)在節點1上應用Patch。
(3)在節點1上啟動例項。
(4)關閉節點2上的例項。
(5)在節點2上應用Patch。
(6)在節點2上啟動例項。
(7)關閉節點3上的例項。
(8)在節點3上應用Patch。
(9)啟動節點3上的例項。


1.4 如何判斷使用哪種方法

只有滿足特定條件的Patch 才可以進行rolling patch。該類patch被稱為:rolling updateble patch 或者 rolling patch
如果使用者指定了最小當機時間,選擇最小當機時間,如果沒有指定,就使用rolling patch,最後在考慮同時對所有節點進行patch。

 
三. 如何判斷Patch 是否是Rolling Patch?

當oracle 釋出一個patch的時候,會對patch 進行標記:rolling 或者是not rolling。大部分的patch 都是rolling的。

Rolling Patch 有如下特性:

(1)Patch 不影響資料庫的內容
(2)Patch 和RAC 內部通訊結構無關
(3)Patch 改變程式的邏輯,不修改kernel modules的common header definitions。包括客戶端的patch,其隻影響一些工具,如export,import,sql*plus和sql*loader等。

只有獨立的patches才是rollable的。對於patch sets不能進行rolling patch。

將多個rolling patch 合併起來的merge patch 和普通的patch都不是 rolling patch。

從Oracle 9.2.0.4 開始,根據定義的規則,所有的的patches都會被標記為rolling 或者 not rolling patch。 在這之前的patch都會標記為not rolling。

 
檢查patch是否是 rolling patch

執行如下命令:
   - 9i or 10gR1: opatch query -is_rolling
   - 10gR2: opatch query -all  [unzipped patchlocation] | grep rolling
   - 10gR2 on Windows: opatch query -all [unzipped patchlocation] | findstr rolling
   - Later 10gR2 or 11g: opatch query -is_rolling_patch [unzipped patch location]

如果我們解壓縮的patch 路徑包含多個子patch目錄,那麼opatch命令就不能正常工作。

--不能用root使用者執行判斷命令

[root@rac1 16056266]#/u01/app/grid/11.2.0/OPatch/opatch query -is_rolling_patch/u01/software/16056266

The user is root. OPatch cannot continue ifthe user is root.

OPatch failed with error code 255

[root@rac1 16056266]# su - grid

[grid@rac1 ~]$/u01/app/grid/11.2.0/OPatch/opatch query -is_rolling_patch/u01/software/16056266

Oracle Interim Patch Installer version11.2.0.3.4

Copyright (c) 2012, OracleCorporation.  All rights reserved.

Oracle Home       : /u01/app/grid/11.2.0
Central Inventory : /u01/app/oraInventory
  from            :/u01/app/grid/11.2.0/oraInst.loc
OPatch version    : 11.2.0.3.4
OUI version       : 11.2.0.3.0
Log file location :/u01/app/grid/11.2.0/cfgtoollogs/opatch/opatch2013-06-09_04-14-34AM_1.log

Failed to load the patch object.  Possible causes are:
  Thespecified path is not an interim Patch shiphome
 Meta-data files are missing from the patch area
 Patch location = /u01/software/16056266
 Details = Input metadata files are missing.

Patch Location"/u01/software/16056266" doesn't point to a valid patch area.

--因為我們指定的/u01/software/16056266的路徑下面還包含其他的子patch所以報錯

OPatch failed with error code 75


[grid@rac1 ~]$ cd /u01/software/16056266
[grid@rac1 16056266]$ ls
13343438 13696216  13923374  14275605 14727310  16056266  patchmd.xml README.html  README.txt

--對單個patch進行檢視:
[grid@rac1 16056266]$  /u01/app/grid/11.2.0/OPatch/opatch query-is_rolling_patch /u01/software/16056266/13343438/

Oracle Interim Patch Installer version11.2.0.3.4
Copyright (c) 2012, OracleCorporation.  All rights reserved.

oracle Home       : /u01/app/grid/11.2.0
Central Inventory : /u01/app/oraInventory
  from           :/u01/app/grid/11.2.0/oraInst.loc
OPatch version    : 11.2.0.3.4
OUI version       : 11.2.0.3.0
Log file location :/u01/app/grid/11.2.0/cfgtoollogs/opatch/opatch2013-06-09_04-15-17AM_1.log

--------------------------------------------------------------------------------
 Patch is a rolling patch: true
 
OPatch succeeded.

[grid@rac116056266]$ /u01/app/grid/11.2.0/OPatch/opatch query -is_rolling_patch/u01/software/16056266/13696216

Oracle Interim Patch Installer version11.2.0.3.4
Copyright (c) 2012, OracleCorporation.  All rights reserved.

Oracle Home       : /u01/app/grid/11.2.0
Central Inventory : /u01/app/oraInventory
  from           :/u01/app/grid/11.2.0/oraInst.loc
OPatch version    : 11.2.0.3.4
OUI version       : 11.2.0.3.0
Log file location :/u01/app/grid/11.2.0/cfgtoollogs/opatch/opatch2013-06-09_04-15-32AM_1.log

--------------------------------------------------------------------------------
 Patch is a rolling patch: true
 
OPatch succeeded.
 
Patch的一些限制
 
1.在Shared File System上進行Patch時,Currently Opatch會把Shared File System當作單例項來進行Patch。OPatch 會把patch file 放在ORACLE_HOME目錄,因為是共享的,所以其他節點也可以訪問。因此對於Shared FileSystem的環境,就不能使用OPatch 的高階功能:rollingpatch,在打Patch的時候,所有節點都必須shutdown。

2.每次Patch一個節點時,可以在每個節點獨立的進行patch,即在opatch的時候只用: -local 關鍵字,這樣就只會在本地節點進行patch。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2147368/,如需轉載,請註明出處,否則將追究法律責任。

相關文章