Oracle-补丁数据字典更新失败案例

问题背景:

        用户一套Oracle 19.19集群进行RU补丁升级,将补丁升级到19.23版本。在完成GI和RDBMS软件升级之后,通过datapatch工具进行数据库数据字典补丁升级时出现以下报错。

Error reading descriptor from registry: Couldn't open encmap gbk.enc:No such file or directory at /u01/app/oracle/product/19.0.0.0/db_1/perl/lib/site_perl/5.38.2/x86_64-linux-thread-multi/XML/Parser.pm line 187.

XML::Simple called at /u01/app/oracle/product/19.0.0.0/db_1/sqlpatch/sqlpatch.pm line 8803.

问题分析:

        查看datapatch工具的执行日志sqlpatch_invocation.log,日志在目录

$ORACLE_BASE/cfgtoollogs/sqlpatch/sqlpatch_xxxx_date/下。

        可以看到datapatch在进行更新前的检查,发现patch:30557433的文件信息不存在。在进行数据字典更新时,datapatch会去检查registry$sqlpatch里面的数据库补丁信息,并根据补丁id检查sqlpatch目录下的文件信息,确认是否是interim临时补丁类型,对于interim的补丁更新数据字典时,需要先执行回滚操作在数据库的registry$history和registry$sqlpatch里面插入补丁回滚更新记录。

        patch:30557433对应的是19.6.0.0的RU补丁,补丁所在的文件目录为

/u01/app/oracle/product/19.0.0.0/db_1/sqlpatch/30557433。通过检查发现,集群全部节点都没有该文件目录。

        那patch:30557433的记录是从哪里来的呢?往下翻sqlpatch的日志,可以看到补丁是从PDB里面查询得到的,当前数据库为CDB模式。

        进一步进到数据库查询registry$sqlpatch信息,检查root根容器的补丁信息,只有19.19的RU和OJVM补丁信息。

        而检查PDB的补丁信息,可以看到全部PDB包含PDB$SEED除了19.19的RU和OJVM补丁信息,还有19.6的RU补丁信息,这里CDB和PDB的registry$sqlpatch信息出现了不一致,此外,可以确定patch:30557433的记录是通过读取PDB里面数据字典的补丁信息获取的。

        确认检查报错的补丁信息读取来源之后,接下来,我们开始分析以下问题,19.6的补丁又是从哪里来的以及CDB和PDB的数据库数据字典补丁信息为什么不一致。

        从软件目录ORACLE_HOME里面的sqlpatch信息以及用户记录的该集群补丁升级历史,可以确认数据库软件层的补丁升级历史为19.7(30869156)->19.19(35042068)->19.23,并没有升级过19.6补丁。

        而从数据库的补丁数据字典升级历史registry$history信息,我们可以看到补丁升级的历史为19.6(30557433)->19.19(35042068)->19.23,这与软件层的补丁升级历史并不一致,主要区别在19.6和19.7补丁。

        进一步检查数据库的alert日志,可以发现数据库曾是备库类型,后面通过主备切换方式切换成新的主库,也就是说数据库的数据字典补丁前部分信息是从之前旧主库复制过来的,因此,没有包含19.7的RU补丁信息,但包含了19.6的RU补丁信息。

        而根容器和pdb的补丁数据字典信息registry$sqlpatch不一致,从数据库的registry$history可以确认CDB和PDB至少都执行过19.6,19.19的数据字典更新,所以应该至少包含19.6,19.19的补丁信息,但根容器却没有包含19.6的补丁信息,推测有可能是之前人为操作重建或是覆盖了数据库的补丁数据字典表信息所导致。

问题修复:

       有两种复方式:​

        1 从其他环境拷贝19.6的sqlpatch信息到ORACLE_HOME的sqlpatch目录下,让datapatch可以顺利完成检查,再重新执行数据字典更新。

        2 手动执行删除PDB里面的表registry$sqlpatch的19.6 RU补丁信息,避免datapatch工具去查找patch:30557433的文件信息,再重新执行数据字典更新。

Tip:欢迎关注公众号:勇敢牛牛的笔记,超100+的原创内容,每周不定期更新数据库技术文章。

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值