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 upgradespool validate.log@?/rdbms/admin/catproc.sql@?/rdbms/admin/utlrpspool offshutdown immediatestartup

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

二.迁移环境检查

由于用户是采用冷备份恢复的方式进行迁移,按道理是最稳妥的迁移方式,如果环境一致,不太会出现问题,那么估计是迁移恢复过程中出现了环境差异,我仔细检测了操作系统、数据库参数等,都没什么重大的发现,在检测数据文件的时候,发现因为安装路径的限制数据文件的路径进行了变更,进行检测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对象的使用。

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

到尽头,也许快乐,或有时孤独,如果心在远方,

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

相关文章:

你感兴趣的文章:

标签云: