disable primary keyオプションの活用

利用ケース

システムをメンテナンスのするとき、大量データのロードや、制限の管理など、インデックスかプライマリキーを一時的に停止するニーズがある。
しかしインデックスを削除し、再作成する際、作成DDLが古くバージョン或いはDDL取得失敗、或いは作成自体が漏れたりすることがありうる。システムの運用にに大変大きなリスクをもたらしてしまう。
PRIMARY KEYのDISABLEオプションとINDEXにはUNUSABLEオプションを活用すれば、安全なデータベース管理ができる。

利用方法

alter index ... unusable;
alter index ... rebuild;
 
alter table ... disable primary key;
alter table ... enable primary key;

注意事項

PRIMARY KEYのENABLEにUSING INDEX TABLESPACE及びその他の必須オプションを指定することは必要である。
理由はPRIMARY KEYのENABLEにバグっぽい仕様が存在する。DISABLEデフォルトはDROP仕様となり、USING INDEXの詳細オプションはなくなる。特にテーブルスペースや、LOCAL/GLOBAL PARTITIONなどオプションは極めて重要だから、是非気をつけてください。
本来REBUILDに相当する処理だから、元々のテーブルスペースに格納すると処理すべきが、ユーザのデフォルトテーブルスペースに格納することになるので、気をつける必要がある。

下記のSQLで検証ができる。

create table test (id number(5) , name varchar2(5),
constraint pk_test primary key(id) 
using index 
tablespace users_idx
)
tablespace users_dat;
 
alter index pk_test rebuild;
 
select index_name, tablespace_name 
from user_indexes 
where index_name = 'PK_TEST';
 
-- 正しくない
alter table test disable primary key;
alter table test enable primary key;
-- 正しい
alter table test enable primary key 
using index tablespace users_idx;