天天看點

truncate table時發生ORA-02266錯誤

        前段時間,我将測試環境的資料導入到開發資料庫後,發現開發環境資料庫的資料量太大(千萬級别),應用在開發環境(因開發資料庫的性能遠比不上測試資料庫的性能)太慢甚至出現有些功能沒法正常使用的問題,于是又急需将開發資料庫中的資料删除至百萬以下級别。

        可問題來了:千萬級别資料量的表用delete肯定不合适,因為資料量太大,于是想到truncate。但在truncate過程中發生了ORA-02266錯誤,這個是我要重點小結的。

        先說我的整個思路:

        1.建表結構和原來一模一樣的表,将想要的資料備份在此表中,文法如下所示:

create table temp_tableName as select * from tableName where code like 'XXX%';

insert into temp_tableName select * from tableName where code like 'YYY%' or code like 'ZZZ%' or code like 'TTT%';
           

        2.truncate清除資料

        由于表之間存在主外鍊關聯關系,是以必須先将有外鍊關聯的主鍵對應的表先truncate掉

        3.恢複資料

insert into tableName select * from temp_tableName where condition = 'KKK';
           

truncate過程中發生ORA-02266錯誤:

truncate table tableName;
           

報如下錯誤:

ORA-02266: unique/primary keys in table referenced by enabled foreign keys      

解決辦法:

1.失效主鍵

alter table tableName disable primary key cascade;
           

2.truncate表資料

truncate table tableName;
           

3.恢複主鍵

alter table tableName enable primary key;