Oracle 補丁體系 及 opatch 工具 介紹

perfychi發表於2014-01-10

http://blog.csdn.net/tianlesoftware/article/details/5809526

Oracle 補丁體系 及 opatch 工具 介紹

分類: Oracle Advanced Knowledge 8630人閱讀 評論(3)  舉報

 

一. CPUCritical Patch Update

    一個CPU內包含了對多個安全漏洞的修復,並且也包括相應必需的非安全漏洞的補丁。CPU是累積型的,只要安裝最新發布的CPU即可,其中包括之前釋出的所有CPU的內容。事實上,在CPU之前的安全漏洞修改除去個別例外也被包括在CPU中。Oracle公司只對處於標準技術支援和延長支援期間的產品提供CPU更新,對處於維持支援範圍的產品不提供新的CPU.(對於9.2以前的版本,只對處於ECSEMS期間的版本提供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”,其中列出了說明文件中沒有給出的新資訊。

 

 

二.PSRPatch Set Release  PSUPatch Set Update

 

8i,9i,10g,11g這是其主要版本號,每一版本會陸續有兩至三個發行版,如10.110.2,和 11.111.2分別是10g11g的兩個發行版。對於每一個發行版軟體中發現的BUG,給出相應的修復補丁。每隔一定時期,會將所有補丁整合到軟體中,經過整合測試後,進行釋出,也稱為PSRPatch Set Release。以10.2為例,10.2.0.1.0是基礎發行版,至今已有三個PSR釋出,每個PSR修改5位版本號的第4位,最新10.2PSR10.2.0.4.0(11.1.0.6.011.1的基礎發行版,11.1.0.7.0是第一次PSR) 

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

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

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

 

PSU解決以下幾個問題:

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

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

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

PSU具有如下特點:

第一、PSUPSR的補充,在兩次PSR釋出之間釋出多個PSU,加快更新速度。每個PSU修改5位版本號的第5位。例如,安裝此次釋出的 PSU後,11.1版本升級11.1.0.7.110.2版本為10.2.0.4.2

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

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

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

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

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

 PSU的限制:必須是在正常技術支援範圍之內的版本(11.211.110.2),並且PSU只能在最新PSR之上安裝

 

 

 

三. OPatch 命令

 

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

       Oracle Software Patching Using Opatch

       

 

 

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

  

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

  

opatch是使用perl編寫的指令碼程式(其中也使用JAVA API)。使用的perl版本是5.6版,雖然在5.6之前的版本中也可執行,但應儘可能安裝5.6或以上的版本的perl. 對於DBA來說一個好訊息是,如果安裝9.2版軟體時保留了HTTP伺服器,則在$ORACLE_HOME/Apache下會自動安裝perl.10g會自動安裝配置perlopatch.

 

 

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

 

  := -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

  := -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'; 

 

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

相關文章