如何將 12c 資料庫降級為以前的版本 (文件 ID 1602889.1)

mosdoc發表於2016-11-09

適用於:

Oracle Database - Standard Edition - 版本 12.1.0.1 和更高版本
Oracle Database - Enterprise Edition - 版本 12.1.0.1 和更高版本
本文件所含資訊適用於所有平臺

目標

目的

本文件旨在提供指南和核對清單,用於將之前升級的資料庫從 Oracle 12c 降級回以前的版本:11.2.0.3, 11.2.0.2, 11.1.0.7

必須加以說明的是,將資料庫例項從當前版本降級到升級前的版本時,資料庫不會返回到升級前的完全相同狀態。根據所涉及的版本,升級過程會進行不可逆的更改。使用者使用降級過程可以開啟和訪問以前版本的資料庫例項。這通常便已足夠。

可能需要採取其他更正操作(例如解除安裝/重新安裝或重新升級到當前補丁集級別來解決降級後的遺留問題。如果目標是讓例項返回與升級前完全相同的狀態,則還應使用包括完全恢復到升級前狀態在內的其他過程。

本文中討論的過程是基於指令碼的降級。本文不介紹使用匯出/匯入、資料泵或其他方法將資料從一個版本移動到另一個版本。

您所降級到的版本的 Oracle 二進位制檔案,在開始降級過程之前應該在伺服器上可用/已安裝。如果您解除安裝了要降級到的 Oracle 可執行檔案,請重新安裝 Oracle 二進位制檔案到正確的版本/補丁程式級別以降級。

此過程旨在降級已成功升級到 12c 的資料庫,並非用於從失敗的升級退回。您只能降級到升級前所用的版本和補丁程式級別。

直接升級可以在版本 10.2.0.5、11.1.0.7 或版本 11.2.0.2 及更高版本上執行。可以對這些版本中除 10.2.0.5 之外的版本進行降級。

例如,如果透過應用中間補丁程式 11.1.0.7 從 Oracle 11.1.0.6 升級到 Oracle 12c (12.1.0),則不能降級到 Oracle 11.1.0.6。降級只能對直接升級版本執行。

例外:

雖然可以對 10.2.0.5 直接升級,但降級不適用於 10.2.0.5。

這是因為在升級過程中,compatible 引數已設定為最低 11.0.0。這使得無法降級到 10.2.0.5。可以降級的版本為 11.1.0.7、11.2.0.2、11.2.0.3 或更高版本。

如果有任何補丁程式應用到了從升級後的主目錄執行的源資料庫,則需要先回退,然後才能開始降級過程。
解除安裝和回退補丁程式的步驟記錄在所涉及補丁程式的自述檔案中。
未能解除安裝和回退補丁程式可能會導致無法降級,包括無法重新驗證字典物件。

Exadata 捆綁補丁程式示例,其過程為:

解除安裝補丁程式

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

回退任何在補丁程式應用過程中應用的 SQL:     

                 示例: SQL> @rdbms/admin/catbundle_EXA_<資料庫 SID>_ROLLBACK.sql,用於回退 SQL 更改。

 

解決方案

降級前步驟

  • - XML DB 元件在 12c 中是必需的。
    在升級到 12c 期間,將安裝 XML DB 元件(如果未安裝)。
    從 12c 降級將刪除安裝的 XDB 元件
  • - Enterprise Manager 不支援降級。在降級之前,請重新配置 Oracle EM 控制元件。請參閱

    Oracle Database Upgrade Guide 12c Release 1 (12.1) E17642-10
    6 Downgrading Oracle Database to an Earlier Release
    6.6.5 Restoring Oracle Enterprise Manager after Downgrading Oracle Database

    - 升級到 12c 期間,將刪除 Database Control 資料檔案庫。降級之後,請重新配置 DB Control。   
              
    Note 870877.1 How To Save Oracle Enterprise Manager Database Control Data Before Upgrading The Single Instance Database To Other Release ?           
    Note 876353.1 How To Restore The Oracle Enterprise Manager Data To Downgrade The Single Instance Database To Previous/Source Release ?
     
  • - compatible 引數不能已經更改到 12.1.0。
  • - 禁用 Data Vault(如果已啟用)。

    Note 803948.1  How To Uninstall Or Reinstall Database Vault in 11g (UNIX)
    Note 453902.1 Enabling and Disabling Oracle Database Vault in WINDOWS
     
  • - 如果資料庫使用 Oracle Label Security,則在新 Oracle Database 12c Oracle 主目錄中執行 Oracle Label Security (OLS) 預處理降級 olspredowngrade.sql 指令碼(在 $ORACLE_HOME/rdbms/admin 上提供)。注意!此步驟僅在需要降級到12c之前的版本時才需要
  • - 時區版本應相同。
  • - 取消設定並指向 12c 主目錄的 ORA_TZFILE(如果已設定)。
  • - 如果資料庫上有 Oracle Application Express,則必須將 apxrelod.sql 檔案從 Oracle Database 12c $ORACLE_HOME/apex/ 目錄複製到 Oracle 主目錄之外的目錄,例如系統上的臨時目錄以稍後執行。
  • - 如果基於固定物件建立了物件,則刪除這些物件以避免可能的 ORA-00600 錯誤。您可以在降級之後重新建立這些物件。
  • - 如果降級叢集資料庫,則徹底關閉例項並將 CLUSTER_DATABASE 初始化引數更改為 FALSE。降級之後,必須將此引數設定回 TRUE。

滿足以上先決條件之後,可以繼續進行降級。

資料庫的降級步驟

1) 確保所有資料庫元件有效。只能從成功升級的資料庫執行降級。要驗證資料庫元件狀態,請執行以下查詢

以 SYS 使用者身份連線到資料庫

col comp_id format a10

col comp_name format a30

col version format a10

col status format a8

select substr(comp_id,1,15) comp_id,substr(comp_name,1,30) comp_name,substr(version,1,10) version,status from dba_registry

2) 驗證沒有屬於 sys/system 的無效物件

select owner, count(object_name) "Invalid object count" from dba_objects where status!='VALID' and owner in ('SYS','SYSTEM') group by owner;

如果計數為零,則可以繼續降級。

如果有無效物件,則執行 utlrp.sql 多次,如果物件無法解析為有效狀態,則不能繼續降級。建立 SR 或在 DBA 社群上發帖以尋求幫助。

或者,對於 1 和 2,執行以下指令碼:

Note 556610.1  Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)

3) 關閉資料庫

Shutdown immediate

4)  對 12c 資料庫做備份

5)  以降級模式啟動資料庫

Startup downgrade;

6)  執行降級指令碼

Sql> Spool downgrade.log

Sql> @$ORACLE_HOME/rdbms/admin/catdwgrd.sql

注:
$ORACLE_HOME 應指向 12c 主目錄

catdwgrd.sql 指令碼將資料庫中的所有元件降級到支援的主版本或補丁集版本(您最初升級時的版本)

Sql> spool off

Sql> shutdown immediate

Exit SQL Plus

Sql> exit;

7) 如果作業系統為 LINUX/UNIX:

將以下環境變數更改為要降級到的源資料庫:

ORACLE_HOME

PATH

編輯 /etc/oratab or /var/opt/oracle/oratab 以更改

將資料庫對映到源資料庫 Oracle 主目錄

如果作業系統是 Windows,則完成以下步驟:

a. 停止所有 Oracle 服務,包括 Oracle Database 12c 資料庫的 OracleServiceSID Oracle 服務,其中 SID 是例項名稱。

例如,如果 SID 為 ORCL,則在命令列提示符中輸入以下內容:

C:\> NET STOP OracleServiceORCL

b. 在命令提示符下,透過執行 ORADIM 命令刪除 Oracle 服務。如果出現提示,則輸入此 Windows 系統上活動標準使用者帳戶的口令。

例如,如果 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

8) 還原配置檔案

將配置檔案(口令檔案、引數檔案等)還原到降級版本的 ORACLE_HOME。

9) 如果這是 Oracle RAC 資料庫,則執行以下命令以將資料庫修改為單例項模式:

SET CLUSTER_DATABASE=FALSE

10) 從降級版本 $ORACLE_HOME/rdbms/admin 目錄執行 catrelod 指令碼。

啟動 sqlplus,以具有 sysdba 許可權的使用者 SYS 身份連線到資料庫例項,然後以升級模式啟動資料庫:

: cd $ORACLE_HOME/rdbms/admin

: sqlplus

sql> connect sys as sysdba

sql> startup upgrade

sql> spool catrelod.log

sql> @?/rdbms/admin/catrelod.sql

sql> spool off

catrelod.sql 指令碼在降級的資料庫中重新載入各個資料庫元件的合適版本。

11) 執行 utlrp.sql 指令碼:

SQL> @utlrp.sql

Sql> exit;

utlrp.sql 指令碼重新編譯先前處於 INVALID 狀態的所有現有 PL/SQL 模組,例如 package、procedure、type 等。

12) 檢查已降級資料庫的狀態:

Note 556610.1  Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) 

此 sql 指令碼是一組查詢語句,用於提供使用者友好的輸出,以在升級前後診斷資料庫的狀態。指令碼將建立名為 db_upg_diag_<sid>_<時間戳>.log 的檔案。

13) 降級之後,可能在 sys 使用者下發現無效的 QT 檢視。這是因為檢視已從基表中選擇了錯誤的列。您需要重新建立這些檢視。

請參閱說明:

Note 1520209.1 QT_*BUFER Views Invalid after downgrade from 12C 

降級後步驟:

1)如果您是降級到 Oracle Database 11g 版本 1 (11.1.0.7) 並且資料庫中有 Oracle Application Express,則轉到您將 apxrelod.sql 指令碼複製到的目錄(在降級前步驟中)。
執行 apxrelod.sql 指令碼以手動重新載入 Oracle Application Express:

SQL> @apxrelod.sql 

執行 apxrelod.sql 指令碼以避免程式包 APEX_030200.WWV_FLOW_HELP 由於以下錯誤而成為 INVALID 狀態:

PLS-00201: identifier 'CTX_DDL' must be declared 

2) 如果資料庫中啟用了 Oracle Label Security,則執行以下指令碼

  a. 從 Oracle Database 12c 的 Oracle 主目錄下將 olstrig.sql 指令碼複製到要將資料庫降級到的版本的 Oracle 主目錄。

  b. 從降級到的版本的 Oracle 主目錄,執行 olstrig.sql 以在表上使用 Oracle Label Security 策略重新建立 DML 觸發器:

SQL> @olstrig.sql 

3) 如果降級叢集資料庫,則必須執行以下命令以降級 Oracle Clusterware database 配置:

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

其中 db-unique-name 是資料庫名稱(而非例項名稱),oraclehome 是已降級資料庫的舊 Oracle 主目錄的位置,to_version 是資料庫所降級到的資料庫版本

因為程式碼的改變,現在-to_version對應的值如下:

RDBMS Version -to_version Value
9.2.0.*              9.2.0.0.0
10.1.0.*            10.0.0.0.0
10.2.0.*            10.2.0.0.0
11.1.0.*            11.0.0.0.0
11.2.0.1            11.2.0.1.0
11.2.0.2            11.2.0.2.0
11.2.0.3            11.2.0.3.0
11.2.0.4            11.2.0.4.0

4) 如果發現失效的SYS/SYETEM的物件,那麼可以使用下面的方法來編譯這些失效物件
$ sqlplus "/ as sysdba"
SQL> startup upgrade
SQL> spool catout.log
SQL> @?/rdbms/admin/catproc.sql
SQL> @?/rdbms/admin/utlrp.sql
SQL> spool off
SQL> shutdown immediate

參考

NOTE:1351112.1 - Information Center: Upgrading and Migration Oracle Database
NOTE:1520299.1 - Master Note For Oracle Database 12c Release 1 (12.1) Database/Client Installation/Upgrade/Migration Standalone Environment (Non-RAC)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31393455/viewspace-2128106/,如需轉載,請註明出處,否則將追究法律責任。

相關文章