我正在使用Oracle 11g Xe。我有一个架构,其中包含一些具有虚拟列的表。虚拟列在模式中看起来很好,并且行为与预期一致。
我使用以下命令导出了该架构的转储:
expdp SYSTEM/SYSTEM schemas=TEST_SCHEMA dumpfile=TEST_SCHEMA.dpdmp
并使用以下命令将其导入到另一个数据库:
impdp SYSTEM/system SCHEMAS=TEST_SCHEMA DIRECTORY=dmpdir DUMPFILE=TEST_SCHEMA-2016.DPDMP TABLE_EXISTS_ACTION=replace LOGFILE=TEST_SCHEMA.log
导入进行得很顺利,但当我检查所有虚拟列时,它们都被破坏了。列的数据类型错误,它是
NUMBER
而不是VARCHAR(36)
,原始源架构中的数据默认函数不在导入的架构中,它只是空的,当我查看实际行时,该虚拟列中的值是“44”,这是该列的列ID。有人知道为什么虚拟列没有正确迁移吗?导出架构时是否需要指定内容?还是甲骨文的错误?
最佳答案
请看Oracle网站上的Bug 10186633和Bug 14506804,导入虚拟列有问题。
问题是,在创建函数之前,表是在导入时创建的,我认为解决方法是先创建具有正确定义的表,然后使用ignore标志运行导入