我正在使用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
导入很顺利,但是当我检查了所有虚拟列时,它们被破坏了。该列的DATA_TYPE是错误的,它是NUMBER
而不是VARCHAR(36)
,并且原始源模式中的DATA_DEFAULT函数不在导入的模式中,它只是null,当我查看在实际行中,该虚拟列中的值为“44”,即该列的列ID。
有谁知道为什么虚拟列没有正确迁移?我在导出架构时是否需要指定一些内容?或者这是Oracle的错误吗?
答案 0 :(得分:2)
在oracle网站上看看BUG#10186633和BUG#14506804,导入虚拟列时存在问题。
问题是在创建Function之前导入时创建了表,我相信解决方法是首先使用正确的定义创建表,然后使用IGNORE标志运行导入
答案 1 :(得分:0)
我发现了这一点,希望它适用于给定的场景(没有用户定义的功能):
文档ID 1983171.1,BUG:18153657:在12c数据库中导入时,虚拟列属性发生了变化(但在12c之前的版本中也会出现)。
该场景是虚拟列以及“非空”约束,他们提到的原因是在处理虚拟列上的“非空”约束。
作为解决方法,它们可以在导入期间临时删除“非空”约束。 还有一个补丁。