oracle 9i升級到oracle9208

wallimn發表於2011-08-31
轉自:http://www.mmug.cn/forum/index.cfm?sPart=G&sForumId=009&iItemId=1327
背景:在windows2003server上安裝了Oracle9.2.0.1.0,現打算將其升級到9.2.0.8版本,並打上最新的安全補丁April2008版。
1.升級oracle(administrator使用者許可權)
(1)到metalink下載升級壓縮包,patch號為4547809,壓縮包名稱為 p4547809_92080_WINNT.zip,for windows 32bit。
(2)解壓縮zip,下邊包含一個Disk1和readme.html檔案。安裝升級補丁之前,在管理中停掉所有的oracle相關服務,在命令提示符中lsnrctl stop,停掉監聽器。
(3)在雙擊Disk下的setup.exe前,確保環境變數中有ORACLE_HOME變數,並已正確設定。否則會出現錯誤(錯誤忘了)。
(4)雙擊setup.exe,自動升級到9.2.0.8,命令提示符提示安裝完成後,說明元件已經安裝上。
(5)4步並沒有update元件,所以還需要update.此時需要開啟Oracle的服務,最好是重起電腦,Oracle預設服務會自啟動。
(6)以sysdba身份登入資料庫後,SQL>startup 安裝oracle有有jvm和xdb的使用者確保init.ora中的引數SHARED_POOL_SIZE 和JAVA_POOL_SIZE 為150m。方法是檢視現有兩個引數大小
SQL>SHOW PARAMETER SHARED_POOL_SIZE
SQL>SHOW PARAMETER JAVA_POOL_SIZE
如果大小不是150m,進行設定:
SQL> ALTER SYSTEM SET SHARED_POOL_SIZE='150M' SCOPE=spfile;
SQL> ALTER SYSTEM SET JAVA_POOL_SIZE='150M' SCOPE=spfile;
設定成功後shutdown immediate關閉資料庫。
(7)以sysdba登入資料庫
執行 SQL> STARTUP MIGRATE
SQL> SPOOL patch.log
SQL> @ORACLE_BASE\ORACLE_HOME\rdbms\admin\catpatch.sql
SQL> SPOOL OFF
spool patch.log是把做升級日誌到patch.log,供以後察看。
其中ORACLE_BASE\ORACLE_HOME表示你的oracle目錄,假設oracle安裝目錄為c:\oracle\ora92,則第三句應為:
SQL>@c:\oracle\ora92\rrdbms\admin\catpatch.sql 其中@表示執行以下指令碼。
這個過程持續大概20分鐘。
(8)完成後shutdown資料庫,然後startup,執行另外一個指令碼
SQL> @ORACLE_BASE\ORACLE_HOME\rdbms\admin\utlrp.sql,完成後升級補丁打完!!
(8)重起資料庫,登陸後select * from v$version;可以看到oracle升到了9208。
2.oracle打安全補丁
(1)補丁資訊:Critical Patch Update Note Release 9.2.0.8 for Microsoft Windows (32-Bit),patch號為6867138。
(2)CPU是過渡性補丁,需要用Oracle的安裝工具opatch安裝。
安裝CPU之前,檢視相應的opatch版本應為1.0.0.0.57,9.2.0.1版oracle自帶版本為55的,到metalink下載57版本的,壓縮包名為p2617419_10102_GENERIC。解壓縮後將OPATCH目錄覆蓋%oracle_home%\opatch就行了。
(3)在用OPATCH安裝安全補丁之前,停掉所有的oracle服務,但是實踐中發現,程式中仍會有相關的dll被未知(我未知)的程式佔用,導致couldn't copy一些.dll檔案。因此建議重啟伺服器,進入安全模式進行。
(4)在安全模式下,在命令提示符中直接Opatch apply %補丁所在位置%,比如在我的電腦中補丁在 D:\software\oracle9\p6867138_92080_WINNT\6867138中,則我在命令提示符中輸入 Opatch apply D:\software\oracle9\p6867138_92080_WINNT\6867138,自動安裝安全補丁。
(5)安裝完成後,補丁還不算打成功,都快哭了~~~~。咬牙,接著來
跑remove_demo.js指令碼來移除不穩定的Oracle HTTP Server demos.命令提示符中cd到6867138目錄。
>cscript. //nologo remove_demo.js
(6)把修改過的 .sql檔案匯入資料庫:
啟動oracle服務,cd %ORACLE_HOME%\cpu\CPUApr2008 然後以sysdba登入後執行SQL>@catcpu.sql
如果在這個過程中報有invalid的物件,則需要執行(7),否則直接執行(8).
(7)cd %ORACLE_HOME%\rdbms\admin後以sysdba登入,執行@utlrp.sql,之後你可以用
SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS= 'INVALID';檢查,可以看到已沒有invalid物件。
(8)重新編譯資料庫中的檢視
cd %ORACLE_HOME%\cpu\view_recompile然後sysdba登入,執行SQL> @recompile_precheck_jan2008cpu.sql 這個是計算下需要執行的時間等。
shutdown資料庫,以migrate方式startup,SQL>startup migrate 然後SQL> @view_recompile_jan2008cpu.sql 關閉資料庫。如果有invalid物件,手動compile,但是一般沒有。

總結:oracle不同的補丁還有不同的打法,實在是很不智慧,所以之前要仔細的閱讀readme,是個很鬱悶的活!而且安裝完了不是真正的安裝完!!崩潰了吧~~~上邊的操作是新建資料庫之後就直接進行的,因此也沒有考慮到資料庫備份等工作。如果你已經在使用資料庫做了一些工作,建議先備份資料庫,以免補丁沒有打上,影響資料庫的使用。

==============================

在Oracle升級後經常會出現exp出現錯誤,注意採取下面措施前先備份一下。多備份沒有什麼壞處。

如果出現下面錯誤:
EXP-00056: 遇到 ORACLE 錯誤 19206
ORA-19206: 用於查詢或 REF CURSOR 引數的值無效
ORA-06512: 在"SYS.DBMS_XMLGEN", line 83
ORA-06512: 在"SYS.DBMS_METADATA", line 345
ORA-06512: 在"SYS.DBMS_METADATA", line 410
ORA-06512: 在"SYS.DBMS_METADATA", line 449
ORA-06512: 在"SYS.DBMS_METADATA", line 1156
ORA-06512: 在"SYS.DBMS_METADATA", line 1141
ORA-06512: 在line 1
EXP-00000: 匯出終止失敗
解決方法:
SQL> @d:\oracle\ora92\rdbms\admin\catmeta.sql

如果出現下面錯誤:
EXP-00008: 遇到 ORACLE 錯誤 942
ORA-00942: 表或檢視不存在
EXP-00024: 未安裝匯出檢視,請通知您的 DBA
EXP-00000: 匯出終止失敗

出現該錯誤的原因是:由於exp的版本與資料庫的版本不相同,
雖然9.2.0.7的安裝包已經安裝成功,但是資料字典表中的相關信心併為更新,
通過該語句檢視
SQL> select comp_id,version from dba_registry;

解決方法:
以migrate模式啟動
SQL> startup migrate

SQL> @d:\oracle\ora92\rdbms\admin\catpatch.sql

相關文章