主键列如何在Oracle中具有重复值?

Kem*_*rcı 6 oracle primary-key

我刚刚尝试将Oracle DB导入另一个,它给出了一个错误,告诉我在主键列中找到了重复的值.然后我检查了源表,是的确实PK中存在重复值,并且检查PK已启用且正常.现在我想知道这怎么可能发生.

编辑:我发现索引处于不可用状态.我不知道它是怎么发生的,只是发现了这个:http://asktom.oracle.com/pls/asktom/f?p = 100:11:0 ::::P11_QUESTION_ID: 1859798300346695894

Vin*_*rat 7

假设您的主键确实在此列上定义并启用,您可以检查它是否已经过验证.只有经验证的约束才能保证Oracle对所有行都是真的.

这是一个带有重复值的未经验证的主键的场景:

SQL> DROP TABLE t;     
Table dropped

SQL> CREATE TABLE t (ID NUMBER);     
Table created

SQL> INSERT INTO t VALUES (1);     
1 row inserted

SQL> INSERT INTO t VALUES (1);     
1 row inserted

SQL> CREATE INDEX t_id_idx ON t(ID);     
Index created

SQL> ALTER TABLE t ADD CONSTRAINT pk_id PRIMARY KEY (ID) NOVALIDATE;     
Table altered

SQL> SELECT * FROM t;

        ID
----------
         1
         1

SQL> SELECT constraint_type, status, validated
  2    FROM user_constraints
  3   WHERE constraint_name = 'PK_ID';

CONSTRAINT_TYPE STATUS   VALIDATED
--------------- -------- -------------
P               ENABLED  NOT VALIDATED
Run Code Online (Sandbox Code Playgroud)

更新:

一种可能的解释是直接路径加载(来自SQL*Loader)使您的唯一索引处于具有重复主键的不可用状态.