使用虚拟列导出架构

时间:2016-08-15 10:09:36

标签: database oracle import

我正在使用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的错误吗?

2 个答案:

答案 0 :(得分:2)

在oracle网站上看看BUG#10186633和BUG#14506804,导入虚拟列时存在问题。

问题是在创建Function之前导入时创建了表,我相信解决方法是首先使用正确的定义创建表,然后使用IGNORE标志运行导入

答案 1 :(得分:0)

我发现了这一点,希望它适用于给定的场景(没有用户定义的功能):

文档ID 1983171.1,BUG:18153657:在12c数据库中导入时,虚拟列属性发生了变化(但在12c之前的版本中也会出现)。

该场景是虚拟列以及“非空”约束,他们提到的原因是在处理虚拟列上的“非空”约束。

作为解决方法,它们可以在导入期间临时删除“非空”约束。 还有一个补丁。