2017-05-19 21 views
0

oracleでパーティションを削除しようとすると、以下のエラーが発生します。パーティション中の制約エラーDrop

エラーレポート: SQLエラー:ORA-02266 - 「使用可能な外部キーによって参照されるテーブル内で一意/主キー」 *原因:外部キーによって参照される一意または 主キーを持つテーブルを切り捨てるしました別のテーブルで有効になります。 他の操作では、 パーティションテーブルまたはALTER TABLE EXCHANGE PARTITIONのパーティションを削除または切り捨てることはできません。 *処置:上記の操作を実行する前に、他の表の 外部キー制約を無効にしてください。次の コマンドを発行して、 の制約がテーブルを参照していることを確認できます。 SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = "tabnam";

私はシステムの制約が少なく、開発者も少ないので、システムの制約を無効にしてパーティションを削除する必要があります。添付の​​スクリーンショットは制約のスクリーンショットです。 enter image description here

+0

問題は、_uniqueまたは別のtable_で使用可能な外部キーが参照する主キーであります'NOT NULL'制約ではありません。また、[スクリーンショットではない](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/ 285557#285557) – Aleksej

+0

プライマリキーの制約を無効にする必要があります。また、このテーブルを参照する別のテーブルに外部キー制約がある場合は、これを無効にする必要があります。 –

答えて

0

例が明確になると思います。 FK制約に応じて、

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. 

が、私は両方のテーブルのいくつかの行を挿入します:私はmasterテーブル、パーティション、およびFKでmasterを参照するdetailテーブルを持っていると言う

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. 

今、私はマスターでパーティションを削除しよう:

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 

は私がドロップする前にFKを処理する必要があります。

もちろん
SQL> alter table detail disable constraint master_detail_fk ; 

Table altered. 

SQL> alter table master drop partition p1; 

Table altered. 

は、私が参照行を落とした場合、制約が検証されることはありません:Oracleははっきり言うよう

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>