如何從數據庫 11.2 降級至以前的版本

如何從數據庫 11.2 降級至以前的版本

 

本文檔可用做將以前升級的數據庫從 Oracle 11gR2 降回至下列之前版本數據庫的指南與覈對表:Oracle 10gR一、Oracle 10gR二、Oracle 11gR1。該文檔內容也適用於從 11.2.0.4 降級至 11.2.0.1css

須要特別注意的是,在將數據庫實例從當前版本降級至升級前版本時,數據庫不會返回至與其升級前相同的狀態。升級過程會致使一些不可逆的更改,具體取決於涉及的版本。降級過程容許用戶在以前版本中打開並訪問數據庫實例。這一般就足夠了。

此外,在降級後可能須要採起一些更正操做(如卸載/從新安裝,或從新升級至當前修補程序集級別),以解決殘留問題。

若是目標是將實例徹底返回至其升級前的狀態,那麼將會用到包括剛好恢復至升級前狀態在內的其餘流程。sql

 

本文章中討論的過程是基於腳本的降級。本文章並未討論如何使用導入/導出、數據泵或其餘方法將數據從一個版本移至另外一個版本。數據庫

開始降級過程以前,在服務器上應該有或已安裝要降至版本的 Oracle 二進制文件。若是已卸載了但願降至版本的 Oracle 可執行文件,請將該 Oracle 二進制文件從新安裝至正確的版本/修補程序級別,以便進行降級。服務器

注意事項:oracle

  1. 該過程用於降級已成功升級至 11gR2 的數據庫。此過程不能用於返回升級失敗的數據庫。
  2. 您只能降級至從其進行升級的版本和修補程序級別。例如,若是是從 Oracle 10gR1 (10.1.0.5) 升級至 Oracle 11gR2 (11.2),則不能降級至 Oracle 10gR2 (10.2)。您只能降級至 Oracle 10gR1 (10.1.0.5)
  3. 支持降級至 9iR2。這是由於在升級過程當中,兼容參數設置爲最低 10.1.0。這能夠防止降級。
  4. 若是原數據庫打過patch, 您須要在降級以前把patch進行回滾。 卸載和回滾patch的步驟,您能夠在patch的readme中找到。卸載和回滾patch失敗會致使降級過程的失敗及數據字典對象沒法生效。

示例:  對於 Exadata Bundle Patch,過程爲:app

卸載 patchide

                 示例:   $ opatch auto /u01/app/oracle/patches/14103267 -rollbackpost

回滾SQL的變動     ui

                 示例:   SQL> @rdbms/admin/catbundle_EXA__ROLLBACK.sql  rollback SQL 變動.操作系統

 

解決方案

降級前步驟:

1: 驗證全部組件和字典對象對於 11gR2 均有效而且版本正確。

set pagesize500 
set linesize 100 
        
select substr(comp_name,1,40) comp_name, status, substr (version,1,10) version from dba_registry order by comp_name; 
        
select substr(object_name,1,40) object_name,substr(owner,1,15) owner, object_type from  dba_objects where status='INVALID' order by owner,object_type; 
        
select owner,object_type,count(*) from dba_objects where status='INVALID'  group by owner,object_type order by owner,object_type;

若是任何組件或 Oracle 提供的對象無效,則須要運行 utlrp.sql 對其進行從新驗證。該腳本可能須要運行屢次以驗證全部對象。

$ cd $ORACLE_HOME/rdbms/admin 
$ sqlplus "/ as sysdba" 
SQL> @utlrp.sql

當完成後,從新運行上述查詢以驗證全部無效對象如今都是有效的。

2: 若是已在數據庫上啓用了 Oracle Database Vault,則必須:

a: 授予 SYS 賬戶 Database Vault DV_PATCH_ADMIN 角色。
b: 降級數據庫以前禁用 Database Vault。

禁用 Oracle Database Vault 觸發器:
      SQL> CONNECT DVSYS/DVSYS  
      SQL> ALTER TRIGGER DV_BEFORE_DDL_TRG DISABLE;  
      SQL> ALTER TRIGGER DV_AFTER_DDL_TRG DISABLE; 

3: 若是設置了操做系統參數 ORA_TZFILE,請取消其設置。若是不取消設置 ORA_TZFILE 變量,鏈接至數據庫時可能會生成如下錯誤:

SP2-1503: Unable to initialize Oracle call interface 
SP2-0152: ORACLE may not be functioning properly

4: 若是在降級至以前的數據庫版本以前,已運行 DBMS_DST 軟件包將時區版本升級至新版本(例如在 11gR2 升級的升級後步驟期間升級至版本 11),那麼必須將版本 11 時區文件安裝到舊的 Oracle 數據庫版本上的 $ORACLE_HOME/oracore/zoneinfo 目錄中。

5: 檢查數據庫的兼容性級別,以肯定數據庫是否可能具備防止降級的不兼容性。曾經設置過的 compatible 的最高值就是您能降級到的最低的那個版本。好比:

若是數據庫的兼容性級別已是最新的了(好比11.2.0.4),則沒法進行降級。

若是數據庫的兼容性級別曾經是 11.2.0 或更高,則沒法將數據庫降級到比 11.2.0.1 更低的版本 。
若是要將數據庫降級至 11gR1,COMPATIBLE 初始化參數必須從未比 11.1.0 更高。
若是要將數據庫降級至 10gR2,COMPATIBLE 初始化參數必須從未比 10.2.0 更高。
若是要將數據庫降級至 10gR1,COMPATIBLE 初始化參數必須從未比 10.1.0 更高。

6: 若是數據庫上安裝有 Oracle Application Express,則必須將 apxrelod.sql 文件從 Oracle 11gR2 (11.2) ORACLE_HOME/apex/ 目錄複製到 Oracle 主目錄以外的某個目錄,如系統上的臨時目錄。記下該文件的新位置。

7: 在降級以前執行 11gR2 數據庫的備份。

數據庫的降級步驟

若是要從 11.2.0.4 降級至 11.2.0.2,使用 11.2.0.2 catrelod.sql 腳本會出現一個問題。
針對版本 11.2.0.2 下載並應用修補程序 11811073,其提供了更新版本的 catrelod.sql。

1: 以 Oracle Database 11g Release 2 (11.2) Oracle 主目錄的全部者登陸系統。

2: 若是已針對數據庫配置並運行了 Enterprise Manager Database Control,則按以下所示中止Database Control:

a: 將 ORACLE_UNQNAME 環境變量設置爲數據庫惟一名稱。
b: 運行如下命令:RACLE_HOME/bin/emctl stop dbconsole

3: 若是要降級的數據庫是 Oracle Real Application Clusters (Oracle RAC) 數據庫,則在全部實例上執行該步驟。

a:  .若是要將 Oracle RAC 數據庫降級至 10g Release 1 (10.1),必須在移除額外的表決磁盤以後才能夠關閉 Oracle Clusterware 堆棧。
若是要查看所用表決磁盤的數量並列出錶盤路徑,請運行如下命令:Oracle_Clusterware_Home/bin/crsctl query css votedisk 

b:  經過運行如下命令移除找到的每個額外表決磁盤,其中路徑是在以前步驟中發現的表決磁盤路徑:

Oracle_Clusterware_Home/bin/crsctl delete css votedisk path

注意:若是要降級羣集數據庫,需徹底關閉實例並將 CLUSTER_DATABASE 初始化參數設置爲 false。降級後,必須將該參數設置回 true。

SET CLUSTER_DATABASE=FALSE

注意升級後的步驟38

4: 在系統提示符下,轉至 ORACLE_HOME/rdbms/admin 目錄。

5: 啓動 SQL*Plus 並以具備 SYSDBA 權限的用戶身份鏈接至數據庫實例。

6: 若是該實例當前正在運行,則將其關閉。
     SQL> SHUTDOWN IMMEDIATE 

7: 在 DOWNGRADE 模式下啓動該實例。
     SQL> STARTUP DOWNGRADE 
若是須要,請指定初始化參數文件的位置。

8a: 若是升級前在數據庫中配置了 Enterprise Manager 並備份了 Enterprise Manager Database Control Data,則:

Drop the SYSMAN schema:  
DROP USER sysman CASCADE; 

注意:此步驟以後,MGMT* 同義詞可能會無效。請按照「11.2 Upgrade Guide」中「Post-downgrade」部分描述的「Restoring Oracle Enterprise Manager」步驟(6 章第 9 頁,Downgrading Oracle Database to an Earlier Release),恢復備份並驗證同義詞。

8b: 若是升級前在數據庫中配置了 Enterprise Manager 但未備份 Enterprise Manager Database Control Data,則:

刪除 Enterprise Manager 用戶:
@?/sysman/admin/emdrep/sql/core/latest/admin/admin_drop_users.sql SYSMAN

刪除信息庫用戶:
DEFINE EM_REPOS_USER=SYSMAN @?/sysman/admin/emdrep/sql/core/latest/admin/admin_drop_repos_user.sql SYSMAN 

刪除角色和同義詞:
DEFINE EM_REPOS_USER=SYSMAN @?/sysman/admin/emdrep/sql/core/latest/admin/admin_drop_synonyms.sql 

Drop the SYSMAN schema:  
DROP USER sysman CASCADE; 

注意:此步驟以後,Enterprise Manager 組件將從數據庫實例中移除。Enterprise Manager 組件能夠在降級後從新建立。有關更多信息,請參考

9:  設置系統以將結果記錄到日誌文件,以備稍後的成功驗證: 
     SQL> SPOOL downgrade.log 

10: 運行 catdwgrd.sql:
     SQL> @catdwgrd.sql

如下是運行該腳本的注意事項:
該腳本會將數據庫中的全部 Oracle Database 組件降級至最初從其升級上來的主版本或 Oracle Database 11g 修補程序版。

若是在運行該腳本時或在其他步驟中的任何腳本中遇到任何問題,需找到問題緣由並更正,而後從新運行該腳本。您能夠根據須要屢次從新運行本章中描述的任何腳本。

若是某個組件的降級失敗,將會顯示 ORA-39709 錯誤,SQL*Plus 會話終止,Oracle Database 數據字典不降級。在降級 Oracle Database 數據字典以前,全部組件必須成功降級。必需要在從新運行 catdwgrd.sql 腳本以前識別並修正問題。

11: 關閉將腳本結果記錄到日誌文件:
     SQL> SPOOL OFF 

查看日誌文件並驗證在降級過程當中無錯誤生成。在步驟 9 中命名日誌文件,建議名稱爲 downgrade.log。更正在此文件中發現的全部問題並根據須要從新運行降級腳本。

12: 關閉實例:
     SQL> SHUTDOWN IMMEDIATE 

13:  退出 SQL*Plus. 

14: 配置環境指向針對老版本的 ORACLE_HOME。若是操做系統是 Linux 或 UNIX,請更改下列環境變量以指向要降級到的版本所在目錄:
ORACLE_HOME 
LD_LIBRARY_PATH
LIBPATH 
PATH 
還須要檢查 oratab 文件和全部設置了 ORACLE_HOME 值的客戶端腳本是否已指向降級的 Oracle 主目錄。

15: 若是操做系統是 Windows,請完成如下步驟:

a: 中止全部 Oracle 服務,包括 Oracle Database 11gR2 (11.2) 數據庫的 OracleServiceSID Oracle 服務,其中 SID 是實例名稱。
例如,若是 SID 是 ORCL,則在命令提示符下輸入如下內容:
C:\> NET STOP OracleServiceORCL 

b: 經過執行 ORADIM 命令在命令提示符下刪除 Oracle 服務。例如,若是 SID 是 ORCL,則輸入如下命令:
C:\> ORADIM -DELETE -SID ORCL

c. 使用 ORADIM 命令建立要在命令提示符降低級的數據庫的 Oracle服務。
C:\> ORADIM -NEW -SID SID -INTPWD PASSWORD -MAXUSERS USERS -STARTMODE AUTO -PFILE ORACLE_HOME\DATABASE\INITSID.ORA



16: 恢復降級所至版本的配置文件(例如,參數文件、口令文件等)。

17: 在系統提示符下,轉至以前版本的 ORACLE_HOME/rdbms/admin 目錄。

18: 啓動 SQL*Plus. 

19: 以具備 SYSDBA 權限的用戶身份鏈接至數據庫實例。

20: 啓動實例:
     SQL> STARTUP UPGRADE 

21: 設置系統以將結果記錄到日誌文件,以備稍後的成功驗證:
     SQL> SPOOL reload.log 

22: 運行 catrelod.sql:
     SQL> @catrelod.sql 

catrelod.sql 腳本從新加載降級數據庫中全部數據庫組件的相應版本。

23: 若是要降級至 Oracle Database 11g Release 1 (11.1.0.6),請運行 xsrelod.sql 腳本:
     SQL> @xsrelod.sql

運行 xsrelod.sql 腳本以免如下錯誤:
PLS-00306: wrong number or types of arguments in call to 'INVALIDATE_DSD_CACHE' DBMS_XS_DATA_SECURITY_EVENTS PL/SQL: Statement ignored

24: 若是要降級至 Oracle Database 10g Release 1 (10.1.0.5) 而且數據庫中安裝有 XDB,請在運行 catrelod.sql 以後運行如下腳本:
     SQL> @dbmsxdbt.sql

25: 若是這是一個 Oracle RAC 數據庫,請執行如下命令以將數據庫返回 RAC 模式:

     SQL> SET CLUSTER_DATABASE=TRUE

26: 關閉將腳本結果記錄到日誌文件:
     SQL> SPOOL OFF

27: 檢查日誌文件並驗證軟件包和過程編譯成功。

28: 關閉並從新啓動實例以進行正常運行:
     SQL> SHUTDOWN IMMEDIATE 
     SQL> STARTUP 

29: 若是該數據庫針對 Oracle Label Security 進行了配置並打算降級至 Oracle Database 10g Release 1 (10.1),請執行此步驟。

a. 將 olstrig.sql 腳本從 Oracle Database 11g Release 2 (11.2) Oracle 主目錄複製到將要降至數據庫版本的 Oracle 主目錄。

b. 運行 olstrig.sql 經過 Oracle Label Security 策略在表上從新建立 DML 觸發器。
     SQL> @olstrig.sql 
請參閱《Oracle Label Security Administrator's Guide》瞭解更多信息。

30: 運行 utlrp.sql 腳本:
     SQL> @utlrp.sql

utlrp.sql 腳本將從新編譯全部以前處於 INVALID 狀態的現有 PL/SQL 模塊,如軟件包、過程、類型等。

31: 一些已安裝的組件可能會顯示實例升級前顯示的較早版本。若是要降級至已安裝了修補程序集的版本,請查看並比較修補程序集 readme.txt 文件與當前組件版本。若是降級組件的版本更早,則:

在升級模式下從新啓動實例。
運行 catupgrd.sql 腳本 
按照修補程序集 Readme 文件從新檢查組件版本。

32: 退出 SQL*Plus。
     數據庫現已降級。

降級後步驟

33: 恢復 Oracle Enterprise Manager 備份。
若是在升級前備份了 Oracle Enterprise Manager 數據,則可將其進行恢復。

若是未進行備份,可根據須要從新建立 Oracle Enterprise Manager。

34: 啓用 Database Vault。
降級後啓用 Data Vault 的步驟:

以已授予 DV_OWNER 角色的用戶身份鏈接至 SQL*Plus 並執行如下語句:
ALTER TRIGGER DVSYS.DV_BEFORE_DDL_TRG ENABLE; 
ALTER TRIGGER DVSYS.DV_AFTER_DDL_TRG ENABLE;

35: 從新加載 Oracle Application Express 
轉至將 apxrelod.sql 文件複製到的目錄(降級步驟的第 3 步),經過運行 apxrelod.sql 文件手動從新加載 Oracle Application Express。請注意:,數據庫必須以 UPGRADE 模式啓動,以運行 apxrelod.sql 腳本。

36: 若是原 ORACLE_HOME 被卸載, 您須要在原 ORACLE_HOME 中中止監聽,移動或重建監聽在低版本的ORACLE_HOME中,並啓動。這個步驟指望您作到但不是必須的。

37: 若是有patch (包括 PSU, CPU, Exadata Bundle Patches 或者 One-off Patches) 被打在原 ORACLE_HOME 中, 那麼這個patch對應的 post installation 步驟 (SQL) 必須被運行.  請查看每一個patch的readme。

38: 若是降級的是集羣數據庫,那麼必須運行如下命令來降級集羣數據庫配置:

$ srvctl downgrade database -d db-unique-name -o oraclehome -t to_version

db-unique-name 爲數據庫名(不是實例名),oraclehome 是被降級數據庫的原 Oracle home,to_version 爲降級至的版本號。

相關文章
相關標籤/搜索