【问题标题】:How to import Oracle database with preserving index-constraint relation如何在保留索引约束关系的情况下导入 Oracle 数据库
【发布时间】:2014-05-21 13:51:47
【问题描述】:

在 Oracle 11g 中创建唯一约束时:

alter table abc add constraint uk_name unique (name);

然后还会在该列上创建一个唯一索引。当一个人放弃这个约束时:

alter table abc drop constraint uk_name;

那么相应的索引也会被删除。但是,当在约束之前单独创建索引并且稍后创建约束时 - 约束将正常工作并使用预先存在的索引,但是.. 当如上所述删除约束时,索引不会被删除。

现在,当进行数据库导入时,索引是在约束之前创建的,因此在删除约束后,相应的索引将不会被删除 - 这会导致数据库的不同状态,如果有人编写了一些迁移脚本,那么他们将保持未删除状态索引,这可能会导致错误。有一种可能的解决方法,而不是:

alter table abc drop constraint uk_name;

写:

alter table abc drop constraint uk_name keep index;
drop index uk_name;

但我想知道是否有可能以及如何在保留此约束索引关系的情况下执行数据库导入?因此,如果在数据库 A 上,它认为在删除约束后索引将被自动删除,而不是在导入到数据库 B 后相同。 Oracle 数据库是如此成熟的技术,它应该是可能的,并且不需要令人讨厌的变通方法,是吗?

编辑:

我发现不是

alter table abc drop constraint uk_name keep index;
drop index uk_name;

一个人可以写:

alter table abc drop constraint uk_name drop index;

这是一个不那么丑陋的解决方法..

【问题讨论】:

    标签: oracle import indexing constraints


    【解决方案1】:

    我不建议乱用字典,但这里有一个 posible 标志,可以用来知道索引是否是自动创建的:

    http://jonathanlewis.wordpress.com/2012/04/19/drop-constraint/

    另一种解决方法是

    1. 删除约束

    2. 如果 constriant 使用的索引仍然存在于字典中 - 删除它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-18
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多