加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ORA-02429: 无法删除用于强制唯一/主键的索引

(2017-10-24 11:07:58)
标签:

ora-02429错误处理

ora-02429

ora-02429无法删除索

无法删除唯一索引

无法删除主键索引

分类: Oracle数据库
一、错误信息
ORA-02429: 无法删除用于强制唯一/主键的索引
ORA-02429: <wbr>无法删除用于强制唯一/主键的索引

二、原因分析
    在表中某个字段上建立了普通索引,再在该字段上添加唯一约束或主键约束,此时通过drop语句删除该索引,会报“ORA-02429: 无法删除用于强制唯一/主键的索引”的错误。

三、解决问题
删除该索引,意味着相关列上的约束将失效。所以,要先将相关列上的约束删除,然后再删除相关的索引。

四、示例
4.1、唯一索引示例
--创建测试表
drop table my_idx_test;
create table my_idx_test
as
select *
from user_objects
where object_id is not null

--创建普通索引
create index idx_object_id on my_idx_test(object_id);

--添加唯一约束
alter table my_idx_test add constraint uni_object_id unique(object_id);

--删掉索引,报错
drop index idx_object_id;
ORA-02429: <wbr>无法删除用于强制唯一/主键的索引

--先删掉唯一约束,才能删掉索引
alter table my_idx_test drop constraint uni_object_id;
drop index idx_object_id;


4.2、主键索引示例
--创建测试表
drop table my_idx_test;
create table my_idx_test
as
select *
from user_objects
where object_id is not null

--创建普通索引
create index idx_object_id on my_idx_test(object_id);

--添加主键约束
alter table my_idx_test add constraint prikey_object_id primary key(object_id);

--删掉索引,报错
drop index idx_object_id;
ORA-02429: <wbr>无法删除用于强制唯一/主键的索引

--先删掉主键约束,才能删掉索引
alter table my_idx_test drop constraint prikey_object_id;
drop index idx_object_id;


五、查询表的索引及约束
--查询指定表的索引情况
select t.index_name,t.index_type,t.uniqueness,t.status,t.num_rows,t.last_analyzed
from user_indexes t
where t.table_name='MY_IDX_TEST';

--查询指定表的索引引用列的情况
select t.index_name,t.column_name,t.column_position
from user_ind_columns t
where table_name='MY_IDX_TEST'
order by t.index_name,t.column_position

--查询指定表的约束情况
select r.owner,r.constraint_name,r.constraint_type,r.r_owner,r.r_constraint_name,r.status,r.last_change,r.index_owner,r.index_name
from user_constraints r
where r.table_name='MY_IDX_TEST';


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有