暂无图片
oracle 主键唯一索引,约束一直生效的,索引状态为有效。但有重复值。什么原因呢?
我来答
分享
马老师r
2020-12-03
oracle 主键唯一索引,约束一直生效的,索引状态为有效。但有重复值。什么原因呢?
暂无图片 5M

oracle 主键唯一索引,约束一直生效的,索引状态为有效。但有重复值。什么原因呢?

dba_indexes的STATUS是VALID
dba_constraints VALIDATED VALIDATED

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
JiekeXu
暂无图片

按理来说主键唯一性,没有重复值,不应该出现这样的情况的,你的重复值是什么样的?会不会是由于插入值时带入的空格或者引号问题呢,请仔细检查一下。

暂无图片 评论
暂无图片 有用 0
打赏 0
姜殿斌

“主键唯一性,没有重复值“,你说的对。贴出具体细节和实验过程分析。

暂无图片 评论
暂无图片 有用 0
打赏 0
马老师r

案例1.png2.png3.png

暂无图片 评论
暂无图片 有用 0
打赏 0
肖杰

这个情况应该就是创建主键的时候加了novalidate参数,很容易模拟:

SQL> insert into test_index select * from test_index;

72940 rows created.

SQL> commit;

Commit complete.

SQL> alter table test_index add constraints pk_objname primary key (object_Name) novalidate;

Table altered.

SQL> select object_Name,count(*) from test_index group by object_Name having count(1) > 1 fetch first 10 rows only;

OBJECT_NAME            COUNT(*)
-------------------- ----------
C_COBJ#                       2
I_COLTYPE2                    2
SUBCOLTYPE$                   2
I_NTAB2                       2
I_NTAB3                       2
I_REFCON2                     2
EV$                           2
PDB_ALERT_SEQUENCE            2
IMORDERBY$                    2
SYS_IL0000000326C000          2
03$$

SQL> select CONSTRAINT_NAME,TABLE_NAME,CONSTRAINT_TYPE,STATUS from dba_constraints where table_name ='TEST_INDEX';

CONSTRAINT_NAME TABLE_NAME      C STATUS
--------------- --------------- - --------
PK_OBJNAME      TEST_INDEX      P ENABLED

复制
暂无图片 评论
暂无图片 有用 0
打赏 0
马老师r

SYS@orcl1>create table test_index as select * from dba_tables where rowNum<30;

Table created.

SYS@orcl1>insert into test_index select * from dba_tables where rowNum<28;

27 rows created.

SYS@orcl1>commit;

Commit complete.

SYS@orcl1> select TABLE_NAME ,count() from test_index group by TABLE_NAME having count(1) > 1 fetch first 10 rows only;
select TABLE_NAME ,count(
) from test_index group by TABLE_NAME having count(1) > 1 fetch first 10 rows only
*
ERROR at line 1:
ORA-00933: SQL command not properly ended

SYS@orcl1>select TABLE_NAME ,count(*) from test_index group by TABLE_NAME having count(1) > 1 ;

TABLE_NAME COUNT(*)


ICOL$ 2
TS$ 2
UNDO$ 2
FET$ 2
OBJ$ 2
USER$ 2
UET$ 2
SEG$ 2
CLU$ 2
IND$ 2
COL$ 2

TABLE_NAME COUNT(*)


PROXY_DATA$ 2
LOB$ 2
FILE$ 2
TSQ$ 2
COLTYPE$ 2

16 rows selected.

SYS@orcl1> alter table test_index add constraints pk_objname1 primary key (TABLE_NAME) novalidate;
alter table test_index add constraints pk_objname1 primary key (TABLE_NAME) novalidate
*
ERROR at line 1:
ORA-02437: cannot validate (SYS.PK_OBJNAME1) - primary key violated

SYS@orcl1>
执行不成功。报错的呀~

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
求问:Oracle存储过程提示缺失关键字怎么办?
回答 1
vsql:‘selectuseridfromso1.insuser’||regioncode||’wherebillid‘||billid||’';executeimmediatevsqlintous
sql链接服务器查询oracle数据结果和在oracle库中查询结果条目数不一致,可能是什么原因?
回答 2
已采纳
首先先要确定是不是连接的同一个&quot;数据库&quot;,其次要确定是不是同一个用户名。之前有遇到过此类问题的,在数据静态的情况下,往往都是分了读库和写库,或者是rac多实例出现了不同步的情况
emcc误报问题
回答 3
好的,谢谢盖总
Oracle的视图能使用索引吗?
回答 5
已采纳
视图实际上就是一个存放在数据库中的查询,当我们访问视图时,Oracle会把视图转成其所定义的查询。视图简化了最终用户或程序员的工作,但是优化器还是要去访问查询中涉及的每个基表。如果你直接查询基表时会用
oracle有没有存储引擎的概念?
回答 2
已采纳
Oracle不像MySQL有存储引擎概念;MySQL的innodb存储引擎跟Oracle机制比较像,都是事务型
oracle最新的版本是多少?
回答 3
20c啊,可以看一下杨长老的这个《Oracle19c和20c新特性解密杨廷琨》
ASM数据盘冗余模式修改
回答 2
谢谢章老师
oracle中同一条sql,再db中执行耗时时间再多少范围内属于合理的?
回答 1
这个是没有定论的,要看具体的业务场景,看你的sql复杂程度,耗时波动在15s都是可以接受的。
Oracle 故障诊断有哪些方法?有没有系统性的介绍?
回答 1
请问是宕机故障?还是性能引起的故障?还是硬件引起的故障?
udev配置好,asmca中识别不到,想请问下有思路不?oel8,oracle19c,gi已经装好
回答 3
1请检查grid的ORACLEHOME/bin下的oracle执行文件,同时oracle的ORACLEHOME/bin下的oracle文件;2需要确认udev服务启动reload相关的配置了