---------------------约束的管理-------------------------
deferrable :约束可以被设置成延迟的
NOT DEFERRABLE:约束不可以被设置成延迟的
约束的deferrable属性不能修改,只能重建立
----事务级修改约束是延迟还是立即
set constraints all deferred;
set constraints chi_fk_par immediate;
set constraints chi_fk_par deferred;
会话级修改约束是延迟还是立即:
alter session set constraints=deferred
--------修改表的约束延迟属性
alter table test1 modify constraint test1_pk initially deferred/immediate;
在事务级上设置约束是否延长的属性。
要保证约束是deferrable(可以被设置成延迟的) ,否则不起作用
ENABLE(启用)确保所有输入的数据都遵从约束(constraint)
DISABLE(禁用)总是允许输入数据,无论数据是否遵从约束
----上面这两个是对新数据的约束
VALIDATE(验证)确保已存在的数据遵从约束
NOVALIDATE(无验证)允许已存在的数据不遵从约束
----上面这个两个是对已有数据的约束
user_constraints 里字段和上面的属性对应
STATUS ENABLED/disabled
DEFERRABLE NOT DEFERRABLE/DEFERRABLE
DEFERRED IMMEDIATE/DEFERRED
VALIDATED VALIDATED/noVALIDATED
alter table test1 enable||disable novalidate||validate constraint FDFDFDF
---------------约束状态的改变对索引的影响------------
当一个唯一键约束(unique key)或主键约束(primary key)
从 DISABLE 转换为 ENABLE 状态时,如果没有索引存在,
Oracle 将自动地创建一个唯一索引(unique index)。
类似地,当一个唯一键约束或主键约束从 ENABLE 转换为 DISABLE 状态时,
如果约束是通过唯一索引实现的,那么此索引将被移除。
创建主键约束时已存在可用的唯一索引,主键约束将使用此索引而非隐式地创建新索引。
如果在创建 UNIQUE 键约束时已有可用的 UNIQUE 索引,新建约束将使用此索引,而不再隐式地创建新索引
如果事先存在唯一index,那么在这样的列上创建constraint时尽管也可以使用该唯一index,
但是当把constraint变成disable状态时index还是被删除了,也就是说当再次enable 约束时index还是需要重新创建的。
所以把constraint和非唯一index结合起来何尝不是一种好的做法,如果是非唯一索引就不会被删除
在一个拥有大量数据,在线的(也就是说很有可能有其他来操作这个表)表上面建立一个主键约束或者唯一键约束,为了防止出现阻塞的现象
,可使用下面的一般性步骤。
1. 先检查这个表有没有符合建立这个约束的索引。
2. 如果没有,先以online方式建立符合约束的非unique的索引。
3. 建立状态为ENABLE NOVALIDATE的约束。
4. 更改约束状态至ENABLE VALIDATE状态。
因为 约束从enable novalidate到enable validate状态,不会产生阻塞
-----------------将无效约束的数据行放入exception的表中,此表记录了违反数据约束的行的行号;在此之前,要先建exceptions表*/
alter table test1 enable constraints test1_pk exceptions into exceptions;
/*运行创建exceptions表的脚本*/
start $ORACLE_HOME/rdbms/admin/utlexcpt.sql;
如果在以online方式创建索引以前,已经有其他会话更新了某些数据而没有提交,那么在创建索引的时候,会发生阻塞,知道那个会话提交完
成后才能继续
已普通方式建立索引,如果有活动事务,会立即提示资源正忙
当以disable novalidate建立主键或者唯一键约束时,如果先前表中没有符合条件的索引,oracle也不会自动创建索引。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69265/viewspace-442919/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/69265/viewspace-442919/