天天看點

[Oracle] CPU/PSU更新檔安裝教程

什麼是CPU/PSU

Oracle CPU的全稱是Critical Patch Update, Oracle對于其産品每個季度發行一次安全更新檔包,通常是為了修複産品中的安全隐患。

Oracle PSU的全稱是Patch Set Update,

Oracle對于其産品每個季度發行一次的更新檔包,包含了bug的修複。Oracle選取被使用者下載下傳數量多,且被驗證過具有較低風險的更新檔放入到每個季度的PSU中。在每個PSU中不但包含Bug的修複而且還包含了最新的CPU。PSU通常随CPU一起釋出。

CPU是累積的(Cumulative),即最新的CPU更新檔已經包含以往的CPU更新檔,是以隻要安裝最新的CPU更新檔即可。

PSU通常也是增量的,大部分PSU可以直接安裝,但有些PSU則必須要求安裝了上一 個版本的PSU之後才能繼續安裝,要仔細看各個PSU的Readme文檔。

如何下載下傳CPU/PSU

注意:要下載下傳CPU/PSU,必須要有Oracle Support賬号才行!

到Oracle CPU首頁 ,可以看到每個季度釋出的CPU更新檔清單(如下圖所示),根據你的需要選擇相應的CPU更新檔即可,這裡選擇July2011年的更新檔。

[Oracle] CPU/PSU更新檔安裝教程

每個更新檔隻針對特定的資料庫版本,你要找到對應的資料庫版本(如下圖所示),這裡的資料庫版本為11.2.0.1,如果找不到,說明該更新檔不支援該版本資料庫。

[Oracle] CPU/PSU更新檔安裝教程

右邊點選Database連結,就是該更新檔的一個詳細說明文檔,找到3.1.3 Oracle Database,并點選相應的資料庫版本(如下圖所示)

[Oracle] CPU/PSU更新檔安裝教程

在相應的資料庫版本裡,可以看到各個平台下CPU和PSU版本号,前面已經說過,PSU包含CPU,是以建議盡量安裝PSU,注意:這裡的UNIX平台也包括Linux

[Oracle] CPU/PSU更新檔安裝教程

點選上面的版本号,會自動跳到Oracle Support下載下傳頁面,如下圖所示。選擇相應的平台後,點選Readme可以檢視Readme文檔,點選Download下載下傳

[Oracle] CPU/PSU更新檔安裝教程

閱讀Readme文檔

每個CPU/PSU都有一個Readme文檔,關于該CPU/PSU的所有資訊都在Readme文檔裡,一定要仔細閱讀。

有兩個部分要特别注意:

1)OPatch的版本,你可以通過opatch version指令檢視Oracle Home目前的OPatch版本,如果低于Readme規定的最低版本,一定要先更新OPatch才能打更新檔。

可以參考這篇文章《OPatch - Where Can I Find the Latest Version of OPatch? [Video] [ID 224346.1]》下載下傳最新的OPatch。

2)打Patch步驟:基本上所有的CPU/PSU都大同小異,具體步驟将在下面的例子中展示。

安裝CPU/PSU更新檔

1)事先檢查:檢視資料庫打更新檔前資訊,保留現場

在打更新檔前最好把資料庫的一些基本資訊保留下來,以備不時之需。

set line 150
set pagesize 99
col action_time for a30
col action for a30
col comments for a90
col object_name for a30
col object_type for a30
col comp_name for a50
col comp_id for a20
--檢視執行個體名
sys@ORCL>select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
orcl             OPEN
--檢視資料庫版本
sys@ORCL>select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
--檢視資料庫大小
sys@ORCL>select sum(bytes)/1024/1024||'M' from dba_segments;

SUM(BYTES)/1024/1024||'M'
-----------------------------------------
68058.375M
--檢視元件資訊
sys@ORCL>select COMP_ID,COMP_NAME,VERSION,STATUS from DBA_REGISTRY;

COMP_ID              COMP_NAME                                          VERSION                        STATUS
-------------------- -------------------------------------------------- ------------------------------ ----------------------
OWB                  OWB                                                11.2.0.1.0                     VALID
APEX                 Oracle Application Express                         3.2.1.00.10                    VALID
EM                   Oracle Enterprise Manager                          11.2.0.1.0                     VALID
AMD                  OLAP Catalog                                       11.2.0.1.0                     VALID
SDO                  Spatial                                            11.2.0.1.0                     VALID
ORDIM                Oracle Multimedia                                  11.2.0.1.0                     VALID
XDB                  Oracle XML Database                                11.2.0.1.0                     VALID
CONTEXT              Oracle Text                                        11.2.0.1.0                     VALID
EXF                  Oracle Expression Filter                           11.2.0.1.0                     VALID
RUL                  Oracle Rules Manager                               11.2.0.1.0                     VALID
OWM                  Oracle Workspace Manager                           11.2.0.1.0                     VALID
CATALOG              Oracle Database Catalog Views                      11.2.0.1.0                     VALID
CATPROC              Oracle Database Packages and Types                 11.2.0.1.0                     VALID
JAVAVM               JServer JAVA Virtual Machine                       11.2.0.1.0                     VALID
XML                  Oracle XDK                                         11.2.0.1.0                     VALID
CATJAVA              Oracle Database Java Packages                      11.2.0.1.0                     VALID
APS                  OLAP Analytic Workspace                            11.2.0.1.0                     VALID
XOQ                  Oracle OLAP API                                    11.2.0.1.0                     VALID

18 rows selected.
--檢視更新檔情況
sys@ORCL>select ACTION_TIME, ACTION, COMMENTS from sys.DBA_REGISTRY_HISTORY;

no rows selected
--檢視無效對象
sys@ORCL>select count(*) from dba_objects where status<>'VALID';

  COUNT(*)
----------
       123

sys@ORCL> select object_name,object_type,owner,status from dba_objects where status<>'VALID';

sys@ORCL>spool off
      

2)備份資料庫

這裡對全庫進行備份,以防打更新檔出現意外,可以從備份集中恢複資料。

先關閉監聽器,關閉資料庫執行個體,将其啟到mount狀态,然後用rman進行冷備。

3)備份Oracle軟體

把Oracle軟體打包備份

4)安裝Opatch

--首先,檢視目前的OPatch版本
[oracle@data ~]$ opatch version
Invoking OPatch 11.1.0.6.6

OPatch Version: 11.1.0.6.6

OPatch succeeded.
--如果目前的Opatch版本不夠,下載下傳最新的Opatch,覆寫原來的opatch即可
[oracle@data psu_jul_2011]$ unzip p6880880_112000_Linux-x86-64.zip
--unzip之後,在目前檔案夾下出現OPatch檔案夾
[oracle@data psu_jul_2011]$ mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_20130705
[oracle@data psu_jul_2011]$ cp -r ./OPatch $ORACLE_HOME
[oracle@data psu_jul_2011]$ opatch version
OPatch Version: 11.2.0.3.4

OPatch succeeded.      

5)安裝更新檔(Oracle軟體部分)

首先,通過opatch lsinventory 檢視之前打過的更新檔資訊。

然後解壓縮更新檔檔案:

[oracle@data psu_jul_2011]$ unzip p12419378_112010_Linux-x86-64.zip
[oracle@data psu_jul_2011]$ cd 12419378      

最後在更新檔的主目錄下執行opatch apply,等待5~10分鐘即可(注意:一定要先完全關閉資料庫和監聽器)

[oracle@data 12419378]$ pwd
/home/oracle/psu_jul_2011/12419378
[oracle@data 12419378]$ opatch apply      

如果最後有warnings一般都沒什麼問題,隻要不是error就好。

6)安裝更新檔(資料庫部分)

這步比較簡單,就是跑catbundle腳本,但時間比較長,10分鐘左右(視機器性能而定)

cd $ORACLE_HOME/rdbms/admin
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP
SQL> @catbundle.sql psu apply
SQL> QUIT      

7)重新編譯CPU相關視圖 (如果是PSU可略過次步驟)

該步驟在一個資料庫上永遠隻需要執行一次,是為了完成在2008年1月份第一次釋出CPU更新檔時的後續工作,如果在安裝以前的PSU或者CPU時執行過這個步驟那麼就可以無需再次執行,另外,即使不執行該步驟,資料庫也是正常運作的,隻不過意味着2008年1月份的 CPU更新檔沒有正常結束安裝。

SQL> SELECT * FROM registry$history where ID = '6452863';      

上面這條語句用于判斷是否已經執行過,如果有行數傳回,說明已經執行過,可跳過該步驟;

如果沒有行數傳回,則可根據以下步驟重新編譯CPU/PSU相關視圖:

cd $ORACLE_HOME/cpu/view_recompile 
sqlplus / as sysdba 
SQL> @recompile_precheck_jan2008cpu.sql 
SQL> SHUTDOWN IMMEDIATE 

SQL> STARTUP UPGRADE 

SQL> @view_recompile_jan2008cpu.sql 
SQL> SHUTDOWN; 
SQL> STARTUP; 
SQL> QUIT      

8)事後檢查

該步驟可以和第1)步的事先檢查對照

先編譯無效對象:

@?/rdbms/admin/utlrp.sql      
set line 150
set pagesize 99
col action_time for a30
col action for a30
col comments for a90
col object_name for a30
col object_type for a30
col comp_name for a50
col comp_id for a20

SQL> spool post_check.log
SQL> select instance_name,status from v$instance;
SQL> select COMP_ID,COMP_NAME,VERSION,STATUS from DBA_REGISTRY;
SQL> select ACTION_TIME, ACTION, COMMENTS from DBA_REGISTRY_HISTORY;
SQL> select owner,object_name,object_type,status from dba_objects where status<>'VALID';
SQL> select count(*) from dba_objects where status<>'VALID';
SQL> spool off