查看: 3658|回复: 10

10g/11g的bug?:-)

[复制链接]
论坛徽章:
0
发表于 2009-1-5 12:07 | 显示全部楼层 |阅读模式

SQL> create table t as select * from all_objects;

SQL> alter table t add constraint pk_t primary key (object_id);

表已更改。

SQL> create index idx_t on t(object_id,owner);

索引已创建。

SQL> alter table t disable  primary key;

表已更改。

SQL> alter table t enable  primary key;

表已更改。

SQL> drop index idx_t;
drop index idx_t
           *
第 1 行出现错误:
ORA-02429: 无法删除用于强制唯一/主键的索引
论坛徽章:
404
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2009-1-5 12:58 | 显示全部楼层
SQL> alter table t disable  primary key;

Table altered.

SQL> drop index idx_t;

Index dropped.

SQL> alter table t enable  primary key;

Table altered.

使用道具 举报

回复
论坛徽章:
23
生肖徽章2007版:虎
日期:2008-01-02 17:35:532010年世界杯参赛球队:日本
日期:2010-05-27 15:15:36生肖徽章2007版:虎
日期:2009-03-10 21:13:27生肖徽章2007版:虎
日期:2008-10-20 20:39:19生肖徽章2007版:虎
日期:2008-10-14 22:25:42生肖徽章2007版:虎
日期:2008-10-11 15:40:21生肖徽章2007版:虎
日期:2008-10-10 12:52:22生肖徽章2007版:虎
日期:2008-10-09 11:14:10生肖徽章2007版:虎
日期:2008-10-06 13:54:36生肖徽章2007版:虎
日期:2008-10-05 18:58:33
发表于 2009-1-5 14:00 | 显示全部楼层
alter table t drop  primary key;
drop index idx_t;

使用道具 举报

回复
认证徽章
论坛徽章:
67
现任管理团队成员
日期:2012-06-02 02:10:00ITPUB元老
日期:2012-09-12 14:06:14ITPUB社区千里马徽章
日期:2013-06-09 10:15:34季节之章:冬
日期:2012-09-04 11:05:30季节之章:春
日期:2012-09-05 09:20:36优秀写手
日期:2013-12-18 09:29:09马上有房
日期:2014-04-10 13:35:362014年新春福章
日期:2014-04-14 09:54:08马上有车
日期:2014-02-28 16:43:13马上加薪
日期:2014-02-19 11:55:14
发表于 2009-1-5 14:08 | 显示全部楼层
呵呵,没这么多bug的

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2009-1-5 14:17 | 显示全部楼层
请仔细看一下我提出此题的用意,disable/enable primary key ,就不能删与它无关的普通索引,至于再如何删是另外一命题

使用道具 举报

回复
论坛徽章:
112
2008新春纪念徽章
日期:2008-02-13 12:43:03马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14马上有车
日期:2014-11-03 12:40:39沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31慢羊羊
日期:2015-03-09 16:15:39
发表于 2009-1-5 17:19 | 显示全部楼层
这不是能算是bug,Oracle就是这样的机制

Oracle can use an existing non-unique index of a table to enforce uniqueness,
either for UNIQUE or PRIMARY KEY constraints, provided that the columns
composing the constraint prefix the composite index.

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2009-1-5 17:22 | 显示全部楼层
原帖由 xjwei_no1 于 2009-1-5 12:07 发表

SQL> create table t as select * from all_objects;

SQL> alter table t add constraint pk_t primary key (object_id);

表已更改。
这一步Oracle自动创建了一个OBJECT_ID上的唯一索引

SQL> create index idx_t on t(object_id,owner);

索引已创建。
手工创建了一个索引,且索引列包含了OBJECT_ID列

SQL> alter table t disable  primary key;

表已更改。
Oracle在disable主键的同时会删除自动创建的索引

SQL> alter table t enable  primary key;

表已更改。
由于主键所在列上存在一个可用的索引,所以Oracle这次不会再重建一个新的索引了,而是使用现有的这个INX_T索引

SQL> drop index idx_t;
drop index idx_t
           *
第 1 行出现错误:
ORA-02429: 无法删除用于强制唯一/主键的索引

现在这个错误很好理解了吧,由于主键的存在,所以这个索引无法删除。这并不是Oracle的bug,而是你对Oracle的机制不是很理解

使用道具 举报

回复
论坛徽章:
30
生肖徽章:马
日期:2007-03-01 11:03:29奥迪
日期:2013-12-21 17:12:36马上有钱
日期:2014-02-22 21:52:26马上有钱
日期:2014-03-24 21:24:59马上有车
日期:2014-04-27 20:14:42ITPUB元老
日期:2014-08-01 17:12:17授权会员
日期:2014-08-01 17:12:49青年奥林匹克运动会-自行车
日期:2014-09-10 10:14:58马上有车
日期:2014-12-18 16:13:59马上加薪
日期:2014-12-23 19:40:56
发表于 2009-1-7 15:58 | 显示全部楼层
ddddd

使用道具 举报

回复
论坛徽章:
281
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-01-04 11:51:22蛋疼蛋
日期:2011-12-29 07:37:22迷宫蛋
日期:2011-12-26 14:19:41茶鸡蛋
日期:2011-11-17 09:20:52茶鸡蛋
日期:2011-11-10 22:42:38ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15茶鸡蛋
日期:2011-10-24 09:48:48ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47
发表于 2009-1-7 16:05 | 显示全部楼层
学习~~

使用道具 举报

回复
论坛徽章:
404
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2009-1-7 16:05 | 显示全部楼层
原帖由 yangtingkun 于 2009-1-5 17:22 发表

现在这个错误很好理解了吧,由于主键的存在,所以这个索引无法删除。这并不是Oracle的bug,而是你对Oracle的机制不是很理解

最好同时显示对应主键约束自动创建索引的名字就好理解了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表