可拷,很刑!Autoupgrade升级Oracle如喝水...

来源:这里教程网 时间:2026-03-03 20:07:38 作者:
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理
微信:jem_db
QQ交流群:587159446
公众号:IT邦德

文章目录

  • 前言
  • 1.Autoupgrade介绍
  • 2 兼容性检查
  • 3 数据库备份
  • 4. 安装19C数据库软件
  • 4.1 创建目录并授权
  • 4.2 添加用户组
  • 4.3 修改环境变量
  • 4.4 解压19C安装包
  • 4.5 静默安装19C数据库软件
  • 5.升级前信息检查
  • 5.1 创建autoupgrade配置文件
  • 5.2 analyzef分析
  • 5.3 查看分析日志
  • 5.4 修复升级不满足的条件
  • 6.deploy升级19C
  • 7.升级后的工作
  • 7.1 删除restore point
  • 7.2 设置COMPATIBLE参数
  • 7.3 重置密码
  • 7.4 生成新密码文件
  • 7.5 DB_DOMAIN调整
  • 7.5 连接测试19C
  • 8.总结

    前言

    Autoupgrade工具支持升级前的检查、升级问题修复、一键式自动升级以及升级后的问题修复,极大的简化数据库的升级步骤。

    1.Autoupgrade介绍

    Autoupgrade是Oracle推出的自动升级工具,通过该工具可以将数据库升级为Oracle12.2之后的版本,工具支持升级前的检查、升级问题修复、一键式自动升级以及升级后的问题修复,极大的简化数据库的升级步骤。

    只要源端版本可以直接升级到支持的目标版本,都可以使用该工具进行

    那么接下里就给大家分享最近实施过的11G单机升级到19全过程

    2 兼容性检查

    如果源Oracle上的compatible参数设置的值太低,无法升级到Oracle Database 19c,此时必须在源 Oracle Database 版本上设置至少满足Oracle Database 19c升级支持的最小值(11.2.0)。

    SQL> show parameter compatible;
    NAME           TYPE        VALUE
    ----------------------------------------------
    compatible    string      11.2.0.4.0
    如果源Oracle Database版本不符,需要更改后重启数据库
    SQL> alter system set compatible='11.2.0' scope=spfile;

    3 数据库备份

    RMAN>
    run{
    backup as compressed backupset database 
    format '/u01/dbbak/db/DB%U.bkp' 
    plus archivelog format '/u01/dbbak/arch/ARCH%U.bkp' 
    delete all input;
    BACKUP CURRENT CONTROLFILE 
    FORMAT '/u01/dbbak/control_ctl';
    }

    4. 安装19C数据库软件

    4.1 创建目录并授权

    为新版本19C的Oracle数据库选择一个位置,该位置与当前11G版本的Oracle主目录分开。

    mkdir -p /u01/19c/oracle
    mkdir -p /u01/19c/oraInventory
    mkdir -p /u01/19c/oracle/product/19.0.0/dbhome_1
    chown -R oracle:oinstall /u01/19c
    chmod -R 775 /u01/19c

    4.2 添加用户组

    /usr/sbin/groupadd -g 1504 backupdba
    /usr/sbin/groupadd -g 1505 dgdba
    /usr/sbin/groupadd -g 1506 kmdba
    /usr/sbin/usermod -g oinstall -G dba,backupdba,dgdba,kmdba,oper oracle

    4.3 修改环境变量

    --以下操作在Oracle用户下执行
    [oracle@rhel79 ~]$ cp ~/.bash_profile ~/.bash_profile_bak
    [oracle@rhel79 ~]$ vi ~/.bash_profile
    export PATH
    unset TNS_ADMIN
    export ORACLE_BASE=/u01/19c/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
    export ORACLE_SID=PROD
    export PATH=$ORACLE_HOME/bin:$PATH
    [oracle@rhel79 ~]$ source ~/.bash_profile

    4.4 解压19C安装包

    上传安装包到/opt目录下,登陆到Oracle用户,解压19C安装包至$ORACLE_HOME。

    [oracle@rhel79 ~]$ cd $ORACLE_HOME
    [oracle@rhel79 dbhome_1]$ unzip /opt/LINUX.X64_193000_db_home.zip

    4.5 静默安装19C数据库软件

    cd $ORACLE_HOME/install/response
    vi db_install.rsp
    #软件版本信息
    oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
    #安装选项-仅安装数据库软件
    oracle.install.option=INSTALL_DB_SWONLY
    #oracle用户用于安装软件的组名
    UNIX_GROUP_NAME=oinstall
    #oracle产品清单目录
    INVENTORY_LOCATION=/u01/19c/oraInventory
    #oracle安装目录
    ORACLE_HOME=/u01/19c/oracle/product/19.0.0/dbhome_1
    #oracle基础目录
    ORACLE_BASE=/u01/19c/oracle
    #安装版本类型:企业版
    oracle.install.db.InstallEdition=EE
    #指定组信息
    oracle.install.db.OSDBA_GROUP=dba
    oracle.install.db.OSOPER_GROUP=oper
    oracle.install.db.OSBACKUPDBA_GROUP=backupdba
    oracle.install.db.OSKMDBA_GROUP=kmdba
    oracle.install.db.OSRACDBA_GROUP=dba
    oracle.install.db.OSDGDBA_GROUP=dgdba
    su - oracle
    cd $ORACLE_HOME
    ./runInstaller -silent -noconfig -responseFile \
    $ORACLE_HOME/install/response/db_install.rsp

    5.升级前信息检查

    5.1 创建autoupgrade配置文件

    1.jdk版本不满足8以上,需要安装jdk8环境
    [oracle@rhel79 ~]$ java -version
    openjdk version "1.8.0_262"
    OpenJDK Runtime Environment (build 1.8.0_262-b10)
    OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
    2.下载上传最新的autoupgrade.jar到$ORACLE_HOME/rdbms/admin/,
    从mos文档2485457.1中下载获得
    [oracle@rhel79 ~]$ cp /opt/autoupgrade.jar \
    /u01/19c/oracle/product/19.0.0/dbhome_1/rdbms/admin/
    3.autoupgrade配置文件
    [oracle@rhel79 ~]$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar \
    -create_sample_file config

    vi sample_config.cfg
    #日志路径
    global.autoupg_log_dir=/u01/19c/oracle/cfgtoollogs/autoupgrade
    #日志目录
    upg1.log_dir=/u01/19c/oracle/cfgtoollogs/autoupgrade/employee
    #升级数据库的ORACLE_SID
    upg1.sid=PROD
    upg1.source_home=/u01/app/oracle/product/11.2.0/dbhome_1 
    upg1.target_home=/u01/19c/oracle/product/19.0.0/dbhome_1 
    upg1.start_time=NOW
    #升级节点的hostname
    upg1.upgrade_node=rhel79
    #升级之后执行对象编译              
    upg1.run_utlrp=yes
    #升级之后,升级时区
    upg1.timezone_upg=yes
    #升级的目标版本19c
    upg1.target_version=19

    5.2 analyzef分析

    java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar \
    -config /home/oracle/sample_config.cfg -mode analyze

    该命令会生成一个报告,用于检查源数据库是否满足升级条件,并给出相关修改建议。

    5.3 查看分析日志

    从以下报错可以看出,需要对原始对11G库启用快速恢复区及 开归档才做才能继续后续的操作

    1.开归档
    SQL> shutdown immediate; 
    SQL> startup mount;
    SQL> alter database archivelog;
    SQL> alter database open;
    2.快速恢复区设置
    SQL> alter system set db_recovery_file_dest_size=1800g;
    SQL> alter system set db_recovery_file_dest='/home/oracle/recovery';

    再次analyzef分析后正常

    5.4 修复升级不满足的条件

    1.源库11G删除源库OLAP目录
    SQL> @$ORACLE_HOME/olap/admin/catnoamd.sql
    2.收集字典统计信息
    SQL> EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;
    3.收集固定对象的统计信息
    SQL> EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
    4.Oracle数据库Oracle主页删除EXF和RUL
    SQL>@$ORACLE_HOME/rdbms/admin/catnoexf.sql
    5.无效对象编译
    SQL>@$ORACLE_HOME/rdbms/admin/utlrp.sql
    6.清空数据库回收站
    SQL> PURGE DBA_RECYCLEBIN;

    6.deploy升级19C

    --Oracle19C的环境中
    [oracle@rhel79 ~]$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar \
    > -config /home/oracle/sample_config.cfg -mode deploy
    AutoUpgrade 24.4.240426 launched with default internal options
    Processing config file ...
    +--------------------------------+
    | Starting AutoUpgrade execution |
    +--------------------------------+
    1 Non-CDB(s) will be processed
    Type 'help' to list console commands
    upg> status

    upg> lsj
    +----+-------+---------+---------+-------+----------+-------+-----------+
    |Job#|DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|    MESSAGE|
    +----+-------+---------+---------+-------+----------+-------+-----------+
    | 102|   PROD|DBUPGRADE|EXECUTING|RUNNING|  01:23:33| 4s ago|0%Upgraded |
    +----+-------+---------+---------+-------+----------+-------+-----------+
    Total jobs 1
    upg> status -job 102  
    Details
            Job No           102
            Oracle SID       PROD
            Start Time       24/05/27 01:23:33
            Elapsed (min):   1
            End time:        N/A
    Logfiles
            Logs Base:    /u01/19c/oracle/cfgtoollogs/autoupgrade/employee/PROD
            Job logs:     /u01/19c/oracle/cfgtoollogs/autoupgrade/employee/PROD/102
            Stage logs:   /u01/19c/oracle/cfgtoollogs/autoupgrade/employee/PROD/102/dbupgrade
            TimeZone:     /u01/19c/oracle/cfgtoollogs/autoupgrade/employee/PROD/temp
            Remote Dirs:  
    Stages
            SETUP            <1 min
            GRP              <1 min
            PREUPGRADE       <1 min
            PRECHECKS        <1 min
            PREFIXUPS        <1 min
            DRAIN            <1 min
            DBUPGRADE        ~0 min (RUNNING)
            POSTCHECKS      
            POSTFIXUPS      
            POSTUPGRADE     
            SYSUPDATES      
    Stage-Progress Per Container
            +--------+---------+
            |Database|DBUPGRADE|
            +--------+---------+
            |    PROD|    0  % |
            +--------+---------+
    等待升级完成,此时可以通过log监控进程
    也可以通过命令行监控

    7.升级后的工作

    7.1 删除restore point

    SQL> select name from v$restore_point;
    NAME
    ------------------------------------------
    AUTOUPGRADE_221145114461854_PROD
    SQL> drop restore point AUTOUPGRADE_221145114461854_PROD;

    7.2 设置COMPATIBLE参数

    SQL> show parameter compatible;
    NAME                  TYPE             VALUE
    -------------------------------------------------------
    compatible            string           11.2.0.4.0
    noncdb_compatible     boolean          FALSE
    SQL> alter system set compatible = '19.0.0' scope=spfile;
    SQL> shutdown immediate;
    SQL> startup
    SQL> show parameter compatible;
    NAME                  TYPE             VALUE
    -------------------------------------------------------
    compatible            string           19.0.0
    noncdb_compatible     boolean          FALSE

    7.3 重置密码

    SQL> SELECT USERNAME,ACCOUNT_STATUS 
    FROM DBA_USERS WHERE USERNAME IN ('SYS','SYSTEM');
    USERNAME                      ACCOUNT_STATUS
    ----------------------------------------------------------------------------------------
    SYSTEM                        EXPIRED & LOCKED
    SYS                           LOCKED
    SQL> UPDATE USER$ SET ASTATUS=0 WHERE NAME='SYS';
    SQL> UPDATE USER$ SET ASTATUS=0 WHERE NAME='SYSTEM';
    SQL> COMMIT;
    SQL> alter system flush shared_pool;
    SQL> SELECT USERNAME,ACCOUNT_STATUS FROM DBA_USERS 
    WHERE USERNAME IN ('SYS','SYSTEM');
    USERNAME                      ACCOUNT_STATUS
    ----------------------------------------------------------------------------------------
    SYSTEM                        OPEN
    SYS                           OPEN
    SQL> alter user system identified by oracle;
    SQL> alter user sys identified by oracle;

    7.4 生成新密码文件

    cd $ORACLE_HOME/dbs
    mv orapwPROD orapwPROD_bak
    orapwd file=$ORACLE_HOME/dbs/orapwPROD password=oracle format=12 force=y

    7.5 DB_DOMAIN调整

    SQL> show parameter db_domain;
    NAME            TYPE             VALUE
    -----------------------------------------
    db_domain       string           NULL
    SQL> alter system reset db_domain scope=spfile;

    7.5 连接测试19C

    sqlplus system/oracle@192.168.6.10:1521/PROD

    8.总结

    AutoUpgrade工具可以自动执行升级任务,减少手动操作的复杂性和潜在错误。它能够自动执行必要的检查、分析和转换操作,大大简化了升级过程.

  • 相关推荐