约束的管理

---------------------约束的管理-------------------------
 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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值