Oracle資料庫如何從11.2 降級至之前的版本
本文檔可用作將之前升級的資料庫從 Oracle 11gR2 降回至下列以前版本資料庫的指南與核對錶:Oracle 10gR1、Oracle 10gR2、Oracle 11gR1。該文檔內容也適用於從 11.2.0.4 降級至 11.2.0.1
需要特別注意的是,在將資料庫執行個體從目前的版本降級至升級前版本時,資料庫不會返回至與其升級前相同的狀態。升級過程會導致一些無法復原的更改,具體取決於涉及的版本。降級過程允許使用者在之前版本中開啟並訪問資料庫執行個體。這通常就足夠了。
此外,在降級後可能需要採取一些更正操作(如卸載/重新安裝,或重新升級至當前Hotfix集層級),以解決殘留問題。
如果目標是將執行個體完全返回至其升級前的狀態,那麼將會用到包括恰好恢複至升級前狀態在內的其他流程。
本文章中討論的過程是基於指令碼的降級。本文章並未討論如何使用匯入/匯出、資料泵或其他方法將資料從一個版本移至另一個版本。
開始降級過程之前,在伺服器上應該有或已安裝要降至版本的 Oracle 二進位檔案。如果已卸載了希望降至版本的 Oracle 可執行檔,請將該 Oracle 二進位檔案重新安裝至正確的版本/Hotfix層級,以便進行降級。
在CentOS 6.4下安裝Oracle 11gR2(x64)
Oracle 11gR2 在VMWare虛擬機器中安裝步驟
Debian 下 安裝 Oracle 11g XE R2
注意事項:
- 該過程用於降級已成功升級至 11gR2 的資料庫。此過程不能用於返回升級失敗的資料庫。
- 您只能降級至從其進行升級的版本和Hotfix層級。例如,如果是從 Oracle 10gR1 (10.1.0.5) 升級至 Oracle 11gR2 (11.2),則不能降級至 Oracle 10gR2 (10.2)。您只能降級至 Oracle 10gR1 (10.1.0.5)
- 支援降級至 9iR2。這是因為在升級過程中,相容參數設定為最低 10.1.0。這可以防止降級。
- 如果原資料庫打過patch, 您需要在降級之前把patch進行復原。 卸載和復原patch的步驟,您可以在patch的readme中找到。卸載和復原patch失敗會導致降級過程的失敗及資料字典對象無法生效。
樣本: 對於 Exadata Bundle Patch,過程為:
卸載 patch
樣本: $ opatch auto /u01/app/oracle/patches/14103267 -rollback
復原SQL的變更
樣本: SQL> @rdbms/admin/catbundle_EXA_<database SID>_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 下載並應用Hotfix 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 Hotfix版。
如果在運行該指令碼時或在其餘步驟中的任何指令碼中遇到任何問題,需找到問題原因並更正,然後重新運行該指令碼。您可以根據需要多次重新運行本章中描述的任何指令碼。
如果某個組件的降級失敗,將會顯示 ORA-39709 錯誤,SQL*Plus 會話終止,Oracle Database 資料字典不降級。在降級 Oracle Database 資料字典之前,所有組件必須成功降級。必須要在重新運行 catdwgrd.sql 指令碼之前識別並修正問題。
更多詳情見請繼續閱讀下一頁的精彩內容: