2017-05-19 3 views
0

Wenn ich versuche, Partitionen in Oracle fallen zu lassen, sehe ich den unten genannten Fehler.Constraints Fehler während Partitionen Drop

Fehlermeldung: SQL-Fehler: ORA-02266 - „unique/Primärschlüssel in der Tabelle durch aktiviert Fremdschlüssel referenziert“ * Ursache: Es wurde versucht, eine Tabelle mit einzigartigen oder Primärschlüssel durch Fremdschlüssel referenziert gestutzt in einer anderen Tabelle aktiviert. Andere nicht zulässige Operationen sind das Löschen/Abschneiden einer Partition einer partitionierten Tabelle oder einer ALTER TABLE EXCHANGE PARTITION. * Aktion: Deaktivieren Sie die Fremdschlüsseleinschränkungen in anderen Tabellen, bevor Sie die obigen Vorgänge die Tabelle ausführen. Sie können sehen, welche Constraints auf eine Tabelle verweisen, indem Sie den folgenden Befehl ausgeben: SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = "tabnam";

Ich habe einige Systemeinschränkungen und wenige von mir entwickelt, so muss ich die Systemeinschränkungen deaktivieren, um auch Partitionen zu löschen, angefügt ist der Screenshot der Einschränkungen. enter image description here

+0

Die Frage, wie Oracle klar sagt, mit _unique oder Primärschlüssel durch Fremdschlüssel in einer anderen table_ aktiviert referenziert ist , nicht 'NOT NULL' Einschränkungen. Auch, bitte [keine Screenshots] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/ 285557 # 285557) – Aleksej

+0

muss ich die Primärschlüsseleinschränkungen deaktivieren und was, wenn eine andere Tabelle Fremdschlüsseleinschränkungen hat, die sich auf diese Tabelle beziehen, muss ich das auch deaktivieren. –

Antwort

0

Ich glaube, ein Beispiel wird klären. Sagen wir, ich habe eine master Tabelle, verteilt und eine detail Tabelle, die master mit einem FK verweist:

SQL> create table master(col1 number, part number) 
    2 partition by list(part) (
    3  partition p0 values (0), 
    4  partition p1 values (1), 
    5  partition p2 values (2) 
    6 ); 

Table created. 

SQL> alter table master add constraint master_pk primary key (col1, part); 

Table altered. 

SQL> create table detail(col1 number, part number, col2 varchar2(100)); 

Table created. 

SQL> alter table detail add constraint master_detail_fk foreign key (col1, part) references master (col1, part); 

Table altered. 

ich einige Zeilen in beiden Tabellen einzufügen, nach der Einschränkung FK:

SQL> insert into master (col1, part) select level, mod(level, 3) from dual connect by level < 10; 

9 rows created. 

SQL> insert into detail (col1, part, col2) select level, mod(level, 3), 'something' from dual connect by level < 10; 

9 rows created. 

Now I versuchen, eine Partition in dem Master fallen:

:

SQL> alter table master drop partition p1; 
alter table master drop partition p1 
* 
ERROR at line 1: 
ORA-02266: unique/primary keys in table referenced by enabled foreign keys 

ich den FK vor dem Ablegen zu handhaben müssen

SQL> alter table detail disable constraint master_detail_fk ; 

Table altered. 

SQL> alter table master drop partition p1; 

Table altered. 

Natürlich, wenn ich referenzierten Zeilen fallen gelassen, nicht die Einschränkung validiert werden:

SQL> alter table detail enable validate constraint master_detail_fk ; 
alter table detail enable validate constraint master_detail_fk 
               * 
ERROR at line 1: 
ORA-02298: cannot validate (SIUCREDITO.MASTER_DETAIL_FK) - parent keys not 
found 

SQL> alter table detail enable novalidate constraint master_detail_fk ; 

Table altered. 

SQL>