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的官方文档太繁复,阅读需要浪费很多时间,如果能通过我的文章能够减少很多时间,我会很高兴。