Oracle 12c (12.1.0.2/12.2.0.1)升级 19c(19.3.0.0)

目录

1、概述

2、12c备份

3、12c打补丁

4、安装19c

5、升级

6、升级失败的回退

参考


1、概述

关于12c 升级 19c,这篇文章写的已经很好 12c升级19c 细节我不再重复,以下记录我实验升级过程中的步骤和遇到问题。

12c的升级19c,简单地说,就是在运行12c的机器上安装19c(此时机器上同时安装了12c和19c),升级程序对12c数据库相关文件进行处理,关闭12c,用19c加载之前的12c数据库相关文件,这个过程有很多繁琐的操作,因此我们使用自动化工具autoupgrade.jar。

autoupgrade.jar使用Java运行,下载地址参考 New version of AutoUpgrade (21.2),不是每个Oracle数据库版本都有相对应autoupgrade.jar版本,而是一个最新的autoupgrade.jar版本,可用于所有Oracle数据库的升级,上面的地址是到Oracle官网下载,需要Oracle账号和”Support Identifier”,要购买Oracle服务,也可以在这里:百度盘 下载,提取码:d2sk。

在上文的参考文章中,对12c需要打补丁,不同小版本的12c需要不同的补丁版本,补丁包的下载也需要Oracle账号和”Support Identifier”,下载地址:My Oracle Support ,也可以在这里 百度盘下载,提取码:d2sk,不过这个补丁包是针对12.2.0.1的,12.1.0.2不能使用。

自己摸索12.1.0.2不打补丁,用autoupgrade.jar直接升级19c是可以的。不过中间遇到失败:

这个问题是有invalid对象(WMSYS.OWM_VSCRIPT_PKG),autoupgrade.jar没能处理,调用invalid对象时就出错了,可以用这个SQL查询系统的无效对象(sqlplus / as sysdba):

SELECT owner, object_type, object_name, status FROM dba_objects
WHERE  status = 'INVALID'
ORDER BY owner, object_type, object_name;

解决WMSYS无效对象的方法是在12.1.0.2上卸载workspace manager,再安装:

sqlplus / as sysdba

@owmuinst.plb

@owminst.plb

再查询WMSYS的无效对象就没有了。然后在按照下面步骤升级19c就成功了。

自己亲自尝试,12.1.0.2 和 12.2.0.1 用autoupgrade.jar直接升级19c都是可以的,并且补丁可能也是不需要打的。下文的步骤,对12.1.0.2 和 12.2.0.1都是适用的。

2、12c备份

RMAN冷备全库

rman target /

list backup

# 12c 停库,在mount状态全库备份

shutdown immediate

startup mount

# 不要自动备份control file

set nocfau;

# 注意,要先备份数据库,然后备份控制文件,因为数据库的备份路径记录在控制文件中。

# 备份数据库
backup database format '/mnt/disk01/rman_backup_dir2/db_%d_%T_%U.bak';

# 备份控制文件
backup current controlfile format '/mnt/disk01/rman_backup_dir2/ctl_%d_%T_%U.bak';

3、12c打补丁(可选)

12c关库,解压缩补丁文件:

unzip p28553832_12201190115OCWJAN2019RU_Linux-x86-64.zip

在12c的环境下(即$ORACLE_HOME和$PATH指向12c的安装目录)执行:

在28553832/28553832/目录下:

$ORACLE_HOME/OPatch/opatch apply

# 12c的家目录下有个可执行程序opath,使用它打补丁,输入就是补丁目录下的文件

# 查看打补丁结果

$ORACLE_HOME/OPatch/opatch lsinv

4、安装19c

在运行12c的机器上安装19c,注意,12c和19c安装在同一台机器上,但是安装在不同的目录下,创建安装19c的目录:

mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1

将下载的19c安装包解压到刚才创建的目录,这一步很重要,这个目录就是19c的ORACLE_HOME:

unzip LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3.0/dbhome_1

安装过程可参考我的另一篇博客:安装Oracle19c

上面的安装,默认使用安装12c的oracle用户,所以ORACLE_HOME和PATH仍是指向12c的安装路径,不过这没有关系,安装19c的时候并不会用到ORACLE_HOME和PATH。安装完19c后,有的操作需要ORACLE_HOME和PATH指向19c的安装路径。

注意,安装完19c后,不需要创建19c的数据库实例。

5、升级

创建autoupgrade配置文件如下:

global.autoupg_log_dir=/mnt/disk01/oracle/cfgtoollogs/autoup
upg1.start_time=NOW
upg1.source_home=/u01/app/oracle/product/12.2.0.1/dbhome_1
upg1.target_home=/u01/app/oracle/product/19.3.0/dbhome_1
upg1.sid=paas
upg1.log_dir=/u01/app/oracle/cfgtoollogs/autoup
upg1.upgrade_node=localhost
upg1.target_version=19

12c开库,保证配置和开启闪回和归档日志

alter database flashback on;
archive log list;

在19c的$ORACLE_HOME环境下执行升级,查看Java版本,如果Linux环境的Java版本不是1.8,就用19c自带的JDK,19c自带JDK的路径是:$ORACLE_HOME/jdk/bin/java

export ORACLE_BASE=/mnt/disk01/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=paas
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

$ORACLE_HOME/jdk/bin/java -version

1)升级第一步:analyze

这一步是检查12c是否具备升级条件,如果不具备,会提示如何处理(注意,此时12c必须是open状态,19c是shutdown)。

java -jar autoupgrade.jar -config config.cfg -mode analyze -clear_recovery_data

这个-clear_recovery_data是可选的,如果有失败,再次升级这个选项就有必要了,不过这个选项放在哪里也不会影响。

这会打开一个命令行终端,同时,有任务(job)在后台执行,命令status,可查看任务状态:

analyze 过程比较快,job执行完退出终端:

查看分析日志,内容如下应该是没问题的:/u01/app/oracle/cfgtoollogs/autoup/cfgtoollogs/upgrade/auto/status/status.log

2)升级第二步:deploy

执行下面的deploy命令,正式开始升级(注意,此时12c必须是open状态,19c是shutdown):

java -jar autoupgrade.jar -config config.cfg -mode deploy -clear_recovery_data

这个-clear_recovery_data是可选的,如果有失败,再次升级这个选项就有必要了,不过这个选项放在哪里也不会影响。 

命令执行后,会打开一个终端,升级时间较长,可以在这个终端里查看升级状态,使用命令status

 升级任务的job id 为101的,下面命令查看详细信息:

upg> status -job 101

成功执行完deploy: 

查看/mnt/disk01/oracle/cfgtoollogs/autoupd/cfgtoollogs/upgrade/auto/status/status.log

和/mnt/disk01/oracle/cfgtoollogs/autoupd/paas/101/dbupgrade/upg_summary.log

如下:

全都是UPGRADED,表示升级成功了:

这是我尝试过多次后成功的,之前analyze这一步是成功的,但是deploy在90% data patch时失败,打印:

verify_queryable_inventory returned ORA-20001: Latest xml inventory is not loaded into table

Error: prereq checks failed!

从网上搜索半天,执行 select * from OPATCH_XML_INV; 提示 file name check failed qopiprep.bat,根据 KUP-04027 的提示猜测,我安装12c和19c时用的路径是软链接,可能和这有关,抱着试试看的心态,重新安装12c和19c不再使用软链接路径,重新给12c灌数据,走了一遍升级流程,结果这次成功了!

注意,安装Oracle时,安装的路径不要用软连接,ORACLE_HOME的路径也不要有软链接!

3)检查是否升级成功

以19c的环境登录:

这就表示没有错误,升级成功,尝试重启数据库,重启listener,尝试以之前12c中的普通用户登录,查看表:

(autoupgrade应该已经自动拷贝了密码文件、spfile、listener.ora、tnsnames.ora)

sqlplus paasapp/Paas1015@172.32.148.156:1521/paas

升级完后自动启动了19c,数据库使用的就是之前12c的,如果再以12c的环境连接数据库就不行了。

查看注册组件:

select comp_id,status from dba_registry;

6、升级失败的回退

如果因为某种原因升级失败了怎么办?或者想重新升级怎么办?

参考这篇文章:https://mikedietrichde.com/2020/04/08/troubleshooting-restoring-and-restarting-autoupgrade/

首先将19c以upgrade模式启动:

SQL> startup upgrade

如果启动失败报找不到初始参数文件:

autoupgrade程序会在日志目录的paas/temp/创建参数文件:

[oracle@qinh156 upgrade12to19]$ ls /mnt/disk01/oracle/cfgtoollogs/autoupd/paas/temp/ -lrt
total 48
-rwx------ 1 oracle oinstall    0 Oct 20 16:20 paas.restart
-rwx------ 1 oracle oinstall 1909 Oct 20 16:59 paas_autocompile20221020165920paas.sql
-rwx------ 1 oracle oinstall  896 Oct 27 11:26 before_upgrade_pfile_paas.ora
-rwx------ 1 oracle oinstall  896 Oct 27 11:26 after_upgrade_pfile_paas.ora
-rwx------ 1 oracle oinstall  922 Oct 27 11:31 during_upgrade_pfile_paas.ora
-rwx------ 1 oracle oinstall 6275 Oct 27 12:09 ctx_move_text_file_list_paas
-rwx------ 1 oracle oinstall 1909 Oct 27 12:53 paas_autocompile20221027125357paas.sql
-rwx------ 1 oracle oinstall 7488 Oct 27 13:02 122010_paas_tz_upg.log
-rwx------ 1 oracle oinstall  338 Oct 27 13:03 listener.ora_paas_122010_193000_.backup
-rwx------ 1 oracle oinstall  455 Oct 27 13:03 tnsnames.ora
-rwx------ 1 oracle oinstall  205 Oct 27 13:03 sqlnet.ora_paas_122010_193000_.backup

拷贝 after_upgrade_pfile_paas.ora 再启动

cp /mnt/disk01/oracle/cfgtoollogs/autoupd/paas/temp/after_upgrade_pfile_paas.ora /mnt/disk01/oracle/product/19.3.0/dbhome_1/dbs/

sqlplus / as sysdba

SQL> startup upgrade pfile=/mnt/disk01/oracle/cfgtoollogs/autoupd/paas/temp/after_upgrade_pfile_paas.ora
ORACLE instance started.

Total System Global Area 3103781608 bytes
Fixed Size                  8901352 bytes
Variable Size             637534208 bytes
Database Buffers         2449473536 bytes
Redo Buffers                7872512 bytes
Database mounted.

查看是否创建了Guaranteed Restore Point(GRP),默认被升级的12c是开启归档日志和flashback的,这样autoupgrade会创建GRP。如果创建了,就用它恢复到升级前的状态,然后重新在做upgrade,如果没创建就从失败的点恢复升级。查看GRP:

SQL> column name format a35
SQL> column guarantee_flashback_database format a30
SQL> select name, guarantee_flashback_database from v$restore_point;

NAME                 GUARANTEE_FLASHBACK_DATABASE
-------------------------------- ------------------------------
AUTOUPGRADE_221145114461854_DB12 YES

用GRP回退,进入autoupgrade命令行:

java -jar autoupgrade.jar -config /mnt/disk01/upgrade12to19/config.cfg -mode deploy

然后从头开始升级,这次用-clear_recovery_data,生成新job号:

java -jar autoupgrade.jar -config /mnt/disk01/upgrade12to19/config.cfg -mode analyze -clear_recovery_data

然后

java -jar autoupgrade.jar -config /mnt/disk01/upgrade12to19/config.cfg -mode deploy -clear_recovery_data

如果没有GRP,可能是12c没开flashback,或者被删除了,那只有两个办法了,一是用RMAN备份恢复12c数据库(RMAN全库冷备和还原),二是用autoupgrade在升级失败处,解决问题,然后尝试继续升级:

# 先以upgrade模式启动19c步骤如上,然后:

java -jar autoupgrade.jar -config /mnt/disk01/upgrade12to19/config.cfg -mode deploy

upg>resume -job 101

7、升级完成后的工作

升级时需要使用 fast_recovery_area 管理归档和闪回,查看一下db_recovery_file_dest_size是不是够大,因为当db_recovery_file_dest 目录下的数据量接近于 db_recovery_file_dest_size 时,就会报归档日志错误,此时要清理归档日志,或将db_recovery_file_dest_size设置的更大,修改 db_recovery_file_dest和db_recovery_file_dest_size 不需要重启数据库。

alter system set db_recovery_file_dest_size = 500G scope=both;

Configuring the Fast Recovery Area (oracle.com)

注意,如果fast_recovery_area快满了,impdp时会卡住。

然后要清理一下归档日志,也不要全清了,清空当天之前的就行:

delete archivelog until time 'sysdate-1';

RMAN删备份(可以过一段时间后)。

修改升级后的库的compatible参数为19.3.0.0(经过充分测试后)

ALTER SYSTEM SET COMPATIBLE = '19.3.0' SCOPE=SPFILE;

重启数据库。

参考

https://mikedietrichde.com/2020/07/31/upgrade-fails-with-ora-20001-during-datapatch-run/

Oracle Upgrade 12c至19c - chchcharlie、 - 博客园 (cnblogs.com)

Introduction to Upgrading Oracle Database

 Oracle 11gR2 KUP-04027 file name check failed: string (oraexcel.com)

Upgrading Oracle Database Manually Using Parallel Upgrade Utility

用Oracle自带脚本 重建WMSYS用户的WMSYS.WM_CONCAT函数-mysql教程-PHP中文网

(31条消息) Oracle数据库升级-Oracle 12.2 update to 19c using DBUA_+RAC_执笔画情ora的博客-CSDN博客_show parameter cluster;cdb_cluster_name

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: com.github.noraui ojdbc8 12.2.0.1是一个Java应用程序的依赖项,用于连接Oracle数据库。ojdbc8代表的是Oracle JDBC驱动程序的版本,这个版本与Oracle 12.2.0.1数据库版本相对应。com.github.noraui是开源团队NoraUi的GitHub用户名,这个项目是由该团队创建和维护的。 使用com.github.noraui ojdbc8 12.2.0.1可以充分发挥Oracle数据库的性能和功能。Oracle数据库是一种强大、可靠、高性能的关系型数据库管理系统,广泛应用于企业级应用程序。使用这个驱动程序可以实现Java应用程序与Oracle数据库之间的无缝集成。 不仅如此,com.github.noraui ojdbc8 12.2.0.1还提供了丰富的API,支持大规模数据处理、高效的批量操作和高级数据类型处理等特性。这个驱动程序还支持数据加密和集群配置,确保数据库的安全和高可用性。 总之,com.github.noraui ojdbc8 12.2.0.1Oracle数据库和Java应用程序之间的重要中间件。它提供了强大的功能和高效的性能,极大地促进了企业级应用程序的开发和实施。 ### 回答2: com.github.noraui ojdbc8 12.2.0.1 是一个针对 Oracle 数据库的 Java 驱动程序。该驱动程序可以让 Java 应用程序通过 JDBC API 连接和操作 Oracle 数据库。ojdbc8 12.2.0.1 版本是 Oracle 官方发布的 JDBC 驱动程序的一个变种,由于许可协议的限制,Oracle 官方发布的驱动程序不能开源,因此社区中有不少对 Oracle 官方 JDBC 驱动的替代品,com.github.noraui ojdbc8 就是其中一个。 com.github.noraui 是一个基于 GitHub 社区的开源项目,旨在提供各种 Java 自动化解决方案的示例和模板。其中,ojdbc8 就是该项目提供的针对 Oracle 数据库的 JDBC 驱动程序。 12.2.0.1 是 ojdbc8 的版本号,其中,12 是大版本号,2 是小版本号,0.1 是修订号。在不同版本的 ojdbc8 中,可能会有一些兼容性和性能方面的改进,用户可以根据自己的实际情况选择合适的版本。同时,为了避免驱动程序的不兼容性带来的问题,用户还应该注意应用程序的 Java 和 Oracle 数据库的版本兼容性。 总的来说,com.github.noraui ojdbc8 12.2.0.1 是一个基于 GitHub 开源社区的 Oracle 数据库 JDBC 驱动程序,适用于 Java 应用程序通过 JDBC API 连接和操作 Oracle 数据库。 ### 回答3: com.github.noraui ojdbc8 12.2.0.1是一个开源的Java数据库连接驱动。它是用于连接Oracle数据库的驱动程序,通过该驱动程序,Java程序可以实现与Oracle数据库之间的交互。ojdbc8 12.2.0.1是版本号,它的主要特点是支持JDBC 4.2和Oracle 12c R2数据库。此外,ojdbc8 12.2.0.1还具有优化的性能和更好的稳定性,因此它被广泛应用于各种Java应用程序和企业级系统中。此外,com.github.noraui ojdbc8 12.2.0.1是一个开源项目,它提供了源代码,可以供开发人员自由地使用、修改和学习。这个项目也有一个很活跃的社区,开发者可以在这个社区中获取帮助和支持。总之,com.github.noraui ojdbc8 12.2.0.1是一个功能强大、稳定可靠、优化性能的Java数据库连接驱动程序,它可以大大简化Java程序与Oracle数据库之间的交互,并为开发者提供更好的体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值