轉自同僚ROBIN的部落格
環境AIX5.3, 原oracle版本 10.2.0.1
1 停止OEM/isqlplus/監聽/DB執行個體
$ emctl stop dbconsole
$ isqlplusctl stop
$ lsnrctl stop
$ sqlplus / as sysdba
SQL> shutdown immediate;
2 更新Oracle軟體
1) 備份ORACLE_HOME和oraInventory
更新前對要更新的ORACLE_HOME進行備份是必要的, 還有oraInventory目錄, 一
旦更新失敗便于回退
$ cd $ORACLE_HOME/..
$ tar jcvf db_1_`date +%Y%m%d`.tar.bz2 db_1
$ cd $ORACLE_BASE
$ tar jcvf oraInventory_`date +%Y%m%d`.tar.bz2 oraInventor
另外一個備份的方法
$ cp -pr db_1 db_1_new (備份到新目錄, 且保留mode,ownership,timestamps等資訊)
$ diff -q -r db_1 db_1_new (比較兩個目錄, 應該隻有日志檔案發生變化)
2) 更新Oracle 軟體
通過response檔案開始更新, 更新時間大概2-3分鐘.
設定DISPLAY=192.168.0.1:0.0 (設定圖形顯示,用的是xmanager的passive接收)
安裝之前會提醒你 安裝/usr/sbin/slibclean 這個一定要跑啊。。
$ cd /u01/software/10g/
$ unzip p8202632_10205_AIX64-5L_1of2.zip
$ unzip p8202632_10205_AIX64-5L_2of2.zip
$ cd Disk1
注意更新前要保證/tmp空間有2。5G空餘空間
$ ./runInstaller -silent -responseFile $DISTRIB/response/patchset.rsp
ORACLE_HOME="/u01/app/oracle/product/10.2.0/db_1"
ORACLE_HOME_NAME="OraDb10g_home1" DECLINE_SECURITY_UPDATES="true"
如果未使用預設的組oinstall, 則runInstaller指令後需再加一個參數:
UNIX_GROUP_NAME="oinstall"
各參數含義如下:
-silent 表示以靜默方式安裝,不會有任何提示;
-responseFile 表示使用哪個響應檔案,必需使用絕對路徑;
ORACLE_HOME="/u01/app/oracle/product/10.2.0/db_1" oracle安裝目錄;
ORACLE_HOME_NAME="OraDb10g_home1" ORACLE_HOME名;
DECLINE_SECURITY_UPDATES="true" 是否需要安全更新, true表示不需要,
否則會要求輸入metalink賬号和聯網資訊;
UNIX_GROUP_NAME="oinstall" oracle使用者用于安裝軟體的組名;
注意: 你也可以直接用。/runInstaller運作,安裝程式會檢查和提示你一步一步的更新完成
3) 運作root.sh和changePerm.sh
ü 更新結束後, 以root使用者執行$ORACLE_HOME下的root.sh(如有提示則一直回車):
# /u01/app/oracle/product/10.2.0/db_1/root.sh
安裝PatchSet後新增的檔案或目錄是限制通路的, 其它使用者或第三方工具要通路這些檔案時會提示錯誤,
是以要修改權限:
# su - oracle
$ cd $ORACLE_HOME/install
$ ./changePerm.sh
...
Do you wish to continue (y/n) [n]: y
$ tail -50f /tmp/changePerm_err.log
ü 更新軟體後檢查:
$ sqlplus /nolog
SQL*Plus: Release 10.2.0.5.0 - Production on Sat May 8 14:34:51 2010
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
SQL> exit;
3 更新資料庫
$ sqlplus / as sysdba
SQL> startup upgrade; (以更新模式啟動資料庫)
SQL> SPOOL /tmp/patch102050.log
SQL> @?/rdbms/admin/catupgrd.sql (重建資料字典, 若有問題可重複執行)
Total Upgrade Time: 00:23:34 (資料庫大小110G)
SQL> SPOOL off
SQL> !egrep "ORA-|Error" /tmp/patch102050.log (檢視是否有錯誤)
SQL> startup;
SQL> select count(1) from dba_objects where status='INVALID';
COUNT(1)
----------
484
SQL> @?/rdbms/admin/utlrp.sql (編譯失效PLSQL包對象, 盡管第一次通路包是會自動編譯, 還是推薦操作)
OBJECTS WITH ERRORS
-------------------
ERRORS DURING RECOMPILATION
---------------------------
注意: 這個編譯過程可能因為你資料庫裡面的對象問題,有一些錯誤,你需要在plsql下
執行: select * from UTL_RECOMP_ERRORS 檢查無效的對象。有些是可以忽略的
4 開啟OEM/isqlplus/監聽
$ lsnrctl start
$ isqlplusctl start
$ emctl start dbconsole