如何從資料庫 11.2 降級至之前的版本
本文件可用作將之前升級的資料庫從 Oracle 11gR2 降回至下列以前版本資料庫的指南與核對表:Oracle 10gR1、Oracle 10gR2、Oracle 11gR1。該文件內容也適用於從 11.2.0.4 降級至 11.2.0.1
此外,在降級後可能需要採取一些更正操作(如解除安裝/重新安裝,或重新升級至當前修補程式集級別),以解決殘留問題。
如果目標是將例項完全返回至其升級前的狀態,那麼將會用到包括恰好恢復至升級前狀態在內的其他流程。
本文章中討論的過程是基於指令碼的降級。本文章並未討論如何使用匯入/匯出、資料泵或其他方法將資料從一個版本移至另一個版本。
開始降級過程之前,在伺服器上應該有或已安裝要降至版本的 Oracle 二進位制檔案。如果已解除安裝了希望降至版本的 Oracle 可執行檔案,請將該 Oracle 二進位制檔案重新安裝至正確的版本/修補程式級別,以便進行降級。
注意事項:- 該過程用於降級已成功升級至 11gR2 的資料庫。此過程不能用於返回升級失敗的資料庫。
- 您只能降級至從其進行升級的版本和修補程式級別。例如,如果是從 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_
解決方案
降級前步驟:
1: 驗證所有元件和字典物件對於 11gR2 均有效並且版本正確。
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 對其進行重新驗證。該指令碼可能需要執行多次以驗證所有物件。
$ 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.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.sqlDrop 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 ORCLc. 使用 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 的步驟:
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: 如果降級的是叢集資料庫,那麼必須執行以下命令來降級叢集資料庫配置:
db-unique-name 為資料庫名(不是例項名),oraclehome 是被降級資料庫的原 Oracle home,to_version 為降級至的版本號。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1312910/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何從資料庫 11.2 降級至之前的版本(包括 11.2.0.3-11.2.0.1) (文件 ID 1525777.1)資料庫
- Android版本升級同時Sqlite資料庫的升級及之前資料的保留AndroidSQLite資料庫
- 如何將 12c 資料庫降級為以前的版本 (文件 ID 1602889.1)資料庫
- 用EXP/IMP從高版本資料庫匯出至低版本資料庫匯入實驗資料庫
- 資料庫的升級和降級[轉載wisdomone1 ]資料庫
- android資料庫如何進行版本升級?架構之資料庫框架升級Android資料庫架構框架
- 升級失敗後,資料庫降級方案(flashback database)資料庫Database
- sqoop從hdfs導資料至oracle資料庫OOPOracle資料庫
- SMSSDK從2.x版本升級至3.x版本指導
- Node 快速切換版本、版本回退(降級)、版本更新(升級)
- 11.2資料庫監聽的改變資料庫
- 【資料庫】mysql5.6升級至5.7(物理方式)資料庫MySql
- 如何從Widows上載資料至Linux?Linux
- 三步10分鐘搞定資料庫版本的降遷 (將後臺資料庫SQL2008R2降為SQL2005版本)資料庫SQL
- 內網gitlab11.2升級至11.4.5內網Gitlab
- AndroidSqlite資料庫版本升級管理初探AndroidSQLite資料庫
- 升級到資料庫到10.2.0.5.0版本資料庫
- 資料庫 升級/降級 相容性矩陣 (文件 ID 1577660.1)資料庫矩陣
- ThinkPHP升級至 5.1.18 版本PHP
- 怎樣遷移一個已存在的 12c 之前版本的資料庫(非 CDB)到 12c CDB 的資料庫資料庫
- SQL Server資料庫從高版本遷移到低版本的解決方案SQLServer資料庫
- 2 Day DBA-管理方案物件-管理Oracle資料庫軟體-升級資料庫-DBUA支援的資料庫版本物件Oracle資料庫
- 2.2 資料庫建立之前需考慮的事資料庫
- 資料庫轉換工具,不同資料庫之前任意轉換資料庫
- iOS CoreData (二) 版本升級和資料庫遷移iOS資料庫
- 資料庫版本升級(upgrade 9.2.0.1 to11.2.0.3)資料庫
- 檢視資料庫的版本資料庫
- T 級資料量遷移!知名雲巨頭如何從 Jira 切換至 ONES?
- 域控制器降級失敗後如何刪除 Active Directory 中的資料
- iOS12降級至iOS11.4出現正在嘗試恢復資料怎麼辦?iOS
- indexedDB 資料庫版本Index資料庫
- 資料庫版本號資料庫
- iOS12公測版降級至iOS11教程 iOS12公測版怎麼降級iOS
- rman通過之前的incarnation恢復資料庫!資料庫
- 使用檔案複製的方式進行資料庫版本升級資料庫
- 如何還原一個12c版本之前的資料庫備份到一個不同OS平臺,不同位元組碼順序的12c資料庫資料庫
- 將資料庫中資料匯入至solr索引庫資料庫Solr索引
- ORACLE 11.2 RAC修改資料庫靜態引數Oracle資料庫