某天晚上,同事在使用数据泵进行数据迁移的过程中遇到点问题,简要记录之。
1、概述
同事需要将一套19C数据库中的数据迁移到COMPATIBLE=12.1.0的数据库中,在使用数据泵导出的命令中添加了VERSION=12.1.0选项。在导出的日志中有几条ORA-39373报错信息。具体日志如下所示:
ORA-39373: cannot export SYSTEM_GRANT: ….. to version 12.1.0 due to long identifiers ORA-39373: cannot export SYSTEM_GRANT: ….. to version 12.1.0 due to long identifiers ORA-39373: cannot export INDEX_STATISTICS to version 12.1.0 due to long identifiers |
2、从报错的信息可以看出,由于指定了导出的版本(VERSION=12.1.0),而一些标识符太长,所以无法导出,SYSTEM_GRANT这个关键字,看样子是系统权限这部分的内容;INDEX_STATISTICS应该是索引的统计信息。
3、同事担心这个报错是否会导致迁移的数据不一致,这些报错其实可以在数据迁移后手动处理,也不会造成业务数据的不一致。数据迁移完成后,对比两个库中业务用户的系统权限部分,查看目标端的业务用户缺少哪些系统权限,手动赋予这些系统权限即可。而索引的统计信息,这本来就是需要在数据迁移完成后,手动重新收集的。
4、这个问题在MOS文章:12.2 DataPump Export (EXPDP) Using a Lower Export Client Fails Due To ORA-39373 (Doc ID 2369249.1)中也有说明(In 12.2 Oracle database, the maximum length of identifiers is increased to 128 bytes for most identifiers, up from 30 bytes in previous releases.)。MOS中的解决方案是对超过30个字符的数据对象进行重命名,然后重新导出。