Oracle数据库从11g升级到19c

简介:

实际上是oracle11g单实例升级到Oracle 19c的non-CDB。基本保留了11g的大部分特性。
平台是redhet7.9,有一台新机,平台是redhet8.8 。
计划先将新服务器恢复成11g的数据库,然后在新的服务器升级数据库到19c 。
想实现升级由很多的方法,可以用图形化也就是DBUA的方法,但是官网比较推荐,也相对比较简单的方式是:autoupgrade的方式。
autoupgrade是一个java程序文件(autoupgrade.jar),在官网下载最新的文件。并配置一个config.cfg的配置文件在autoupgrade.jar同目录下然后就会根据配置文件自动的升级数据库了。

要特别注意几点:

  • 在正式升级前要进行充分的测试,包括但不限于数据库升级测试,应用测试,备份测试,失败还原点等。
  • 要执行autoupgrade程序需要jdk的版本是有要求的,详细查看相关官方文档。我本次需要的jdk 11 的版本。低了高了都不行。
  • 能升级到19c的不是所有11g的版本,能升级到19c的只能是11.2.0.4这个版本。如果不可以直接升级,可以采用逻辑数据导出导入的方法,或者先升级到一个中间版本。
  • 兼容性参数COMPATIBLE,有些应用依赖旧的数据库特性,可以保持这个参数不变。这样新版本的数据库特性就不会生效。例如19c数据库该参数应该为19.0.0,如果不是则无法使用19c的新特性。19c的该参数最小值为11.2.0 。该参数一旦提升之后是无法降下来的,所以更改之前一定要做测试并向开发或者应用确认支持。

详细信息参见官方文档:https://docs.oracle.com/en/database
Install and Upgrade >>>Oracle Database Upgrade Guide

基本情况

  • SID:prod
  • ORACLE_BASE:/oracle
  • ORACLE_HOME:/oracle/prod/19.0.0

升级操作:

0.OS安装配置

oracle用户:oraprod(G:Oinstall dba)
新建19c环境变量,大部分是11g修改而来:

export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/prod/19.0.0
export ORACLE_SID=prod
PATH=/bin:/usr/bin:/etc:/usr/sbin:/sbin:.
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export EDITOR=vi
export JAVA_HOME=$ORACLE_HOME/jdk/bin
export LD_LIBRARY_PATH=/oracle/prod/19.0.0/lib
set -o emacs
#set -o vi
export PS1=`whoami`@`hostname`':${PWD}> '

root用户执行,对large page的修改,Oracle分配共享池需要large page的配置

vi /etc/sysctl.conf 
vm.nr_hugepages=23140
sysctl -p

安装19c依赖包

root用户执行
yum install oracle-database-preinstall-19c-1.0-1.el8.x86_64.rpm

1、在新服务器上恢复11g数据库

方法:略

2、安装19c数据库 only software

方法:略

3、用autoupgrade方法升级数据库

升级前准备

  • 将autoupgrade.jar和jdk-11.0.23上传到服务器/tmp下
  • 检查数据库监听是否都正常
  • 检查无效组件
  • My Oracle Support Document 2485457.1下载最新的autograde程序
col comp_id for a15
col version for a15
col comp_name for a30
col status for a15
select comp_id,comp_name,version,status from dba_registry;
  • 如果有无效组件,请重新编译或者重装
  • 执行权限操作,我的XDB在升级过程中会失效。重新装后升级依然失效,必须要执行如下权限。
GRANT EXECUTE ON DBMS_LOB TO XDB;
GRANT EXECUTE ON UTL_FILE TO XDB;

检查java版本

/tmp/jdk-11.0.23/bin/java -version

配置config.cfg文件

vi /tmp/config.cfg

global.autoupg_log_dir=/tmp/autoupgrade_log
prod.restoration=no    ##不生成回复点GRP,需要设置闪回,默认是yes
prod.log_dir=/tmp/autoupgrade_log/prod        
prod.sid=prod
prod.source_home=/oracle/prod/11.2.0  
prod.target_home=/oracle/prod/19.0.0 
prod.target_version=19

参数文件参数很多,大部分没写的都是用的默认值,所以就不用写了。
由于生产库没有设置闪回,所以GRP不能执行,需要闪回空间,生产库有条件的可以设置成yes,默认是yes。
non-CDB的数据库升级到non-CDB是最简单的。从配置文件中也能体会到。

Analyze模式检查

/tmp/jdk-11.0.23/bin/java -jar /tmp/autoupgrade.jar -config /tmp/config.cfg -mode analyze

会进入到升级的程序命令行界面。提示符是upg
输入lsj查看job编号

upg> lsj

编号是从100开始计数的,再用命令查看这个编号的job的进度等详细信息:

upg> status -job 100

Fixups模式检查

/tmp/jdk-11.0.23/bin/java -jar /tmp/autoupgrade.jar -config /tmp/config.cfg -mode fixups

deploy模式升级

/tmp/jdk-11.0.23/bin/java -jar /tmp/autoupgrade.jar -config /tmp/config.cfg -mode deploy

升级后检查

autoupgrade升级的基本知识

参考官方文档,这里只是总结我需要的只是体系。
也可以用来减少看官方文档的时间,oracle的官方文档太繁复,阅读需要浪费很多时间,如果能通过我的文章能够减少很多时间,我会很高兴。

posted @ 2024-10-25 08:49  老牛的田  阅读(61)  评论(0编辑  收藏  举报