TEMP表空间未建导致XMLTYPE类型内容读取错误

今天一用户环境说所有数据表中的xmltype类型,通过查询语句看到如下结果:


例如表名ZLMXXXX的表中配置这个字段是SYS.XMLTYPE,可以看到这个字段所有值都是<Value Error>错误信息,而不报错的是因为该字段是‘空’无内容的原因,仔细询问用户该问题出现前是否做了什么操作,得到的回答是该数据库由于硬件变更,进行了迁移,由于数据库本身比较小,且迁移的环境平台完全一样,因此迁移的方式最原始简单的是‘冷备份’恢复,但是迁移过来就发现所有XMLTYPE内容的字段都出现错误,而其他字段都没有问题。

问题排查

一.检查sys.xmltype TYPE是否缺失或者有效

由于所有XMLTYPE字段都无法访问,首先怀疑sys.xmltypeTYPE包是否在迁移的过程中损坏或者失效,如果该TYPE出现问题,肯定会导致所有该TYPE对象无法访问,检查对象状态:


         这里我们看到没有问题,如果出现问题,我们可以通过执行catproc.sql脚本进行修复,具体操作如下:

Run catproc.sql andutlrp.sql as SYS.
sqlplus "/ assysdba"
startup upgrade
spool validate.log
@?/rdbms/admin/catproc.sql
@?/rdbms/admin/utlrp
spool off
shutdown immediate
startup

         显然我们这里没有问题,不需要进行修复,接下来该怎么办呢?

二.迁移环境检查

由于用户是采用冷备份恢复的方式进行迁移,按道理是最稳妥的迁移方式,如果环境一致,不太会出现问题,那么估计是迁移恢复过程中出现了环境差异,我仔细检测了操作系统、数据库参数等,都没什么重大的发现,在检测数据文件的时候,发现因为安装路径的限制数据文件的路径进行了变更,进行检测v$datafile也没什么问题,在检查v$tempfile视图的时候,发现该视图下无内容,如下:


再次询问用户的迁移过程,告知由于源端和目标端数据文件路径变更,其采用再源端生成控制文件脚本,修改路径后,然后在目标端重建控制文件的方式进行的迁移,这种方法在处理路径不一致的恢复是可行的,没有错,但是核对其创建过程中发现,其忘了临时表空间文件的添加,因为在控制文件trace脚本中,除了创建控制文件本身,后面还有如下这句:

-- Other tempfiles may require adjustment.

ALTER TABLESPACE TEMP ADD TEMPFILE'D:\APP\ADMINISTRATOR\ORADATA\YDTEST\TEMP01.DBF'

     SIZE176160768  REUSE AUTOEXTEND OFF;

ALTER TABLESPACE ZLTOOLSTMP ADD TEMPFILE'D:\APP\ADMINISTRATOR\ORADATA\YDTEST\ZLTOOLSTMP'

     SIZE467664896  REUSE AUTOEXTEND OFF;

ALTER TABLESPACE SMITMP ADD TEMPFILE'D:\APP\ADMINISTRATOR\ORADATA\YDTEST\SMITMP01.DBF'

     SIZE52428800  REUSE AUTOEXTEND OFF;

-- End of tempfile additions.

更改路径后,补充执行这几句语句,再次查询v$tempfile视图,有了结果,如下:


         最后我们再回到之前的表,查看XMLTYPE字段已经正常,问题彻底解决,如下:


关键知识点

         sys.xmltype:该TYPE可以通过脚本重建,如果一旦失效,会导致所有XMLTYPE内容失效。另外临时表同样影响XMLTYPE对象的使用。


申明:原创,转帖请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值