资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
征信软件开发部数据库小组维护数据完整性1. 维护数据完整性的三种途径n 应用程序n 数据库触发器通常只有在完整性约束不能够完全定义复杂的业务逻辑时才使用。n 定义的完整性约束优点:u 提供更高的效率u 更容易定义和修改u 规则管理更加集中u 更灵活(disable和enable)u 在数据字典中可以查找完整定义2. 完整性约束的种类n NOT NULLn UNIQUEn PRIMARY KEYn FOREIGN KEYn CHECK (用于定义表中每列或者几列必须满足的条件)3. 约束状态n DISABLE NOVALIDATE无论是老数据还是新数据都不遵守约束n DISABLE VALIDATE如果置于这个状态所有关于约束的列都不允许修改(modify)。另外在这个约束上的索引被dropped,这个约束is disabled。注释:如果这个约束is deferrable ,索引不会被dropped。n ENABLE NOVALIDATE这种状态下,新数据如果违反了约束,不允许插入。但表中可能包含某些违反约束的数据。这种情况在OLTP系统向数据仓库加载数据比较适用。n ENABLE VALIDATE新的违反约束的数据不允许被插入,老数据也不允许违反约束。如果一个约束由别的状态改为ENABLE VALIDATE,数据库将花费很长的时间检查老数据,导致其他DML操作(如数据加载)等待。所以通常情况下,先改为ENABLE NOVALIDATE,然后再改为ENABLE VALIDATE。通常ENABLE暗示了VALIDATE,DISABLE暗示了NOVALIDATE,除非特别指出。n 如果一个唯一或者主键约束由DISABLE改为ENABLE,将会自动创建唯一索引。反之,索引将被dropped。n 由NOVALIDATE改为VALIDATE,所有的数据将被检查一遍。n 将一个独立的约束改为ENABLE NOVALIDATE 改为ENABLE VALIDATE不会导致其他DDL语句的读写锁。4. 约束检查n Nondeferred or immediate n Deferred (当整个事务全部提交时,才进行约束检查)定义约束Immediate或者DeferredALTER SESSIONSET CONSTRAINTS =IMMEDIATE|DEFERRED|DEFAULT5. 创建表时定义约束创建表时定义约束采用下列语法:column datatype CONSTRAINT constraint NOT NULL |UNIQUE USING INDEX index_clause |PRIMARY KEY USING INDEX index_clause |REFERENCES schema.table (column) ON DELETE CASCADE |CHECK (condition) constraint_state := NOT DEFERRABLE|DEFERRABLE INITIALLY IMMEDIATE|DEFERRED DISABLE|ENABLE VALIDATE|NOVALIDATE6. 定义约束时的考虑n 主键或者唯一约束将索引放在单独的表空间大量加载(bulk loads)频繁发生时,采用非唯一的索引n Self-reference 外键在初始加载后再定义或者enable外键延迟约束检查7. 使用EXCEPTIONS表1) 创建意外表2) 运用EXCEPTIONS子句执行ALTER TABLE命令SQL ALTER TABLE hr.employee ENABLE VALIDATE CONSTRAINT employee_dept_id_fk EXCEPTIONS INTO system.exceptions;3) 从EXCEPTION表中查找不合格数据4) 纠正数据错误5) Truncate EXCEPTION表重新激活约束。8. 获取约束信息从下列视图中获取约束信息:DBA_CONTRAINTSDBA_CONS_COLUMNSDBA_CONTRAINTS表中字段定义如下表:NameDescriptionCONSTRAINT_TYPEThe type of constraint is P if Primary Key, U if Unique, R if foreign key, or C if Check constraint. NOT NULL constraints are stored as check constraints.SEARCH_CONDITIONShows the condition specified for a check constraintR_OWNERR_CONSTRAINT_NAMEDefines the owner and name of the referenced constraint for foreign keysGENERATEDIndicates if the constraint name is system-generated (Valid values are USERNAME and GENERATED NAME.)BADIndicates that the constraint is to be rewritten to avoid situations such as the Year 2000 problemsRELYIs used in the optimizer, if this flag is setLAST_CHANGEShows the date when the constraint was last enabled or disabled陈陵涛第 1 页2004-03-24
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号