如何升級oracle版本
本文檔旨在提供指南和核對清單,用於將之前升級的數據庫從Oracle12c降級回以前的版本: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從Oracle11.1.0.6升級到Oracle12c(12.1.0),則不能降級到Oracle11.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捆綁補丁程序示例,其過程為: 卸載補丁程序 示例:$opatchauto/u01/app/oracle/patches/14103267-rollback 回退任何在補丁程序應用過程中應用的SQL: 示例:SQL>@rdbms/admin/catbundle_EXA__ROLLBACK.sql,用於回退SQL更改。 解決方案 降級前步驟 -XMLDB組件在12c中是必需的。 在升級到12c期間,將安裝XMLDB組件(如果未安裝)。 從12c降級將刪除安裝的XDB組件 -EnterpriseManager不支持降級。在降級之前,請重新配置OracleEM控件。請參閱 OracleDatabaseUpgradeGuide12cRelease1(12.1)E17642-10 6DowngradingOracleDatabasetoanEarlierRelease 6.6.5RestoringOracleEnterpriseManagerafterDowngradingOracleDatabase -升級到12c期間,將刪除DatabaseControl資料檔案庫。降級之後,請重新配置DBControl。 Note870877.1HowToSaveOracleEnterpriseManagerDatabaseControlDataBeforeUpgradingTheSingleInstanceDatabaseToOtherRelease? Note876353.1HowToRestoreTheOracleEnterpriseManagerDataToDowngradeTheSingleInstanceDatabaseToPrevious/SourceRelease? -compatible參數不能已經更改到12.1.0。 -禁用DataVault(如果已啟用)。 Note803948.1HowToUninstallOrReinstallDatabaseVaultin11g(UNIX) Note453902.1EnablingandDisablingOracleDatabaseVaultinWINDOWS -如果數據庫使用OracleLabelSecurity,則在新OracleDatabase12cOracle主目錄中運行OracleLabelSecurity(OLS)預處理降級olspredowngrade.sql腳本(在$ORACLE_HOME/rdbms/admin上提供)。 -時區版本應相同。 -取消設置並指向12c主目錄的ORA_TZFILE(如果已設置)。 -如果數據庫上有OracleApplicationExpress,則必須將apxrelod.sql文件從OracleDatabase12c$ORACLE_HOME/apex/目錄復制到Oracle主目錄之外的目錄,例如系統上的臨時目錄以稍後執行。 -如果基於固定對象創建了對象,則刪除這些對象以避免可能的ORA-00600錯誤。您可以在降級之後重新創建這些對象。 -如果降級集群數據庫,則徹底關閉實例並將CLUSTER_DATABASE初始化參數更改為FALSE。降級之後,必須將此參數設置回TRUE。 滿足以上先決條件之後,可以繼續進行降級。 數據庫的降級步驟 1)確保所有數據庫組件有效。只能從成功升級的數據庫執行降級。要驗證數據庫組件狀態,請執行以下查詢 以SYS用戶身份連接到數據庫 colcomp_idformata10 colcomp_nameformata30 colversionformata10 colstatusformata8 selectsubstr(comp_id,1,15)comp_id,substr(comp_name,1,30)comp_name,substr(version,1,10)version,statusfromdba_registry 2)驗證沒有屬於sys/system的無效對象 selectowner,count(object_name)"Invalidobjectcount"fromdba_objectswherestatus!='VALID'andownerin('SYS','SYSTEM')groupbyowner; 如果計數為零,則可以繼續降級。 如果有無效對象,則執行utlrp.sql多次,如果對象無法解析為有效狀態,則不能繼續降級。建立SR或在DBA社區上發帖以尋求幫助。 或者,對於1和2,運行以下腳本: Note556610.1ScripttoCollectDBUpgrade/MigrateDiagnosticInformation(dbupgdiag.sql) 3)關閉數據庫 Shutdownimmediate 4)對12c數據庫做備份 5)以降級模式啟動數據庫 Startupdowngrade; 6)執行降級腳本 Sql>Spooldowngrade.log Sql>@$ORACLE_HOME/rdbms/admin/catdwgrd.sql 註: $ORACLE_HOME應指向12c主目錄 catdwgrd.sql腳本將數據庫中的所有組件降級到支持的主版本或補丁集版本(您最初升級時的版本) Sql>spooloff Sql>shutdownimmediate ExitSQLPlus Sql>exit; 7)如果操作系統為LINUX/UNIX: 將以下環境變量更改為要降級到的源數據庫: ORACLE_HOME PATH 編輯/etc/oratabor/var/opt/oracle/oratab以更改 將數據庫映射到源數據庫Oracle主目錄 如果操作系統是Windows,則完成以下步驟: a.停止所有Oracle服務,包括OracleDatabase12c數據庫的OracleServiceSIDOracle服務,其中SID是實例名稱。 例如,如果SID為ORCL,則在命令行提示符中輸入以下內容: C:\>NETSTOPOracleServiceORCL b.在命令提示符下,通過運行ORADIM命令刪除Oracle服務。如果出現提示,則輸入此Windows系統上活動標準用戶帳戶的口令。 例如,如果SID為ORCL,則輸入以下命令: C:\>ORADIM-DELETE-SIDORCL c.在命令提示符下,使用ORADIM命令創建要降級的數據庫的Oracle服務。 C:\>ORADIM-NEW-SIDSID-INTPWDPASSWORD-MAXUSERSUSERS -STARTMODEAUTO-PFILEORACLE_HOME\DATABASE\INITSID.ORA 8)還原配置文件 將配置文件(口令文件、參數文件等)還原到降級版本的ORACLE_HOME。 9)如果這是OracleRAC數據庫,則執行以下命令以將數據庫修改為單實例模式: SETCLUSTER_DATABASE=FALSE 10)從降級版本$ORACLE_HOME/rdbms/admin目錄執行catrelod腳本。 啟動sqlplus,以具有sysdba權限的用戶SYS身份連接到數據庫實例,然後以升級模式啟動數據庫: :cd$ORACLE_HOME/rdbms/admin :sqlplus sql>connectsysassysdba sql>startupupgrade sql>spoolcatrelod.log sql>@?/rdbms/admin/catrelod.sql sql>spooloff catrelod.sql腳本在降級的數據庫中重新加載各個數據庫組件的合適版本。 11)運行utlrp.sql腳本: SQL>@utlrp.sql Sql>exit; utlrp.sql腳本重新編譯先前處於INVALID狀態的所有現有PL/SQL模塊,例如package、procedure、type等。 12)檢查已降級數據庫的狀態: Note556610.1ScripttoCollectDBUpgrade/MigrateDiagnosticInformation(dbupgdiag.sql) 此sql腳本是壹組查詢語句,用於提供用戶友好的輸出,以在升級前後診斷數據庫的狀態。腳本將創建名為db_upg_diag__.log的文件。 13)降級之後,可能在sys用戶下發現無效的QT視圖。這是因為視圖已從基表中選擇了錯誤的列。您需要重新創建這些視圖。 請參閱說明: Note1520209.1QT_*BUFERViewsInvalidafterdowngradefrom12C 降級後步驟: 1)如果您是降級到OracleDatabase11g版本1(11.1.0.7)並且數據庫中有OracleApplicationExpress,則轉到您將apxrelod.sql腳本復制到的目錄(在降級前步驟中)。 運行apxrelod.sql腳本以手動重新加載OracleApplicationExpress: SQL>@apxrelod.sql 運行apxrelod.sql腳本以避免程序包APEX_030200.WWV_FLOW_HELP由於以下錯誤而成為INVALID狀態: PLS-00201:identifier'CTX_DDL'mustbedeclared 2)如果數據庫中啟用了OracleLabelSecurity,則執行以下腳本 a.從OracleDatabase12c的Oracle主目錄下將olstrig.sql腳本復制到要將數據庫降級到的版本的Oracle主目錄。 b.從降級到的版本的Oracle主目錄,運行olstrig.sql以在表上使用OracleLabelSecurity策略重新創建DML觸發器: SQL>@olstrig.sql 3)如果降級集群數據庫,則必須運行以下命令以降級OracleClusterwaredatabase配置: $srvctldowngradedatabase-ddb-unique-name-ooraclehome-tto_version 其中db-unique-name是數據庫名稱(而非實例名稱),oraclehome是已降級數據庫的舊Oracle主目錄的位置,to_version是數據庫所降級到的數據庫版本