Oracle 數據庫19c 回退降級到 11.2.0.4 方案


 

 

場景:由於oracle數據庫從11.2.0.4 升級到19c之后,發現諸多問題,需要回退到原來的 11.2.0.4 版本。

 

 

數據庫降級前:

 

SQL> select name from v$database;

 

NAME

------------------

TESTUP

 

SQL> select * from v$version;

 

BANNER

----------------------------------------------------------------------------

BANNER_FULL

----------------------------------------------------------------------------

BANNER_LEGACY

----------------------------------------------------------------------------

    CON_ID

----------

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.6.0.0.0

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

         0

 

SQL> show parameter compatible

 

NAME                              TYPE                   VALUE

---------------------------- ------------------- -------------------------

compatible                       string                 11.2.0.4.0

 

 

 

 

 

19c降級矩陣如下:

 

Downgrade Compatible Matrix

Oracle Database release Downgradable

( Yes / No )

18c

Yes

12.2.0.1

Yes

12.1.0.2

Yes

11.2.0.4

Yes for non-CDBs

 

 

 

 

 

 

 

 

 

 

 

 

一、降級前檢查

1.1 如果數據庫啟用了 Oracle Database Vault, 則降級之前需要禁用        

SQL> SELECT * FROM CDB_DV_STATUS;

 

如果輸出為TRUE,則需要禁用,輸出為FALSE則進行下一步。

 

1.2 如果數據庫使用了 Oracle Label Security, 則需要在19c ORACLE_HOME下執行olspredowngrade.sql 腳本

查詢下面視圖,查看Oracle Label Security是否使用,輸出為FALSE則進行下一步。

 

SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Label Security';

如果返回TRUE,執行 olspredowngrade.sql 腳本:

 SQL> @ORACLE_HOME/rdbms/admin/olspredowngrade.sql

 

1.3 如果數據庫啟用了 Unified Auditing, 建議備份和清除審計文件

a . 查看是否有unified audit 記錄,輸出為0則進行下一步。

SQL> SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL; 

b. 備份現有的審計數據到表格中

SQL> CREATE TABLE UA_DATA AS (SELECT * FROM UNIFIED_AUDIT_TRAIL);

c. 清除審計記錄

EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, use_last_arch_timestamp => FALSE);

 

1.4 降級之前,確保目標數據庫中有當前版本的timezone文件

查詢V$TIMEZONE_FILE視圖,當前使用的timezone文件

SQL> select * from V$TIMEZONE_FILE;

 

FILENAME                VERSION     CON_ID

-------------------- ---------- ----------

timezlrg_32.dat              32          0

注: 需要將19c $ORACLE_HOME/oracore/zoneinfo 下的timezlrg_32.dat 文件拷貝到 11gR2 的$ORACLE_HOME/oracore/zoneinfo 目錄下

cp /u01/app/oracle/product/19.0.0/db_1/oracore/zoneinfo/timezlrg_32.dat /u01/app/oracle/product/11.2.0/db_1/oracore/zoneinfo

 

1.5 如果配置了EM,則需要刪掉sysman用戶 ,重建EM 

若沒有配置EM,則進行下一步

 

DROP USER sysman CASCADE;

1.6 降級前11.2.0.4 需要安裝的補丁

Downgrade from 19c to 11.2.0.4.0

23054359: DATABASE PATCH SET UPDATE 11.2.0.4

20898997: XMLTYPESUP: QCTOXSNLB SHOULD NOT CHECK AGAINST SNAPSHOT SIZE

20348910: ALTER TYPE REPLACE IN PRVTAQJI.SQL TO BE REPLACE WITH CREATE OR REPLACE TYPE

 

[oracle@db-server ~]$ opatch lspatches

30670774;Database Patch Set Update : 11.2.0.4.200414 (30670774)

20898997;

20348910;

 

二、數據庫降級

從19c開始,oracle提供了dbdowngrade工具腳本,如有必要,也可使用和老版本一樣的catdwgrd.sql腳本。

 

執行降級之前,建議數據庫做個全備。

 

2.1 使用sqlplus 降級模式啟動數據庫,並且需要使用pfile 啟動,然后執行dbdowngrade腳本。

如果是RAC數據庫,設置參數CLUSTER_DATABASE=FALSE,保留一個實例,關閉其它實例

 

sqlplus / as sysdba

SQL> alter system set CLUSTER_DATABASE=FALSE scope=spfile sid=’*’;

SQL> shutdown immediate;

以19c ORACLE_HOME 啟動數據庫

export ORACLE_HOME= /u01/app/oracle/product/19.0.0/db_1

sqlplus / as sysdba

SQL> startup downgrade;

 

$cd $ORACLE_HOME/bin

$ chmod +x dbdowngrade

$./dbdowngrade

 

或者手動跑腳本的方法

cd $ORACLE_HOME/rdbms/admin

sqlplus / as sysdba

set echo on termout on serveroutput on timing on

SQL> SPOOL downgrade.log

SQL> @catdwgrd.sql

SQL> SPOOL off

 

2.2 關閉數據庫實例

SQL> SHUTDOWN IMMEDIATE;

 

2.3 修改環境變量指向11.2.0.4

export ORACLE_HOME= /u01/app/oracle/product/11.2.0/db_1

export PATH=$ORACLE_HOME/bin:$PATH

2.4 執行catrelod.sql 重載組件版本

sqlplus / as sysdba

SQL> STARTUP UPGRADE;

SQL> @$ORACLE_HOME/rdbms/admin/catrelod.sql

 

2.5 重啟數據庫,執行重新編譯腳本

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP;

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

如果是RAC 數據庫,則設回CLUSTER_DATABASE參數為TRUE

sqlplus / as sysdba

SQL> alter system set CLUSTER_DATABASE=TRUE scope=spfile sid=’*’;

 

更新CRS中注冊的數據庫版本信息

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

降級完成后結果:

SQL> select name from v$database;

 

NAME

------------------

TESTUP

 

1 row selected.

 

SQL> select * from v$version;

 

BANNER

----------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE    11.2.0.4.0      Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 - Production

 

5 rows selected.

三、降級后報錯處理

降級后 數據庫alert 日志每隔5分鍾就有報錯:

ORA-1400 encountered when generating server alert SMG-4121

MOS 解決方案(ORA-1400 encountered when generating server alert SMG-4121 after downgrade from 12c to 11.2.0.4 (Doc ID 2169006.1))如下:

 

 

Recreate the the SYS.ALERT_QUE using the following steps:

1. Drop the alert_QT

sqlplus / as sysdba

alter system enable restricted session;

exec dbms_aqadm.drop_queue_table('ALERT_QT',true);

 

2. Drop tables wri$_alert_history and WRI$_ALERT_OUTSTANDING

drop table WRI$_ALERT_OUTSTANDING;

drop table WRI$_ALERT_HISTORY;

 

3. Recreate the alert_que and associated objects:

SQL>@$ORACLE_HOME/rdbms/admin/dbmsslrt.sql

SQL>@$ORACLE_HOME/rdbms/admin/catalrt.sql

SQL>@$ORACLE_HOME/rdbms/admin/catmwin.sql

SQL>@$ORACLE_HOME/rdbms/admin/exechae.sql

SQL>@$ORACLE_HOME/rdbms/admin/utlrp.sql

SQL>alter system disable restricted session;

 

經過驗證,處理后alert日志不再有ORA-1400報錯了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM