客户金保数据库从10g转成11g,需要定期从生产库抽取数据到金保数据库中,考虑到生产库没有多余的空间存放expdp产生的文件,数据抽取采用远程exp及imp方式,从金保服务端直接exp到金保本地,导出过程中报错:
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 – 64bit Production With the Partitioning, Real Application Clusters, OLAP, Data Mining and Real Application Testing options 已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径… . . 正在导出表 AB01 EXP-00008: 遇到 ORACLE 错误 904 ORA-00904: “MAXSIZE”: invalid identifier . . 正在导出表 AB02 EXP-00008: 遇到 ORACLE 错误 1003 ORA-01003: no statement parsed . . 正在导出表 AB07 EXP-00008: 遇到 ORACLE 错误 904 ORA-00904: “MAXSIZE”: invalid identifier . . 正在导出表 AB09 EXP-00008: 遇到 ORACLE 错误 1003 ORA-01003: no statement parsed . . 正在导出表 AB14 EXP-00008: 遇到 ORACLE 错误 904 ORA-00904: “MAXSIZE”: invalid identifier . . 正在导出表 ABC1 EXP-00008: 遇到 ORACLE 错误 1003 |
从该报错信息上看,MAXSIZE字段报错,无效的定义,应该是oracle的内部机制出现错误,而之前的10g客户端exp都不存在问题,我们通过跟踪该导出过程,发现报错出现在以下的查询过程中:
ksedmp: internal or fatal error ORA-00904: “MAXSIZE”: invalid identifier Current SQL statement for this session: SELECT INIEXT, SEXT, MINEXT, MAXEXT, PCTINC, BLOCKS, LISTS, GROUPS, EXTENTS, PCACHE, TS_TYPE, TSNAME, ISONLINE, BLOCKSIZE, HSCOMPRESS,MAXSIZE FROM SYS.EXU9STOU WHERE FILENO = :1 AND BLOCKNO = :2 AND TSNO = :3 |
当我们使用exp工具导出数据的时候,需要访问SYS.EXU9STOU表以获取基本的对象存储参数,而从报错信息上也可以很明显的看出,查询对于MAXSIZE字段定义无效,我们分别比对11g及10g的关于该表的列信息:
从以上信息我们可以看到,从11g开始SYS.EXU9STOU表增加了字段
MAXSIZE NUMBER
从而导致该导出过程报错。
从以上结果看,该报错原因也就很明确了,通过11g的客户端导出10g的数据时无法导出的,也就是高版本客户端无法导出低版本数据库。如果需要通过exp,导出,建议还是采用与生产同版本的数据库客户端