天天看點

Oracle 更新檔體系 及 opatch 工具 介紹

一. 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下載下傳更新檔檔案。

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

從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指令與之前的又不同,它有添加了幾個指令。

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.

            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.

   'opatch -help'

   'opatch apply -help'

   'opatch lsinventory -help'

   'opatch napply -help'

   'opatch nrollback -help'

   'opatch rollback -help'

   'opatch prereq -help'

   'opatch util -help'

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

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/

5689937  patchmd.xml  README.html

-bash-3.2$ cd 5689937/

custom  etc  files  README.txt

/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

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

或者用$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

SQL> conn / as sysdba

SQL> startup

Variable Size             109053544 bytes

Database Buffers          167772160 bytes

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

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

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

檢查無效對象:

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

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

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

文章可以轉載,必須以連結形式标明出處。

本文轉自 張沖andy 部落格園部落格,原文連結: http://www.cnblogs.com/andy6/p/5766614.html  ,如需轉載請自行聯系原作者