Linux Oracle 11g用Datapump迁移Schema到Windows 19c报错如何解决
Oracle 11g跨版本导入19c ORA-00904错误解决方案
错误根因
报错中前缀为SYS_STS的无效标识符是Oracle 11g生成的统计信息相关内部隐藏列,跨大版本导入时19c无法兼容旧版本的统计信息格式,导致表创建失败。
第一步:修正impdp命令语法错误
你当前使用的impdp命令重复声明了DIRECTORY参数,属于语法错误:
- 若转储文件存放在
TEMPDIR目录对象、日志需要输出到NEW目录对象,正确写法是将目录对象前缀加到对应文件名前,不需要重复写DIRECTORY参数:DUMPFILE=TEMPDIR:file.dmp LOGFILE=NEW:file.log - 原导出命令仅导出了A/B/C/D/E五个Schema,不需要使用
FULL=y参数,直接指定SCHEMAS=A,B,C,D,E即可,避免导入不必要的系统对象。
第二步:添加核心兼容参数
导入时添加*EXCLUDE=STATISTICS*参数,跳过旧库统计信息导入,是解决本次报错的核心配置:
修正后的完整导入命令参考:
impdp username/pwd DUMPFILE=TEMPDIR:file.dmp LOGFILE=NEW:file.log SCHEMAS=A,B,C,D,E EXCLUDE=STATISTICS
可选适配参数
如果调整后仍存在兼容性报错,可以额外添加VERSION=11.2参数,强制impdp按照11g版本格式解析dump文件:
impdp username/pwd DUMPFILE=TEMPDIR:file.dmp LOGFILE=NEW:file.log SCHEMAS=A,B,C,D,E EXCLUDE=STATISTICS VERSION=11.2
导入后收尾操作
导入完成后在19c库重新收集对应Schema的统计信息,性能和适配性都优于直接导入旧库的统计信息:
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME=>'替换为实际Schema名', CASCADE=>TRUE);
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

