zoukankan      html  css  js  c++  java
  • 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报错了。

  • 相关阅读:
    域名和dns
    Oracle版本区别及版本选择!
    并发
    URL和URI的区别??
    sshpass免密码(免交互)连接
    python之路 目录
    awk sed 总结
    aiohttp使用
    Mac破解软件 “XXX”意外退出 奔溃解决方法
    我的Mac中毒了,病毒居然叫做MacPerformance
  • 原文地址:https://www.cnblogs.com/sky2088/p/13373404.html
Copyright © 2011-2022 走看看