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