《Oracle数据库的对象及其管理.ppt》由会员分享,可在线阅读,更多相关《Oracle数据库的对象及其管理.ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、管理表空间和数据文件存储结构和关系管理表管理索引维护数据完整性OracleOracle数据库的对象及其管理数据库的对象及其管理主要内容主要内容说明数据库的逻辑结构说明数据库的逻辑结构 创建表空间创建表空间使用不同方法改变表空间大小使用不同方法改变表空间大小 改变表空间的状态和存储设置改变表空间的状态和存储设置重定位表空间重定位表空间 准备必要的表空间准备必要的表空间概述概述数据库数据库控制文件控制文件重做日志重做日志文件文件数据文件数据文件数据库数据库逻辑的逻辑的物理的物理的表空间表空间数据文件数据文件O/S 块块Oracle 块块段段范围范围数据库结构数据库结构SYSTEMSYSTEM表空间
2、和表空间和非非SYSTEMSYSTEM表空间表空间SYSTEMSYSTEM表空间包表空间包含含:数据字典信息数据字典信息SYSTEMSYSTEM回滚段回滚段 非非SYSTEMSYSTEM表空间包表空间包含含:回滚段回滚段临时段临时段应用数据应用数据应用索引应用索引创建表空间创建表空间CREATE TABLESPACE app_dataDATAFILE DISK4/app01.dbf SIZE 100M,DISK5/app02.dbf SIZE 100MMINIMUM EXTENT 500KDEFAULT STORAGE(INITIAL 500K NEXT 500K MAXEXTENTS 500
3、 PCTINCREASE 0);例子例子例子例子存储参数存储参数 以下参数影响段的存储分配以下参数影响段的存储分配:INITIAL INITIAL NEXT NEXT MAXEXTENTS MAXEXTENTS MINEXTENTS MINEXTENTS PCTINCREASE PCTINCREASE临时表空间临时表空间 排序操作使用排序操作使用 不能包含永久对象不能包含永久对象CREATE TABLESPACE sortDATAFILE DISK2/sort01.dbf SIZE 50M MINIMUM EXTENT 1MDEFAULT STORAGE(INITIAL 2M NEXT 2M
4、MAXEXTENTS 500 PCTINCREASE 0)TEMPORARY;为表空间增加数据文件为表空间增加数据文件ALTER TABLESPACE app_data ADD DATAFILE DISK5/app03.dbf SIZE 200M;表空间表空间表空间表空间APP_DATAAPP_DATAapp03.dbf 2Mapp02.dbf1Mapp01.dbf1M例子例子例子例子数据文件的自动扩展数据文件的自动扩展ALTER TABLESPACE app_data ADD DATAFILE DISK6/app04.dbf SIZE 200MAUTOEXTEND ON NEXT 10MMA
5、XSIZE 500M;表空间表空间表空间表空间APP_ DATAAPP_ DATAapp04.dbf 2Mapp03.dbf2Mapp01.dbf1Mapp02.dbf1M例子例子例子例子 1M ALTER DATABASE DATAFILE ALTER DATABASE DATAFILE DISK5/app02.dbf RESIZE 200M;DISK5/app02.dbf RESIZE 200M;表空间表空间表空间表空间APP_DATAAPP_DATAapp02.dbf1M手工改变数据文件的大小手工改变数据文件的大小手工改变数据文件的大小手工改变数据文件的大小app01.dbf1M例子例子
6、例子例子改变存储设置改变存储设置例子例子例子例子ALTER TABLESPACE app_data MINIMUM EXTENT 2M;ALTER TABLESPACE app_dataDEFAULT STORAGE(INITIAL 2M NEXT 2M MAXEXTENTS 999);脱机状态脱机状态 脱机的表空间不能进行数据的存取操脱机的表空间不能进行数据的存取操作作 SYSTEMSYSTEM表空间和带有活动回滚段的表空间和带有活动回滚段的表空间表空间 均不能脱机均不能脱机ALTER TABLESPACE app_data OFFLINE;例子例子例子例子移动数据文件移动数据文件:ALTE
7、R TABLESPACEALTER TABLESPACE表空间表空间APP_DATAAPP_DATA必须脱机必须脱机目标数据文件必须存在目标数据文件必须存在ALTER TABLESPACE app_data RENAME DATAFILE DISK4/app01.dbf TO DISK5/app01.dbf;例子例子例子例子移动数据文件移动数据文件:ALTER DATABASE ALTER DATABASE 数据库必须已经装配数据库必须已经装配 目标数据文件必须存在目标数据文件必须存在ALTER DATABASE RENAME FILE DISK1/system01.dbf TO DISK2/
8、system01.dbf;例子例子例子例子表空间的只读状态表空间的只读状态ALTER TABLESPACE app_data READ ONLY;表空间表空间表空间表空间APP_DATAAPP_DATA只允许进行读操作只允许进行读操作只允许进行读操作只允许进行读操作 例子例子例子例子设置表空间为只读设置表空间为只读 表空间必须联机表空间必须联机 没有活动的事务才可以没有活动的事务才可以 表空间不能包含活动的回滚段表空间不能包含活动的回滚段 表空间当前一定不能与联机备份有关表空间当前一定不能与联机备份有关删除表空间删除表空间DROP TABLESPACE app_data INCLUDING C
9、ONTENTS;以下语句删除以下语句删除以下语句删除以下语句删除APP_DATAAPP_DATA表空间及其全部表空间及其全部表空间及其全部表空间及其全部内容。内容。内容。内容。例子例子例子例子获得表空间有关信息获得表空间有关信息 DBA_TABLESPACES DBA_TABLESPACES TABLESPACE_NAMETABLESPACE_NAMENEXT_EXTENTNEXT_EXTENTMAX_EXTENTSMAX_EXTENTSPCT_INCREASEPCT_INCREASEMIN_EXTLENMIN_EXTLENSTATUSSTATUSCONTENTSCONTENTS获得数据文件有
10、关信息获得数据文件有关信息 DBA_DATA_FILESDBA_DATA_FILESFILE_NAMEFILE_NAMETABLESPACE_NAMETABLESPACE_NAMEBYTESBYTESAUTOEXTENSIBLE AUTOEXTENSIBLE MAXBYTESMAXBYTESINCREMENT_BY INCREMENT_BY 管理表空间和数据文件存储结构和关系管理表管理索引维护数据完整性OracleOracle数据库的对象及其管理数据库的对象及其管理主要内容主要内容列出不同种类的段及其它们的使用由段控列出不同种类的段及其它们的使用由段控制范围的使用制范围的使用说明对象的块空间利
11、用参数的使用说明对象的块空间利用参数的使用从数据字典获得存储结构的有关信息从数据字典获得存储结构的有关信息根据分裂程度和生存范围确定段的位置根据分裂程度和生存范围确定段的位置数据库数据库逻辑的逻辑的物理的物理的表空间表空间数据文件数据文件O/S 块块Oracle 块块段段范围范围数据库存储层次数据库存储层次段的种类段的种类表表表表簇簇簇簇表分区表分区表分区表分区索引索引索引索引段的种类段的种类索引组织表索引组织表索引组织表索引组织表索引分区索引分区索引分区索引分区回滚段回滚段回滚段回滚段临时段临时段临时段临时段段的种类段的种类LOBLOB索引索引索引索引 LOBLOB段段段段引导程序引导程序引
12、导程序引导程序段段段段嵌套的表嵌套的表嵌套的表嵌套的表存储子句的优先级存储子句的优先级Oracle缺省缺省表空间表空间段段范围的分配和去配范围的分配和去配段在以下情况分配段在以下情况分配+创建创建 +扩展扩展+修改修改段在以下情况去配段在以下情况去配删除删除修改修改清除清除自动调整大小自动调整大小(仅回滚段仅回滚段)使用的和空闲的范围使用的和空闲的范围数据文件数据文件数据文件数据文件空闲的范围空闲的范围空闲的范围空闲的范围使用的范围使用的范围使用的范围使用的范围文件头文件头文件头文件头空闲空间合并空闲空间合并空闲的范围空闲的范围空闲的范围空闲的范围使用的范围使用的范围使用的范围使用的范围文件头
13、文件头文件头文件头之前之前之前之前ALTER TABLESPACE data01 COALESCE;之后之后之后之后数据库块数据库块:回顾回顾 I/O I/O的最小单位的最小单位的最小单位的最小单位由一个或多个由一个或多个由一个或多个由一个或多个O/SO/S块组成块组成块组成块组成由参数由参数由参数由参数DBDB_BLOCK_SIZE_BLOCK_SIZE设置设置设置设置在数据库创建时设置在数据库创建时设置在数据库创建时设置在数据库创建时设置 数据库块内容数据库块内容头头头头空闲空间空闲空间空闲空间空闲空间数据数据数据数据块空间利用参数块空间利用参数INITRANSINITRANSMAXTRA
14、NSMAXTRANSPCTFREEPCTFREEPCTUSEDPCTUSED块空间的使用块空间的使用插入插入插入插入插入插入插入插入插入插入插入插入插入插入插入插入1234PCTFREE=20PCTFREE=20PCTUSED=40PCTUSED=4080%80%80%80%40%40%数据字典视图数据字典视图表空间表空间DBA_TABLESPACES段段DBA_SEGMENTS数据文件数据文件DBA_DATA_FILES空闲的范围空闲的范围DBA_FREE_SPACE使用的范围使用的范围DBA_EXTENTS查询段的有关信息查询段的有关信息DBA_SEGMENTSDBA_SEGMENTS一般
15、信息一般信息一般信息一般信息OWNEROWNERSEGMENT_NAME SEGMENT_NAME SEGMENT_TYPE SEGMENT_TYPE TABLESPACE_NAMETABLESPACE_NAME 大小大小 EXTENTS BLOCKS 存储设置存储设置 INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE获得使用的范围信息获得使用的范围信息DBA_EXTENTSDBA_EXTENTS标识标识标识标识OWNEROWNERSEGMENT_NAMESEGMENT_NAMEEXTENT_IDEXTENT_ID
16、位置和大小位置和大小位置和大小位置和大小TABLESPACE_NAMETABLESPACE_NAMERELATIVE_FNORELATIVE_FNOFILE_IDFILE_IDBLOCK_IDBLOCK_IDBLOCKSBLOCKS 检查空闲的范围信息检查空闲的范围信息DBA_FREE_SPACEDBA_FREE_SPACE位置和大小位置和大小位置和大小位置和大小TABLESPACE_NAME TABLESPACE_NAME RELATIVE_FNO RELATIVE_FNO FILE_ID FILE_ID BLOCK_ID BLOCK_ID BLOCKSBLOCKS 管理表空间和数据文件存储
17、结构和关系管理表管理索引维护数据完整性OracleOracle数据库的对象及其管理数据库的对象及其管理主要内容主要内容区分不同种类的区分不同种类的OracleOracle数据类型数据类型使用适当的存储设置创建表使用适当的存储设置创建表控制表所使用的空间控制表所使用的空间分析表检查其完整性及其迁移情况分析表检查其完整性及其迁移情况从数据字典检索有关表的信息从数据字典检索有关表的信息不同格式不同格式ROWIDROWID之间的相互转换之间的相互转换 存储用户数据存储用户数据规则的表规则的表规则的表规则的表簇簇簇簇分区的表分区的表分区的表分区的表索引组织的表索引组织的表索引组织的表索引组织的表行结构行
18、结构 数据库块数据库块数据库块数据库块行头行头行头行头列长度列长度列长度列长度列值列值列值列值Oracle Oracle 数据类型数据类型CHAR(N),NCHAR(N)CHAR(N),NCHAR(N)VARCHAR2(N),VARCHAR2(N),NVARCHAR2(N)NVARCHAR2(N)NUMBER(P,S)NUMBER(P,S)DATEDATERAW(N)RAW(N)BLOB,CLOB,BLOB,CLOB,NCLOB,BFILENCLOB,BFILELONG,LONG RAWLONG,LONG RAWROWIDROWIDVARRAYVARRAYTABLETABLEREFREF数据类
19、型数据类型内置的内置的用户定义的用户定义的标量标量关系关系集合集合ROWIDROWID数据类型数据类型OOOOOOBBBBBBFFFRRR数据对象号数据对象号相对文件号相对文件号行号行号块号块号ROWID ROWID 格式格式格式格式行的唯一标识符行的唯一标识符 用作行定位用作行定位受限的受限的ROWIDROWID可以在一个段内确定行可以在一个段内确定行需要较少空间需要较少空间BBBBBBBBFFFFRRRR块号块号行号行号文件号文件号.集合集合集合是包含对象的对象集合是包含对象的对象VARRAYVARRAY是有次序的元素集合,其中包括是有次序的元素集合,其中包括计数和界限计数和界限嵌套的表是
20、带有嵌套的表是带有TABLETABLE数据类型列的表数据类型列的表VARRAYVARRAY嵌套表嵌套表嵌套表嵌套表创建表创建表CREATE TABLE employees(empno NUMBER(4),last_name VARCHAR2(30)deptno NUMBER(2)PCTFREE 20 PCTUSED 50STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE data01;创建表创建表:指导原则指导原则 使用较小的标准范围大小以减少使用较小的标准范围大小以减少 表空间的碎片表空间的碎片 对于频繁使
21、用并且较小的表可以对于频繁使用并且较小的表可以使用使用CACHECACHE子句子句PCTFREEPCTFREE和和PCTUSEDPCTUSED的设置的设置 计算计算PCTFREEPCTFREE(平均行大小平均行大小-初始行大小初始行大小)*100平均行大小平均行大小 计算计算PCTUSEDPCTUSED 平均行大小平均行大小*100100-PCTFREE-可用数据空间可用数据空间行迁移和链接行迁移和链接更新之前更新之前更新之前更新之前更新之后更新之后更新之后更新之后拷贝一个存在的表拷贝一个存在的表CREATE TABLE new_empSTORAGE(INITIAL 200K NEXT 200
22、KPCTINCREASE 0 MAXEXTENTS 50)NOLOGGINGTABLESPACE data01ASSELECT*FROM scott.employees;改变存储参数和块利用参数改变存储参数和块利用参数ALTER TABLE scott.employeesPCTFREE 30PCTUSED 50STORAGE(NEXT 500KMINEXTENTS 2MAXEXTENTS 100);手工分配范围手工分配范围ALTER TABLE scott.employeesALLOCATE EXTENT(SIZE 500KDATAFILE DISK3/DATA01.DBF);Free spa
23、ce after deleteFree space after deleteUnused blockUnused block高水位高水位高水位高水位范围范围范围范围 ID ID 0 01 12 23 34 4范围范围范围范围 ID ID 0 01 12 23 34 4Used blockUsed block高水位高水位插入之后插入之后插入之后插入之后删除之后删除之后删除之后删除之后得到高水位得到高水位:DBMS_SPACE.UNUSED_SPACEDBMS_SPACE.UNUSED_SPACE 范围范围范围范围 ID ID 0 01 12 23 34 4高水位高水位LAST_USED_EXTE
24、NT_FILE_ID,LAST_USED_EXTENT_BLOCK_IDTOTAL_BLOCKSUNUSED_BLOCKS删除之后的空闲空间删除之后的空闲空间删除之后的空闲空间删除之后的空闲空间未使用的块未使用的块未使用的块未使用的块高水位高水位高水位高水位去配之前去配之前去配之前去配之前使用的块使用的块使用的块使用的块未使用空间的去配未使用空间的去配ALTER TABLE scott.employeesDEALLOCATE UNUSED;去配之后去配之后去配之后去配之后清除表清除表TRUNCATE TABLE scott.employees;范围范围范围范围 ID ID 0 01 1高水位高
25、水位高水位高水位 空闲空间空闲空间空闲空间空闲空间删除表删除表DROP TABLE scott.departmentsCASCADE CONSTRAINTS;分析表结构分析表结构OracleOracle服务器核实每一个数据块的完服务器核实每一个数据块的完整性整性使用使用CASCADECASCADE选项可以确认与表有选项可以确认与表有关的全部索引,并且执行表和索引之关的全部索引,并且执行表和索引之间的交叉引用间的交叉引用ANALYZE TABLE scott.employeesVALIDATE STRUCTURE;检测行迁移检测行迁移OracleOracle服务器根据样本数据收集统计信息服务器根
26、据样本数据收集统计信息并更新数据字典并更新数据字典检查检查CHAIN_CNT CHAIN_CNT ANALYZE TABLE scott.employeesESTIMATE STATISTICS;SELECT chain_cntFROM DBA_TABLESWHERE table_name=EMPLOYEES AND owner=SCOTT;检索表信息检索表信息DBA_OBJECTSOWNEROBJECT_NAMEOBJECT_IDDATA_OBJECT_IDCREATEDDBA_SEGMENTSOWNERSEGMENT_NAMETABLESPACE_NAMEHEADER_FILEHEADER
27、_BLOCKDBA_TABLESOWNERTABLE_NAMEPCT_FREEPCT_USEDINITIAL_EXTENTNEXT_EXTENTMIN_EXTENTSMAX_EXTENTSPCT_INCREASECACHEBLOCKSEMPTY_BLOCKSCHAIN_CNTDBA_EXTENTSDBA_EXTENTSOWNEROWNERSEGMENT_NAMESEGMENT_NAMEEXTENT_IDEXTENT_IDFILE_IDFILE_IDBLOCK_IDBLOCK_IDBLOCKSBLOCKS检索范围信息检索范围信息DBMS_ROWIDDBMS_ROWID包包函数名称函数名称ROWI
28、D_CREATEROWID_OBJECTROWID_RELATIVE_FNOROWID_BLOCK_NUMBERROWID_ROW_NUMBERROWID_TO_ABSOLUTE_FNOROWID_TO_EXTENDEDROWID_TO_RESTRICTED说明说明根据各个独立部分根据各个独立部分 建立一个建立一个ROWID为一个为一个ROWID返回对象标识符返回对象标识符为一个为一个ROWID返回相对文件号返回相对文件号为一个为一个ROWID返回块号返回块号为一个为一个ROWID返回行号返回行号为一个为一个ROWID返回绝对文件号返回绝对文件号将一个将一个ROWID从受限的转换成扩展的从受限
29、的转换成扩展的将一个将一个ROWID从扩展的转换成受限的从扩展的转换成受限的通常使用的函数通常使用的函数通常使用的函数通常使用的函数:管理表空间和数据文件存储结构和关系管理表管理索引维护数据完整性OracleOracle数据库的对象及其管理数据库的对象及其管理主要内容主要内容列出各种不同类型的索引及其用途列出各种不同类型的索引及其用途建立建立B-B-树和位图索引树和位图索引索引重组索引重组删除索引删除索引从数据字典获得有关索引信息从数据字典获得有关索引信息索引分类索引分类逻辑的逻辑的单列的或组合列的单列的或组合列的唯一的或非唯一的唯一的或非唯一的物理的物理的分区的或非分区的分区的或非分区的 B
30、-B-树或位图树或位图正常或倒序键正常或倒序键(仅仅B-B-树树)B-B-树索引树索引索引条目头索引条目头键列长度键列长度键列值键列值ROWID根根分支分支叶叶索引条目索引条目KEY ROWIDEMPNO (BLOCK#ROW#FILE#)-1257 0000000F.0002.00012877 0000000F.0006.00014567 0000000F.0004.00016657 0000000F.0003.00018967 0000000F.0005.00019637 0000000F.0001.00019947 0000000F.0000.0001.颠倒键索引颠倒键索引EMPEMP的
31、索引的索引的索引的索引(EMPNO)(EMPNO)EMPEMP表表表表EMPNO ENAME JOB .-7499 ALLEN SALESMAN7369 SMITH CLERK7521 WARD SALESMAN .7566 JONES MANAGER7654 MARTIN SALESMAN7698 BLAKE MANAGER7782 CLARK MANAGER.位图索引位图索引键键开始开始ROWIDROWID结束结束ROWIDROWID 位图位图表索引块 10块 11块 12文件 3B-B-树与位图索引的比较树与位图索引的比较B-树树适合于高基数的列适合于高基数的列键值的更新相对昂贵键值的更
32、新相对昂贵对使用或谓词的查询语句无效对使用或谓词的查询语句无效适用于适用于OLTP位图位图适合于低基数的列适合于低基数的列 键值的更新非常昂贵键值的更新非常昂贵对使用或谓词的查询语句有效对使用或谓词的查询语句有效适用于适用于 DSS 建立正常建立正常B-B-树索引树索引CREATE INDEX scott.emp_lname_idxON scott.employees(last_name)PCTFREE 30STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx01;创建索引创建索引:指导原则指导原则权
33、衡查询和权衡查询和DMLDML的需要的需要放置在单独的表空间中放置在单独的表空间中使用相同的范围大小使用相同的范围大小:5:5个块的倍数或表个块的倍数或表空间空间 MINIMUM EXTENT MINIMUM EXTENT的大小的大小大的索引可以考虑使用大的索引可以考虑使用NOLOGGINGNOLOGGING选项选项如果新键值都接近当前范围则如果新键值都接近当前范围则PCTFREEPCTFREE设置要高设置要高建立倒序键索引建立倒序键索引CREATE UNIQUE INDEX scott.ord_ord_no_idxON scott.ord(ord_no)REVERSEPCTFREE 30ST
34、ORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx01;建立位图索引建立位图索引CREATE BITMAP INDEX scott.ord_region_id_idxON scott.ord(region_id)PCTFREE 30STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx01;改变索引的存储参数改变索引的存储参数ALTER INDEX scott.emp_lname_idxSTORAGE(NEXT
35、400KMAXEXTENTS 100);索引空间的分配与去配索引空间的分配与去配ALTER INDEX scott.ord_region_id_idxALLOCATE EXTENT(SIZE 200KDATAFILE DISK6/indx01.dbf);ALTER INDEX scott.ord_ord_no_idxDEALLOCATE UNUSED;重建索引重建索引 ALTER INDEX scott.ord_region_id_idx REBUILDTABLESPACE indx02;使用该命令可以使用该命令可以:将一个索引移到另一个不同的表空间将一个索引移到另一个不同的表空间通过去除已经
36、删除的条目改善空间的利用通过去除已经删除的条目改善空间的利用颠倒键索引与正常颠倒键索引与正常B-B-树索引之间的变换树索引之间的变换检查索引的有效性检查索引的有效性ANALYZE INDEX scott.ord_region_id_idx VALIDATE STRUCTURE;INDEX_STATS删除索引删除索引在大批数据装入之前先删除索引,然后再重在大批数据装入之前先删除索引,然后再重在大批数据装入之前先删除索引,然后再重在大批数据装入之前先删除索引,然后再重建建建建删除不经常使用的索引,并在需要时再建立删除不经常使用的索引,并在需要时再建立删除不经常使用的索引,并在需要时再建立删除不经常
37、使用的索引,并在需要时再建立删除并重建无效的索引删除并重建无效的索引删除并重建无效的索引删除并重建无效的索引DROP INDEX scott.dept_dname_idx;获得有关索引信息获得有关索引信息DBA_INDEXESOWNERINDEX_NAMEINDEX_TYPETABLE_OWNERTABLE_NAMEUNIQUENESSTABLESPACE_NAMELOGGINGSTATUSDBA_IND_COLUMNSINDEX_OWNER INDEX_NAME TABLE_OWNER TABLE_NAME COLUMN_NAME COLUMN_POSITIONCOLUMN_LENGTH 管
38、理表空间和数据文件存储结构和关系管理表管理索引维护数据完整性OracleOracle数据库的对象及其管理数据库的对象及其管理主要内容主要内容实现数据完整性约束和触发器实现数据完整性约束和触发器维护完整性约束和触发器维护完整性约束和触发器从数据字典获得约束和触发器的有关信息从数据字典获得约束和触发器的有关信息数据完整性数据完整性应用程序应用程序应用程序应用程序完整性约束完整性约束完整性约束完整性约束数据库触发器数据库触发器数据库触发器数据库触发器表表数据数据数据数据约束的类型约束的类型说明说明指定一个列不能包含空值指定一个列不能包含空值标明一个列或列的组合是唯一的标明一个列或列的组合是唯一的标明
39、一个列或列的组合是表的主键标明一个列或列的组合是表的主键标明一个列或列的组合是引用完整标明一个列或列的组合是引用完整性中的外部键性中的外部键指定表的每一行必须满足的条件指定表的每一行必须满足的条件约束约束NOT NULLUNIQUEPRIMARY KEYFOREIGN KEYCHECK延期的约束延期的约束DMLDML语句语句检查非延期的约束检查非延期的约束检查非延期的约束检查非延期的约束COMMITCOMMIT检查延期的约束检查延期的约束检查延期的约束检查延期的约束主主/唯一键强制唯一键强制不使用索引不使用索引建立唯一索引建立唯一索引使用存在使用存在的索引的索引是否有可是否有可用的索引用的索引
40、?是是否否否否是是约束可延期否约束可延期否?建立非唯一索引建立非唯一索引是是否否启用键否启用键否?外部键考虑外部键考虑至至Drop parent tableTruncate parent tableDrop tablespace containing parent tableAvoid locks on child table while performing DML on parent tablePerform DML on child table执行执行Cascade constraintsDisable/drop foreign keyUse CASCADE CONSTRAINTS cl
41、auseCreate index on foreign keyEnsure tablespace containing parent key index online数据库触发器数据库触发器表触发器DML操作触发器类型触发器类型触发器类型触发器类型INSERTINSERT或或或或UPDATEUPDATE或或或或DELETEDELETEBEFOREBEFORE或或或或AFTERAFTERROWROW或或或或STATEMENTSTATEMENT创建表时定义约束创建表时定义约束 CREATE TABLE scott.employees(empno NUMBER(4)CONSTRAINT emp_pk
42、 PRIMARY KEYDEFERRABLE USING INDEX STORAGE(INITIAL 100K NEXT 100K)TABLESPACE indx01,last_name VARCHAR2(30)CONSTRAINT emp_ln_nn NOT NULL,deptno NUMBER(2)TABLESPACE data01;定义约束的指导方针定义约束的指导方针主键和唯一性约束主键和唯一性约束:将索引放置在另外的表空间中将索引放置在另外的表空间中如果批量装入非常频繁如果批量装入非常频繁,使用非唯一索引使用非唯一索引自引用外部键自引用外部键:初始装入后再定义或启用外部键初始装入后再定
43、义或启用外部键延期约束检查延期约束检查禁用约束禁用约束在批量装入时禁用,尤其是自引用外部键在批量装入时禁用,尤其是自引用外部键的情况的情况禁用主键之前,首先禁用引用外部键禁用主键之前,首先禁用引用外部键唯一索引被删除,但保留非唯一索引唯一索引被删除,但保留非唯一索引ALTER TABLE scott.departmentsDISABLE CONSTRAINT dept_pk CASCADE;启用约束启用约束启用启用 NOVALIDATENOVALIDATE 不锁表不锁表不锁表不锁表 主主主主/唯一键必须使用非唯唯一键必须使用非唯唯一键必须使用非唯唯一键必须使用非唯一索引一索引一索引一索引ALT
44、ER TABLE scott.departmentsENABLE NOVALIDATE CONSTRAINT dept_pk;启用约束启用约束启用启用 VALIDATEVALIDATE锁表锁表锁表锁表可以使用唯一或非唯一可以使用唯一或非唯一可以使用唯一或非唯一可以使用唯一或非唯一索引索引索引索引需要正确的表数据需要正确的表数据需要正确的表数据需要正确的表数据ALTER TABLE scott.employeesENABLE VALIDATE CONSTRAINT emp_dept_fk;使用使用EXCEPTIONSEXCEPTIONS表表1.1.建立建立EXCEPTIONSEXCEPTIONS
45、表表(utlexcpt.sql(utlexcpt.sql)2.2.执行带执行带EXCEPTIONSEXCEPTIONS子句的子句的ALTER ALTER TABLE TABLE 3.3.在在EXCEPTIONSEXCEPTIONS上使用子查询定位上使用子查询定位不正确数据的行不正确数据的行4.4.纠正错误纠正错误5.5.再次执行再次执行ALTER TABLEALTER TABLE启用约束启用约束禁用和启用触发器禁用和启用触发器使用使用ALTER TRIGGERALTER TRIGGER禁用或启用一个触禁用或启用一个触发器发器使用使用ALTER TABLEALTER TABLE禁用或启用全部触发
46、禁用或启用全部触发器器ALTER TRIGGER scott.emp_conv_lnDISABLE;ALTER TABLE scott.employeesENABLE ALL TRIGGERS;删除约束删除约束使用此命令删除约束使用此命令删除约束:使用此命令删除表及其任何引用的外部键使用此命令删除表及其任何引用的外部键:ALTER TABLE scott.employeesDROP CONSTRAINT emp_ln_uk;DROP TABLE departmentsCASCADE CONSTRAINTS;删除触发器删除触发器DROP TRIGGER scott.audit_dept;获得约束
47、的有关信息获得约束的有关信息DBA_CONSTRAINTSOWNER CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION R_OWNER R_CONSTRAINT_NAMEDELETE_RULE STATUS DEFERRABLE DEFERRED VALIDATED GENERATED BAD LAST_CHANGE DBA_CONS_COLUMNSOWNER CONSTRAINT_NAMETABLE_NAME COLUMN_NAME POSITION 获得触发器的有关信息获得触发器的有关信息DBA_TRIGGERS OWNER TRIGGER_NAME TRIGGER_TYPE TRIGGERING_EVENT TABLE_OWNER TABLE_NAME STATUS DESCRIPTION TRIGGER_BODY DBA_TRIGGER_COLSTRIGGER_OWNERTRIGGER_NAME TABLE_OWNER TABLE_NAME COLUMN_NAME DBA_OBJECTSOWNEROBJECT_NAME OBJECT_TYPE STATUS
限制150内