过去,我写了一些有关将PDB克隆到新环境的文章。我还添加了有关RELOCATE的帖子。但是我意识到我没有关于一个非常典型场景的特定博客文章:升级测试–在线将PDB克隆到19c。
JørgenHåland在Unsplash上拍摄的照片
我的设定
我有一个带PDB的Oracle 12.2.0.1 CDB和另一个Oracle 19.6.0 CDB。我将把PDB从12.2.0.1热克隆到更高版本的CDB,然后升级PDB。
这样做的动机是允许我的测试环境中的应用程序团队已经在19.6.0上进行测试。一旦AutoUpgrade也支持这种情况,您便可以每晚自动进行此操作。
热克隆
自从Oracle 12.2.0.1引入本地撤消以来,就可以使用热克隆。因此,如果我的来源至少是Oracle 12.2.0.1,并且使用默认的本地撤消,则可以使用。像往常一样,我显示了操作顺序:
CDB1:
为重新定位操作创建一个普通用户并分配必要的特权:
创建用户c ## borg由oracle缺省表空间用户标识临时表空间temp CONTAINER = ALL; 授予CREATE SESSION,创建可插拔的数据库,以SYSOPER的形式创建到c ## borg CONTAINER = ALL;
复制
CDB2:
创建用于重新定位操作的公共数据库链接:
创建公共数据库链接clonemypdb连接到c ## borg,由oracle使用'CDB1'标识;
复制
启动重定位:
从PDB1 @ clonemypdb创建可插入数据库PDB1 file_name_convert =('CDB1','CDB2');
复制
打开PDB:
改可插拔数据库PDB1的打开升级;
复制
PDB仅在限制模式下打开时会出现错误。
然后,我需要以升级模式在CDB2中打开PDB1,因为它的字典仍然是Oracle 12.2.0.1字典,而现在它在19c数据库中运行。
我需要升级。
PDB升级
这一步很简单,因为我只是避免了预升级步骤。在我的环境中,升级PDB1之前不需要执行任何其他任务。
在CDB2环境中调用升级:
$ dbupgrade -c“ PDB1” -l / home / oracle / logs [/u01/app/oracle/product/19/rdbms/admin/catctl.pl]的参数列表 对于Oracle内部使用,仅A = 0 在c = PDB1中运行 不要在C = 0中运行 输入目录d = 0 回声关闭e = 1 模拟E = 0 强制清理F = 0 对数ID i = 0 子进程I = 0 日志目录l = / home / oracle / logs 优先列表名称L = 0 激活升级模式M = 0 SQL进程计数n = 0 SQL PDB进程计数N = 0 开放模式正常o = 0 开始阶段p = 0 结束阶段P = 0 逆序r = 0 自动升级恢复R = 0 脚本s = 0 串行运行S = 0 RO用户表空间T = 0 显示阶段y = 0 调试catcon.pm z = 0 调试catctl.pl Z = 0 catctl.pl版本:[19.0.0.0.0] 状态:[生产中] 内置:[RDBMS_19.6.0.0.0DBRU_LINUX.X64_191217] / u01 / app / oracle / product / 19 / rdbms / admin / orahome = [/ u01 / app / oracle / product / 19] / u01 / app / oracle / product / 19 / bin / orabasehome = [/ u01 / app / oracle / product / 19] catctlGetOraBaseLogDir = [/ u01 / app / oracle / product / 19] 分析文件/u01/app/oracle/product/19/rdbms/admin/catupgrd.sql 日志文件目录= [/ home / oracle / logs] catcon :: set_log_file_base_path:所有与catcon相关的输出都将写入[/home/oracle/logs/catupgrd_catcon_17267.lst] catcon :: set_log_file_base_path:catcon:有关脚本生成的输出,请参见[/home/oracle/logs/catupgrd*.log]文件 catcon :: set_log_file_base_path:catcon:请参见[/home/oracle/logs/catupgrd_*.lst]文件以获取假脱机文件(如果有) Cpu数量= 2 数据库名称= CDB2 数据库版本= 19.0.0.0.0 PDB并行SQL进程计数= [2]大于或等于CPU计数= [2] 并行PDB升级默认为CPU计数[2] 并行SQL进程计数(PDB)= 2 并行SQL进程计数(CDB $ ROOT)= 4 并行PDB升级= 2 生成的PDB包含项:[PDB3] CDB $ ROOT打开模式= [打开] 并行PDB升级重置= 1 开始处理PDB(PDB1) [/ u01 / app / oracle / product / 19 / perl / bin / perl /u01/app/oracle/product/19/rdbms/admin/catctl.pl -c'PDB3'-l / home / oracle / logs -I -i pdb3 -n 2 /u01/app/oracle/product/19/rdbms/admin/catupgrd.sql] [/u01/app/oracle/product/19/rdbms/admin/catctl.pl]的参数列表 对于Oracle内部使用,仅A = 0 在c = PDB1中运行 不要在C = 0中运行 输入目录d = 0 回声关闭e = 1 模拟E = 0 强制清理F = 0 日志ID i = pdb1 子进程I = 1 日志目录l = / home / oracle / logs 优先列表名称L = 0 激活升级模式M = 0 SQL进程计数n = 2 SQL PDB进程计数N = 0 开放模式正常o = 0 开始阶段p = 0 结束阶段P = 0 逆序r = 0 自动升级恢复R = 0 脚本s = 0 串行运行S = 0 RO用户表空间T = 0 显示阶段y = 0 调试catcon.pm z = 0 调试catctl.pl Z = 0 catctl.pl版本:[19.0.0.0.0] 状态:[生产中] 内置:[RDBMS_19.6.0.0.0DBRU_LINUX.X64_191217] / u01 / app / oracle / product / 19 / rdbms / admin / orahome = [/ u01 / app / oracle / product / 19] / u01 / app / oracle / product / 19 / bin / orabasehome = [/ u01 / app / oracle / product / 19] catctlGetOraBaseLogDir = [/ u01 / app / oracle / product / 19] 分析文件/u01/app/oracle/product/19/rdbms/admin/catupgrd.sql 日志文件目录= [/ home / oracle / logs] catcon :: set_log_file_base_path:所有与catcon相关的输出都将写入[/home/oracle/logs/catupgrdpdb3_catcon_17545.lst] catcon :: set_log_file_base_path:catcon:有关脚本生成的输出,请参见[/home/oracle/logs/catupgrdpdb3*.log]文件 catcon :: set_log_file_base_path:catcon:请参阅[/home/oracle/logs/catupgrdpdb3_*.lst]文件以获取假脱机文件(如果有) Cpu数量= 2 数据库名称= CDB2 数据库版本= 19.0.0.0.0 PDB3开放模式= [MIGRATE] 生成的PDB包含:[PDB1] CDB $ ROOT打开模式= [打开] [PDB3]中的组件 已安装[CATALOG CATPROC OWM XDB] 未安装[APEX APS CATJAVA上下文DV EM JAVAVM MGW ODM OLS ORDIM RAC SDO WK XML XOQ] -------------------------------------------------- ---- 阶段[0-107]开始时间:[2020_03_06 14:32:27] 容器列表包括:[PDB1]排除:[无] -------------------------------------------------- ---- ***********执行更改脚本*********** 串行阶段#:0 [PDB1]文件:1时间:23s ***************目录核心SQL *************** 串行阶段#:1 [PDB1]文件:5时间:50秒 重新启动阶段#:2 [PDB1]文件:1时间:0秒 ***********目录表和视图*********** 并行阶段#:3 [PDB1]文件:19时间:27秒 重新启动阶段#:4 [PDB1]文件:1时间:2s *************目录最终脚本************ 串行阶段#:5 [PDB1]文件:7时间:22秒 ***************** Catproc Start **************** 串行阶段#:6 [PDB1]文件:1时间:18秒 ***************** Catproc类型**************** 串行阶段#:7 [PDB1]文件:2时间:13秒 重新启动阶段#:8 [PDB1]文件:1时间:2秒 **************** Catproc表**************** 并行阶段:9 [PDB1]文件:67时间:37秒 重新启动阶段#:10 [PDB1]文件:1时间:1秒 ************* Catproc套件规格************ 串行阶段#:11 [PDB1]文件:1时间:64s 重新启动阶段#:12 [PDB1]文件:1时间:2秒 ************** Catproc程序************** 并行阶段:13 [PDB1]文件:94时间:15秒 重新启动阶段#:14 [PDB1]文件:1时间:1秒 并行阶段:15 [PDB1]文件:121时间:15秒 重新启动阶段#:16 [PDB1]文件:1时间:2秒 串行阶段#:17 [PDB1]文件:22时间:9s 重新启动阶段#:18 [PDB1]文件:1时间:1秒 ***************** Catproc视图**************** 并行阶段:19 [PDB1]文件:32时间:28秒 重新启动阶段#:20 [PDB1]文件:1时间:2秒 串行阶段#:21 [PDB1]文件:3时间:18秒 重新启动阶段#:22 [PDB1]文件:1时间:2秒 并行阶段:23 [PDB1]文件:25时间:227秒 重新启动阶段#:24 [PDB1]文件:1时间:2秒 并行阶段:25 [PDB1]文件:12时间:131秒 重新启动阶段#:26 [PDB1]文件:1时间:1秒 串行阶段#:27 [PDB1]文件:1时间:0s 串行阶段#:28 [PDB1]文件:3时间:8s 串行阶段#:29 [PDB1]文件:1时间:0s 重新启动阶段#:30 [PDB1]文件:1时间:2秒 *************** Catproc CDB视图************** 串行阶段#:31 [PDB1]文件:1时间:6s 重新启动阶段#:32 [PDB1]文件:1时间:2秒 串行阶段#:34 [PDB1]文件:1时间:0s ***************** Catproc公共小车***************** 串行阶段#:35 [PDB1]文件:294时间:21秒 串行阶段#:36 [PDB1]文件:1时间:0s 重新启动阶段#:37 [PDB1]文件:1时间:2秒 串行阶段#:38 [PDB1]文件:6时间:8s 重新启动阶段#:39 [PDB1]文件:1时间:1秒 *************** Catproc数据泵*************** 串行阶段#:40 [PDB1]文件:3时间:42秒 重新启动阶段#:41 [PDB1]文件:1时间:2秒 ****************** Catproc SQL ****************** 并行阶段#:42 [PDB1]文件:13时间:116秒 重新启动阶段#:43 [PDB1]文件:1时间:1秒 并行阶段:44 [PDB1]文件:11时间:10秒 重新启动阶段#:45 [PDB1]文件:1时间:1秒 并行阶段:46 [PDB1]文件:3时间:8秒 重新启动阶段#:47 [PDB1]文件:1时间:1秒 *************最终的Catproc脚本************ 串行阶段#:48 [PDB1]文件:1时间:16s 重新启动阶段#:49 [PDB1]文件:1时间:0秒 **************最终RDBMS脚本************** 串行阶段#:50 [PDB1]文件:1时间:9s ************升级组件开始*********** 串行阶段#:51 [PDB1]文件:1时间:7s 重新启动阶段#:52 [PDB1]文件:1时间:1秒 **********升级Java和非Java ********* 串行阶段#:53 [PDB1]文件:2时间:23s *****************升级XDB **************** 重新启动阶段#:54 [PDB1]文件:1时间:1秒 串行阶段#:56 [PDB1]文件:3时间:12s 串行阶段#:57 [PDB1]文件:3时间:9s 并行阶段:58 [PDB1]文件:10时间:10秒 并行阶段:59 [PDB1]文件:25时间:12秒 串行阶段#:60 [PDB1]文件:4时间:14秒 串行阶段#:61 [PDB1]文件:1时间:0秒 串行阶段#:62 [PDB1]文件:32时间:10秒 串行阶段#:63 [PDB1]文件:1时间:0秒 并行阶段:64 [PDB1]文件:6时间:13秒 串行阶段#:65 [PDB1]文件:2时间:21秒 串行阶段#:66 [PDB1]文件:3时间:27秒 ****************升级ORDIM *************** 重新启动阶段#:67 [PDB1]文件:1时间:2秒 串行阶段#:69 [PDB1]文件:1时间:8s 并行阶段:70 [PDB1]文件:2时间:9s 重新启动阶段#:71 [PDB1]文件:1时间:2秒 并行阶段:72 [PDB1]文件:2时间:9s 串行阶段#:73 [PDB1]文件:2时间:8s *****************升级SDO **************** 重新启动阶段#:74 [PDB1]文件:1时间:1秒 串行阶段#:76 [PDB1]文件:1时间:8s 串行阶段#:77 [PDB1]文件:2时间:8s 重新启动阶段#:78 [PDB1]文件:1时间:1秒 串行阶段#:79 [PDB1]文件:1时间:8s 重新启动阶段#:80 [PDB1]文件:1时间:2秒 并行阶段:81 [PDB1]文件:3时间:9s 重新启动阶段#:82 [PDB1]文件:1时间:1秒 串行阶段#:83 [PDB1]文件:1时间:8s 重新启动阶段#:84 [PDB1]文件:1时间:2秒 串行阶段#:85 [PDB1]文件:1时间:8s 重新启动阶段#:86 [PDB1]文件:1时间:2秒 并行阶段:87 [PDB1]文件:4时间:9s 重新启动阶段#:88 [PDB1]文件:1时间:2秒 串行阶段#:89 [PDB1]文件:1时间:8s 重新启动阶段#:90 [PDB1]文件:1时间:1秒 序列号:91 [PDB1]文件:2时间:8s 重新启动阶段#:92 [PDB1]文件:1时间:2秒 串行阶段#:93 [PDB1]文件:1时间:6s 重新启动阶段#:94 [PDB1]文件:1时间:2秒 *******升级ODM,WK,EXF,RUL,XOQ ******* 串行阶段#:95 [PDB1]文件:1时间:6s 重新启动阶段#:96 [PDB1]文件:1时间:2秒 ***********最终组件脚本*********** 串行阶段#:97 [PDB1]文件:1时间:8s *************最终升级脚本************ 串行阶段#:98 [PDB1]文件:1时间:122秒 ******************* 移民 ****************** 串行阶段#:99 [PDB1]文件:1时间:6s ***结束PDB应用程序升级前关闭*** 串行阶段#:100 [PDB1]文件:1时间:7s 串行阶段#:101 [PDB1]文件:1时间:4秒 串行阶段#:102 [PDB1]文件:1时间:6s *****************升级后的******************** 串行阶段#:103 [PDB1]文件:1时间:117秒 **************** 总结报告 **************** 串行阶段#:104 [PDB1]文件:1时间:6s ***关机后结束PDB应用程序升级** 串行阶段#:105 [PDB1]文件:1时间:6s 串行阶段#:106 [PDB1]文件:1时间:5s 串行阶段#:107 [PDB1]文件:1时间:0s -------------------------------------------------- ---- 阶段[0-107]结束时间:[2020_03_06 14:58:28] 容器列表包括:[PDB1]排除:[无] -------------------------------------------------- ---- 总计时间:1561s [PDB1] 日志文件:(/home/oracle/logs/catupgrdpdb3*.log) 升级摘要报告位于: /home/oracle/logs/upg_summary.log 时间:1636s对于PDB 总计时间:1636s 日志文件:(/home/oracle/logs/catupgrd*.log) 总计升级时间:[0d:0h:27m:16s]
复制
之后,我重新编译。
sqlplus /作为sysdba SQL> Alter可插入数据库PDB1打开; SQL> alter可插入数据库PDB1保存状态; SQL>退出 $ ORACLE_HOME / perl / bin / perl $ ORACLE_HOME / rdbms / admin / catcon.pl -n 1 -c'PDB1'-e -b utlrp -d $ ORACLE_HOME / rdbms / admin utlrp.sql
复制
做完了
最后,我可以调整升级的PDB的时区。由于catcon.pl不提供直接输出,因此以后我将不得不检查日志文件。
$ $ ORACLE_HOME / perl / bin / perl $ ORACLE_HOME / rdbms / admin / catcon.pl -n 1 -c'PDB1'-l / home / oracle / logs -b utltz_upg_check -d $ ORACLE_HOME / rdbms / admin utltz_upg_check.sql catcon :: set_log_file_base_path:所有与catcon相关的输出都将写入[/home/oracle/logs/utltz_upg_check_catcon_31522.lst] catcon :: set_log_file_base_path:catcon:有关脚本生成的输出,请参见[/home/oracle/logs/utltz_upg_check*.log]文件 catcon :: set_log_file_base_path:catcon:请参见[/home/oracle/logs/utltz_upg_check_*.lst]文件以获取假脱机文件(如果有) catcon.pl:成功完成
复制
$ $ ORACLE_HOME / perl / bin / perl $ ORACLE_HOME / rdbms / admin / catcon.pl -n 1 -c'PDB1'-l / home / oracle / logs -b utltz_upg_apply -d $ ORACLE_HOME / rdbms / admin utltz_upg_apply.sql catcon :: set_log_file_base_path:所有与catcon相关的输出都将写入[/home/oracle/logs/utltz_upg_apply_catcon_31826.lst] catcon :: set_log_file_base_path:catcon:请参阅[/home/oracle/logs/utltz_upg_apply*.log]文件以获取脚本生成的输出 catcon :: set_log_file_base_path:catcon:请参阅[/home/oracle/logs/utltz_upg_apply_*.lst]文件以获取假脱机文件(如果有) catcon.pl:成功完成
复制
最终检查:
sqlplus /作为sysdba
复制
更改系统集“ _exclude_seed_cdb_view” = false范围=两者; 从容器(SYS.PROPS $)中选择value $,con_id,其中NAME ='DST_PRIMARY_TT_VERSION'的顺序为2; VALUE $ CON_ID ------ ------ 32 1 32 2 32 3
复制
可以了,好了!
原文链接:https://mikedietrichde.com/2020/03/06/upgrade-testing-online-clone-a-pdb-to-19c/