Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

1

主题
1#
发表于 2013-8-16 15:37:06 | 查看: 3436| 回复: 2
oracle version 11.2.0.3.0 - 64bit

需要对含有数据的表添加一个唯一约束,由于历史数据比较混乱,少量数据的字段值相同,但是无法处理,
对新保存的记录要做唯一约束,选择 enable novalidate 对已经存在的数据不做检查,但实际却提示: 找到重复关键字。

以下下为实验步骤:

建立测试表
create table tt tablespace users as select object_id, object_name from user_objects where rownum < 10;

insert into tt select object_id, object_name from user_objects where rownum < 5;
commit;

查看有重复数据
select * from tt order by object_id;

添加约束失败
alter table tt add constraint idx_un_id unique(object_id)  enable novalidate ;
报错 ora-02299  找到重复关键字

继续
alter table tt add constraint idx_un_id unique(object_id)  disable novalidate ;  
添加成功,但是不符合要求,还能继续插入重复数据
insert into tt select object_id, object_name from user_objects where rownum < 5;
修改
alter table tt modify constraint idx_un_id enable  novalidate ;
报错  ora-02299  找到重复关键字
2#
发表于 2013-8-16 16:23:07
在创建约束之前先建一个索引就可以的
SQL> create index idx_id on tt(object_id);

Index created.

SQL> alter table tt add constraint idx__id unique(object_id)  enable novalidate;

Table altered.

SQL> insert into tt select object_id, object_name from user_objects where rownum < 5;
insert into tt select object_id, object_name from user_objects where rownum < 5
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.IDX__ID) violated

SQL> select * from tt;

OBJECT_ID OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
        20 ICOL$
        44 I_USER1
        28 CON$
        15 UNDO$
        29 C_COBJ#
         3 I_OBJ#
        25 PROXY_ROLE_DATA$
        39 I_IND1
        51 I_CDEF2
        20 ICOL$
        44 I_USER1

OBJECT_ID OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
        28 CON$
        15 UNDO$

回复 只看该作者 道具 举报

3#
发表于 2013-8-16 17:19:12
楼上正解,感谢 jason_yh 的回复!

看来唯一约束一定要有个索引段来支撑,学习了

回复 只看该作者 道具 举报

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

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2025-1-1 09:40 , Processed in 0.084522 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569