在一个拥有大量数据,在线的(也就是说很有可能有其他来操作这个表)表上面建立一个主键约束或者唯一键约束,为了防止出现阻塞的现象,可使用下面的一般性步骤。
1.       先检查这个表有没有符合建立这个约束的索引。
2.       如果没有,先以online方式建立符合约束的非unique的索引。
3.       建立状态为ENABLE NOVALIDATE的约束。
4.       更改约束状态至ENABLE VALIDATE状态。
在这个步骤之中,如果你不先手工online建立索引,而是期待oracle在建立约束的时候自动建立索引,这样也会可能导致阻塞的,有第一个实验的结果就可以看出,因为oracle会自动给你建立一个unique索引,而且是非online方式。
from: 胜通
--[cc lang="sql"]
CREATE TABLE tmp_xf(i NUMBER,
ab NUMBER)
tablesapce tbs_aaa_ind;
ALTER TABLE tmp_xf
ADD CONSTRAINT pk_tmp_xf_id PRIMARY KEY(I)
USING INDEX;
CREATE INDEX idx_tmp_xf_ab ON tmp_xf(ab) TABLESPACE tbs_xxx_ind
ONLINE COMPUTE STATISTICS;
alter table TMP_XF
add constraint IDX_TMP_XF_AB unique (AB)
using index
enable NOVALIDATE;
--验证
ALTER TABLE tmp_xf MODIFY CONSTRAINT IDX_TMP_XF_AB VALIDATE;
--验证并开启,有锁
ALTER TABLE tmp_xf MODIFY CONSTRAINT IDX_TMP_XF_AB ENABLE VALIDATE;
[/cc]
--eof
This work is licensed under a CC A-S 4.0 International License.