1. 程式人生 > >轉://Oracle補丁及opatch工具介紹

轉://Oracle補丁及opatch工具介紹

獨立 管理所 無效對象 rim 計劃 目錄 conn 技術 有時

一. CPU(Critical Patch Update)

一個CPU內包含了對多個安全漏洞的修復,並且也包括相應必需的非安全漏洞的補丁。CPU是累積型的,只要安裝最新發布的CPU即可,其中包括之前發布的所有CPU的內容。事實上,在CPU之前的安全漏洞修改除去個別例外也被包括在CPU中。Oracle公司只對處於標準技術支持和延長支持期間的產品提供CPU更新,對處於維持支持範圍的產品不提供新的CPU.(對於9.2以前的版本,只對處於ECS和EMS期間的版本提供CPU更新。)

一般對當前補丁發行版及前一個版本提供CPU,但也有只限於當前補丁發行版的例外情形。也就是說,一般需要先安裝最新PSR後才可能安裝CPU.由於是累積型的定期發布,所以對於某一平臺的某一版本,如果兩次CPU發布期間沒有發現新的安全漏洞,則新發布的CPU與前一版本完全相同。

可以在以下網址中可以找到CPU發布的信息,只要在Oracle 免費註冊一個用戶,就可以收到這些補丁的信息。但是,只有技術支持簽約用戶才可以從metalink下載補丁文件。

http://www.oracle.com/technology/deploy/security/alerts.htm

Oracle公司制定的CPU的發布日期大約在一月、四月、七月和十月的最接近15的星期二。

Critical Patch Updates

Critical Patch Updates are the primary means of releasing security fixes for Oracle products to customers with valid support contracts. They are released on the Tuesday closest to the 15th day of January, April, July and October. Starting 2011, the scheduled dates for the release of Critical Patch Updates will be on the Tuesday closest to the 17th day of January, April, July and October. The next four dates are:

12 October 2010

18 January 2011

19 April 2011

19 July 2011

對於每一個CPU,附有相應的說明文檔(Critical Patch Update Note),其中介紹安裝過程和註意事項,在安裝之前應認真閱讀此文檔。同樣也存在文檔“Oracle Critical Patch Update MM YYYY Known Issues for Oracle Database”,其中列出了說明文檔中沒有給出的新信息。

二.PSR(Patch Set Release) 和 PSU(Patch Set Update)

8i,9i,10g,11g這是其主要版本號,每一版本會陸續有兩至三個發行版,如10.1,10.2,和 11.1,11.2分別是10g和11g的兩個發行版。對於每一個發行版軟件中發現的BUG,給出相應的修復補丁。每隔一定時期,會將所有補丁集成到軟件中,經過集成測試後,進行發布,也稱為PSR(Patch Set Release)。以10.2為例,10.2.0.1.0是基礎發行版,至今已有三個PSR發布,每個PSR修改5位版本號的第4位,最新10.2的PSR為10.2.0.4.0。(11.1.0.6.0是11.1的基礎發行版,11.1.0.7.0是第一次PSR) 。

在某個PSR之後編寫的補丁,在還沒有加入到下一個PSR之前,以個別補丁(Interim Patch)的形式提供給客戶。某個個別補丁是針對Oracle公司發現的或客戶報告的某一個BUG編寫的補丁,多個個別補丁之間一同安裝時可能會有沖突,即同一個目標模塊分別進行了不同的修改。另外,即便在安裝時沒有發現沖突,由於沒有進行嚴格的集成測試,運行過程中由於相互作用是否會發生意外也不能完全排除。

除去修改功能和性能BUG的補丁,還有應對安全漏洞的安全補丁。Oracle公司定期(一年四期)發布安全補丁集,稱之為CPU(Critical Patch Updates)。

由於數據庫在信息系統的核心地位,對其性能和安全性的要求非常高。理應及時安裝所有重要補丁。另外一個方面,基於同樣的理由,要求數據庫系統必須非常穩定,安裝補丁而導致的系統故障和性能下降同樣不可接受。DBA經常面臨一個非常困難的選擇:對於多個修復重要BUG的個別補丁是否安裝。不安裝,失去預防故障發生的機會,以後故障發生時,自己是無作為;安裝,如果這些補丁中存在著倒退BUG,或者相互影響,以後發生由於安裝補丁而造成的故障時,自己則是無事生非!而等待下一個PSR,一般又需要一年時間。因此,出現了PSU(Patch Set Update)。

PSU解決以下幾個問題:

1. 減輕PSR周期長而帶來的不能及時更新的影響;

2. 解決多個個別補丁沖突和相互影響的問題;

3. 減輕DBA安裝補丁的負擔:補丁安裝次數,不定期檢查補丁發布。

PSU具有如下特點:

第一、PSU是PSR的補充,在兩次PSR發布之間發布多個PSU,加快更新速度。每個PSU修改5位版本號的第5位。例如,安裝此次發布的 PSU後,11.1版本“升級”為11.1.0.7.1;10.2版本為10.2.0.4.2。

第二、每個PSU中包含25至100個重要補丁,作為一個整體進行嚴格測試,解決沖突問題,保證系統的穩定性。PSU不僅包括對功能、性能修復的一般補丁,也包括安全補丁。

第三、PSU定期發布,計劃一年分布四次,發布日期與CPU發布日期相同。由於PSU包括同期發布的CPU,只要安裝PSU即可。(對部分平臺,仍提供單獨的CPU,供客戶選擇)

第四、如同PSR和CPU一樣,PSU是累積型的,即只要安裝最新的PSU就自動包括以前所有PSU的內容。

第五、使用DBA已經熟悉的Opatch工具安裝/刪除PSU,命令仍是apply和rollback。一個PSU可視作一個個別補丁,安裝和刪除操作都很簡便。

第六、現有的個別補丁與PSU的關系分為三類:完全獨立;是PSU的一部分;與PSU沖突。第一類的個別補丁與PSU相互沒有影響,可以獨立的安裝或刪除。對於第二類,在安裝PSU之後,自然沒有必要安裝。若在PSU之前已安裝,則在安裝PSU時會被自動刪除。對於第三類個別補丁,如在PSU之前已安裝,必須在安裝PSU時刪除。客戶可以向Oracle公司技術支持部門提出申請,由Oracle負責提供與PSU不沖突的,在PSU之上安裝的相應的新的版本。

PSU的限制:必須是在正常技術支持範圍之內的版本(11.2、11.1和10.2),並且PSU只能在最新PSR之上安裝。

三.OPatch 命令

先看一個官網的Oracle OPatch 的說明:

Oracle Software Patching Using Opatch

http://download.oracle.com/docs/cd/B19306_01/em.102/b16227/oui8_opatch.htm

從9.2版開始,Oracle公司實現了個別補丁安裝工具opatch. opatch使用一個稱為inventory的系統數據結構(嚴格說是與oui共享inventory),集中管理所有已安裝的個別補丁;個別補丁的安裝和卸載都使用opatch命令完成,沖突檢測也由opatch在安裝時自動完成;提供列表命令可以很方便得到已安裝個別補丁的信息。

10g(10.1和10.2)版本中,opatch作為一個標準工具,在安裝時自動安裝。(安裝在$ORACLE_HOME/OPatch下。)而對於9.2版,需要從metalink下載opatch.無論是哪一個版本,系統中是否已經安裝opatch,在使用之前,應從metalink下載最新版本的opatch.很遺憾,由於系統實現的問題,10.2使用的opatch與之前版本(10.1和9.2)使用的opatch不兼容,不能混用,這一點必須註意。

opatch是使用perl編寫的腳本程序(其中也使用JAVA API)。使用的perl版本是5.6版,雖然在5.6之前的版本中也可運行,但應盡可能安裝5.6或以上的版本的perl. 對於DBA來說一個好消息是,如果安裝9.2版軟件時保留了HTTP服務器,則在$ORACLE_HOME/Apache下會自動安裝perl.(10g會自動安裝配置perl和opatch.)

3.1 opatch命令存放位置

該命令的存放位置在$ORACLE_HOME下的OPatch目錄下。

-bash-3.2$ pwd

/u01/oracle/oracle/product/10.2.0/db_1/OPatch

-bash-3.2$ ls

docs emdpatch.pl jlib opatch opatch.ini opatch.pl

-bash-3.2$ ls -lrt

total 44

-rw-r--r-- 1 oracle oinstall 18107 Apr 18 2005 emdpatch.pl

-rw-r--r-- 1 oracle oinstall 2193 Jun 1 2005 opatch.pl

-rwxr-xr-x 1 oracle oinstall 5672 Jun 1 2005 opatch

drwxr-x--- 2 oracle oinstall 4096 Apr 21 13:24 jlib

drwxr-x--- 2 oracle oinstall 4096 Apr 21 13:24 docs

-rw-r--r-- 1 oracle oinstall 49 Apr 21 13:24 opatch.ini

3.2 使用“-help”參數可以獲得opatch命令的幫助信息

-bash-3.2$ ./opatch --help

Invoking OPatch 10.2.0.1.0

Oracle interim Patch Installer version 10.2.0.1.0

Copyright (c) 2005, Oracle Corporation. All rights reserved..

Oracle Home : /u01/oracle/oracle/product/10.2.0/db_1

Central Inventory : /u01/oracle/oraInventory

from : /u01/oracle/oracle/product/10.2.0/db_1/oraInst.loc

OPatch version : 10.2.0.1.0

OUI version : 10.2.0.1.0

OUI location : /u01/oracle/oracle/product/10.2.0/db_1//oui

Log file location : /u01/oracle/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch-2010_Aug_09_03-05-40-CST_Mon.log

Usage: opatch [ -help ] [ -r[eport] ] [ command ]

command := apply

lsinventory

query

rollback

version

<global_arguments>:= -help Displays the help message for the command.

-report Print the actions without executing (deprecated).

example:

‘opatch -help‘

‘opatch apply -help‘

‘opatch lsinventory -help‘

‘opatch rollback -help‘

OPatch succeeded.

這個是10.2.0.1版本的opatch. 在10.2.0.4 版本的opatch命令與之前的又不同,它有添加了幾個命令。

-bash-3.2$ ./opatch --help

Invoking OPatch 11.1.0.6.6

Oracle Interim Patch Installer version 11.1.0.6.6

Copyright (c) 2009, Oracle Corporation. All rights reserved.

Usage: opatch [ -help ] [ -r[eport] ] [ command ]

command := apply

lsinventory

napply

nrollback

rollback

query

version

prereq

util

<global_arguments>:= -help Displays the help message for the command.

-report Print the actions without executing.

example:

‘opatch -help‘

‘opatch apply -help‘

‘opatch lsinventory -help‘

‘opatch napply -help‘

‘opatch nrollback -help‘

‘opatch rollback -help‘

‘opatch prereq -help‘

‘opatch util -help‘

OPatch succeeded.

官網上對命令的一些解釋:

apply

Installs an interim patch. Refer to "apply Command" for more information.

napply

Installs n number of patches (hence napply). Refer to "napply Command" for more information.

auto

Applies Oracle Clusterware patches. Refer to "auto Command" for more information.

lsinventory

Lists what is currently installed on the system. Refer to "lsinventory Command" for more information.

query

Queries a given patch for specific details. Refer to "query Command" for more information.

rollback

Removes an interim patch. Refer to "rollback Command" for more information.

nrollback

Removes n number of patches (hence nrollback). Refer to "nrollback Command" for more information.

version

Prints the current version of the patch tool. Refer to "version Command" for more information.

在$ORACLE_HOME/OPatch/docs目錄下,用指南文件(Users_Guide.txt),其中有詳細的命令格式和使用示例,可以參考。

Opatch執行操作時,除在屏幕輸出結果外,還生成日誌文件。日誌文件的路徑和文件名格式如下:

$ORACLE_HOME/.patch_storage/< patch_id >/< action >-< patch_id >_< mm-dd-yyyy_hh-mi-ss>.log

其中“patch_id”是Oracle技術支持部門為個別補丁分配的編號。

3.3 opatch安裝個別補丁示例:

以Patch 5689937 為例。

3.3.1 patch下載

從metalink下載補丁的壓縮文件p5689937_10201_LINUX.zip.將此文件解壓縮至某一目錄中。解壓縮後,這一補丁的所有文件都在子目錄5689937下,目錄名就是個別補丁的補丁號,opatch依據目錄名獲得信息,所以一定不要重命名子目錄。

3.3.2 安裝patch

進入patch文件5689937 目錄,在patch的目錄下面有一個readme的安裝文檔,裏面有安裝步驟和一些問題的處理方法。

3.3.2.1 關閉數據庫和監聽

Shut down all instances and listeners associated with the Oracle home that you are updating.

3.3.2.2. 進入patch目錄,運行opatch apply命令

-bash-3.2$ cd p5689937_10201_LINUX/

-bash-3.2$ ls

5689937 patchmd.xml README.html

-bash-3.2$ cd 5689937/

-bash-3.2$ ls

custom etc files README.txt

-bash-3.2$ pwd

/mnt/p5689937_10201_LINUX/5689937

-bash-3.2$ export PATH=$PATH:/usr/ccs/bin

-bash-3.2$ $ORACLE_HOME/OPatch/opatch apply

3.3.2.3 啟動實例,運行相關腳本

-bash-3.2$ cd $ORACLE_HOME/cpu/CPUJan2007/ -- 要進入這個目錄才能找到腳本

-bash-3.2$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 9 04:48:19 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 281018368 bytes

Fixed Size 1218968 bytes

Variable Size 83887720 bytes

Database Buffers 192937984 bytes

Redo Buffers 2973696 bytes

Database mounted.

Database opened.

SQL> @catcpu.sql

如果catcpu.sql 腳本報任何無效對象,執行如下腳本:

SQL> @?/rdbms/admin/utlrp.sql

可以用如下SQL 檢查無效對象:

SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS= ‘INVALID‘;

3.3.3 用inventory 命令查看已經安裝的patch

-bash-3.2$ $ORACLE_HOME/OPatch/opatch lsinventory

Invoking OPatch 10.2.0.1.0

Oracle interim Patch Installer version 10.2.0.1.0

Copyright (c) 2005, Oracle Corporation. All rights reserved..

Oracle Home : /u01/oracle/oracle/product/10.2.0/db_1

Central Inventory : /u01/oracle/oraInventory

from : /u01/oracle/oracle/product/10.2.0/db_1/oraInst.loc

OPatch version : 10.2.0.1.0

OUI version : 10.2.0.1.0

OUI location : /u01/oracle/oracle/product/10.2.0/db_1//oui

Log file location : /u01/oracle/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch-2010_Aug_09_04-55-55-CST_Mon.log

Lsinventory Output file location : /u01/oracle/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory-2010_Aug_09_04-55-55-CST_Mon.txt

--------------------------------------------------------------------------------

Installed Top-level Products (1):

Oracle Database 10g 10.2.0.1.0

There are 1 products installed in this Oracle Home.

Interim patches (1) :

Patch 5689937 : applied on Mon Aug 09 04:43:27 CST 2010

Created on 8 Jan 2007, 11:48:31 hrs US/Eastern

Bugs fixed:

4671216, 4925103, 4604970, 4616376, 5689937, 4288876, 5225798, 5694720

4754888, 4750469, 4369235, 4751931, 4966716, 5049080, 5242648, 4348230

5490846, 4630549, 5490936, 5049088

--------------------------------------------------------------------------------

OPatch succeeded.

或者用$ORACLE_HOME/OPatch/opatch lsinventory –detail 命令查看詳細。

3.4 卸載 opatch

3.4.1 關閉實例和監聽

SQL> shutdown immediate

3.4.2 執行opatch命令

-bash-3.2$ cd $ORACLE_HOME/OPatch/

-bash-3.2$ ./opatch rollback -id 5689937

3.4.3 啟動實例,執行catcpu_rollback.sql腳本

-bash-3.2$ cd $ORACLE_HOME/cpu/CPUJan2007/

-bash-3.2$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 9 05:04:19 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 281018368 bytes

Fixed Size 1218968 bytes

Variable Size 109053544 bytes

Database Buffers 167772160 bytes

Redo Buffers 2973696 bytes

Database mounted.

Database opened.

SQL> @catcpu_rollback.sql -- 這個腳本在patch的安裝目錄裏也有

如果在運行中出現無效對象,運行如下腳本:

SQL> @?/rdbms/admin/utlrp.sql

檢查無效對象:

SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS = ‘INVALID‘;

關於Patch的說明就到此。 在後說明一點。 有時我們的生產庫遇到一個問題,但是又不能十分確定是否是某個bug的時候,可以先考慮打patch看一下,如果解決了更好,如果不能解決,把patch刪掉即可。 這樣可以把問題控制在可控的範圍內,避免把問題擴大化。

轉://Oracle補丁及opatch工具介紹