首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用保留索引约束关系导入Oracle数据库

问如何用保留索引约束关系导入Oracle数据库
EN

Stack Overflow用户
提问于 2014-05-21 13:51:47
回答 1查看 525关注 0票数 2

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

代码语言:javascript
复制
alter table abc add constraint uk_name unique (name);

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

代码语言:javascript
复制
alter table abc drop constraint uk_name;

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

现在,在执行数据库导入索引时,先创建约束,然后删除约束之后,相应的索引就不会被删除--这会导致数据库的不同状态,如果有人写了一些迁移脚本,它们就会留下未删除的索引,这可能会导致错误。有一个可能的解决办法,而不是:

代码语言:javascript
复制
alter table abc drop constraint uk_name;

写:

代码语言:javascript
复制
alter table abc drop constraint uk_name keep index;
drop index uk_name;

但是,我想知道是否有可能,以及如何通过保留这种约束-索引关系来执行数据库导入?因此,如果在数据库A上认为,在删除约束之后,索引将被自动删除,而不是在导入到数据库B之后,同样的索引应该保持不变。Oracle数据库是如此成熟的技术,应该是可能的,而且不需要麻烦的解决办法,对吗?

编辑:

我发现不是

代码语言:javascript
复制
alter table abc drop constraint uk_name keep index;
drop index uk_name;

你只需写:

代码语言:javascript
复制
alter table abc drop constraint uk_name drop index;

这是一个不那么丑陋的解决办法。

EN

回答 1

Stack Overflow用户

发布于 2014-05-21 14:49:02

我不想麻烦字典,但这里有一个可定位的标志,可以用来判断索引是否是自动创建的:

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

另一个解决办法是

  1. 降约束
  2. 如果constriant使用的索引仍然存在于字典中-删除它
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23785265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档