相关推荐recommended
工作随记:oracle 19c客户端通过service访问PDB异常问题
作者:mmseoamin日期:2023-12-14

文章目录

    • 概要
    • 技术测试分析
      • 测试1:
      • 测试2:
      • 测试3:
      • 测试4:
      • 解决方案:
        • 1、修改service
        • 2、修改pdb名称
        • 总结

          概要

          应用端访问提示错误信息为:VersionHelper异常!未将对象引用设置到对象的实例!

          工作随记:oracle 19c客户端通过service访问PDB异常问题,在这里插入图片描述,第1张

          此问题原因有以下三种情况:

          (1)未初始化对象:在使用对象之前,没有对其进行初始化或者分配内存。

          (2)对象已经被释放:在使用对象之前,对象已经被释放或者销毁。

          (3)对象被赋予了null值:在使用对象之前,将对象赋值为null,导致无法访问对象。

          因应用登录正常,那也就说明已连接数据库,很有可能是对象被赋予了null值,经过应用测试排查发现是在访问long字段中数据(sql语句)获取不到导致的。

          技术测试分析

          测试1:

          获取不到long字段中的值,那么通过将long类型转换为clob类型获取则没问题,那么这里我就开始怀疑兼容性问题了,因为oracle客户端配置为了19c的客户端。

          测试2:

          在服务端不做变更情况下使用11g客户端访问long字段没问题,那么很明显是客户端产生的影响。

          测试3:

          数据库服务器修改隐含参数_rowsets_enabled,进行排除法,实际我在alert中未发现600的报错,所以此问题可能性较小,实际测试与猜想一致,修改无效。

          alter system set “_rowsets_enabled”=FALSE scope=both sid=‘*’;

          工作随记:oracle 19c客户端通过service访问PDB异常问题,在这里插入图片描述,第2张

          测试4:

          因为数据库是19c多租户模式,添加了一条service指向了pdb,让应用测试将实例名换成pdb的实际名称测试居然通过了!

          现在就可以说真相浮出水面了:

          #之前的配置信息
          #加了和高可用相关的,追求现业务连续性时使用参数
          srvctl add service -db db19c -pdb pdb1 -service cxldb -preferred db19c1,db19c2 -notification TRUE -commit_outcome TRUE -retention 86400 -drain_timeout 300 -stopoption IMMEDIATE -replay_init_time 600 -failover_restore AUTO -failovertype AUTO
          srvctl start service -db db19c -service cxldb 
          

          解决方案:

          1、修改service

          #删除原先配置
          srvctl stop service -db db19c -service cxldb 
          srvctl remove service -db db19c -service cxldb 
          #新增service配置
          srvctl add service -db db19c -pdb pdbl -service cxldb -preferred db19c1,db19c2
          #启动service
          srvctl start service -db db19c -service cxldb 
          

          工作随记:oracle 19c客户端通过service访问PDB异常问题,在这里插入图片描述,第3张

          应用测试成功!

          2、修改pdb名称

          工作随记:oracle 19c客户端通过service访问PDB异常问题,在这里插入图片描述,第4张

          操作步骤:

          1、需要关闭其他节点

          2、在一个节点启用受限模式在cdb下修改

          3、然后关闭,重启以后其他节点也生效了

          总结

          工作随记:oracle 19c客户端通过service访问PDB异常问题,在这里插入图片描述,第5张

          工作随记:oracle 19c客户端通过service访问PDB异常问题,在这里插入图片描述,第6张