《Oracle表空间和表的创建与管理(二)》由会员分享,可在线阅读,更多相关《Oracle表空间和表的创建与管理(二)(61页珍藏版)》请在金锄头文库上搜索。
1、Oracle表空间和表的创建与管理(二),Oracle数据库方案对象与数据类型,数据表类型,数据表类型,常用关系表、按索引组织的表、对象表与嵌套表存储用户永久数据,数据表类型,Oracle数据类型,表结构中不建议使用的数据类型,表结构中建议使用的数据类型,VARCHAR2可变长字符串类型,4KBDATE固定长度(7B)的日期型。注意存储与使用格式TIMESTAMP时间戳类型,可更精确的存储与表示时间NUMBER数字型,可存放实型和整型BLOB大二进制对象类型,4GBCLOB大字符串对象类型,4GBNCLOB多字节字符集的CLOB,4GBBFILE外部二进制文件类型,只读,大小与OS有关ROWI
2、D存储记录行的物理地址(2进制表示),固定为10个字节,CHAR定长字符类型,2KBVARCHAR(同VARCHAR2)可变长字符串类型,4KBLONG可变长字符类型,2GBRAW可变长二进制数据类型,4KBLONG RAW可变长二进制数据类型,2GB,Oracle数据类型,建议使用LOB类型代替LONG类型,数据库中的每一条记录有唯一的ROWID值,表示了记录的具体位置,因此又称它为记录的物理地址,TIMESTAMP 数据类型(1) TIMESTAMP是DATE的扩展,可指定秒的计量精度至小数点后9位(2) TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE可用
3、于主键,TIMESTAMP WITH TIME ZONE不能被用于主键,Oracle数据类型,其他数据类型,参照表类型在一个基表的记录中存放被参照表中记录的指针,集合类型(Collection) VARRAY:表中元素个数有限制 TABLE :表中元素个数没有限制,用户自定义数据类型,创建表的语法,表命名规则:以字母开头,长度为1-30个字符,可使用A-Z,a-z,0-9,_ ,$和#字符,不能与已经存在的当前用户的其他数据库对象同名,不能使用Oracle的保留字作为表名,表名不区分大小写,可用SYSDATE、USER等作为列的缺省值,用户应获得CREATE TABLE系统特权,语法图符号方框
4、:保留关键字圆圈:界限符圆弧方框:需要由其他语法图说明的语法成分箭头:连接指向下一个语法组成成分,CREATE GLOBAL TEMPORARY TABLE schema.table (relational_properties) ON COMMIT DELETE | PRESERVE ROWS physical_properties table_properties;,创建表的语法图,relational_properties语法图,创建表的语法图,physical_properties语法图,创建表的语法图,table_properties语法图,创建表的语法图,最简单的创建二维关系表的方
5、法是不指定物理存储特性,也不指定分区属性,建立的表将使用系统默认的参数。,CREATE TABLE 表名 ( 列名 类型 NULL|NOT NULL PRIMARY KEY, 列名 类型 NULL|NOT NULL ,表级完整性约束 );,操作用户需要有在相应表空间中创建对象的权限,例1:创建采用系统默认存储参数值的关系表。 EXA_05_01.SQL,基本关系表,利用查询创建表,通过子查询创建表用于保存原始数据以便于恢复为了得到一个与源表一样结构的表,需要注意如下几点:(1)源表中的LONG型字段不会被复制 (2)源表中的完整性约束不会被复制(3)通过查询创建的表自动继承源表的存储参数(4)
6、不能指定新表的列属性,但每列可以取不同于源表列的名称,利用查询创建表,语法如下:,CREATE TABLE table ( column , column . ) AS subquery ;,例2:为SCOTT的雇员表emp创建一个备份表emp_bak。 EXA_05_02.SQL,存储参数,STORAGE子句指定区间存储参数INITIAL 初始区间大小,以K(KB)或M(MB)为单位NEXT 下一个区间大小MINEXTENTS 最小区间数MAXEXTENTS 最大区间数,用于限制用户的存储空间占用PCTINCREASE 下一个区间相对于前一个区间大小的增量,Oracle建议PCTINCREA
7、SE取0以减少系统开销,存储参数,TABLESPACE 指定存储表数据的表空间,PCTFREE 指定每个块用于保留给数据修改空间的百分比, 即保留该百分比的空间暂时不用,当修改数据时 存放扩张出来的数据PCTUSED 行插入备选块的空间使用阈值的百分比,当数据块 的已用空间比例低于该值时可向其中插入数据INITRANS 支持并发操作的初始事务量(需为它们保留部分块 空间),默认值为5MAXTRANS 支持并发操作的最大事务量(需为它们保留部分块 空间),默认值为25,Oracle采取以空间换时间(性能)的存储策略,例3:创建表stu2,并指定它的存储参数。 EXA_05_03.SQL,完整性约
8、束,约束的类型 NOT NULL:非空约束 UNIQUE:唯一性约束,指定某列值不能重复 PRIMARY KEY:主键约束 FOREIGN KEY:外键约束,也叫参照完整性约束 CHECK:检查约束,用于限制该列的取值范围 REF:定义列对象的参照关系,完整性约束作为一类系统对象,为便于维护,应给约束起一个名字,典型命名规则为:表名_约束类型_字段名1 _字段名2,完整性约束的系统命名规则:SYS_Cnnnnnn,完整性约束,在列中定义约束的语法图,完整性约束,在列之外定义约束的语法图,完整性约束,定义参照完整性的语法图,父记录被删除时,子记录的处理方法ON DELETE CASCADE:删除
9、父记录时级联删除子记录ON DELETE SET NULL:置子记录的外键列值为NULL,完整性约束,完整性约束应用注意点,(1)组合关键字只能定义在表级(2)系统自动对关键字列建立唯一性索引(3)一个表只能指定一组关键字,但可以在不同列上建立多个数据唯一性约束(4)外键(参照完整性)仅依赖于表间或表内的数据关系,而不依赖于物理存储或指针,是纯逻辑上的关系(5)可在表定义时进行完整性约束定义,或在表定义后使用ALTER TABLE语句定义(6)可以启用或禁用某个完整性约束,完整性约束,数据字典 USER_CONSTRAINTS USER_CONS_COLUMNS,约束类型列(constrain
10、t_type)的含义C:检查约束,包括CHECK 和 NOT NULLP:主键约束(PRIMARY KEY)R:参照完整性约束(REFERENCES)U:唯一性约束(UNIQUE),查看在哪些列上定义了约束 EXA_05_P90_user_cons_columns.SQL,查看用户定义的约束 EXA_05_P90_user_constraints.SQL,完整性约束,应用例子,例4:创建学生相关表,在列中定义约束。 EXA_05_04.SQL,例5:创建学生相关表,在列之外定义约束。 EXA_05_05.SQL,按索引组织的表 (IOT),IOT将部分非键列同主键列一起存储在B-树索引中,按索
11、引组织的表必须有主键。,当执行必须基于主键的查询且相关的少量字段经常要一起获取的应用时,采用按索引组织的表特别有效,ORGANIZATION INDEX 限定词,表示这是一个按索引组织的表,表的主键,可选的行溢出说明子句(OVERFLOW),INCLUDING子句说明哪些非关键字列与关键字列一同存储,PCTTHRESHOLD值,定义在索引数据块中为IOT保留空间的百分比,按索引组织的表 (IOT),创建按索引组织的表须提供如下信息,按索引组织的表 (IOT),例6:创建学生相关表,在列之外定义约束。 EXA_05_06.SQL,簇表,一个簇由共享相同数据块的一组表组成,(1) 减少磁盘I/O次
12、数,(2) 改善了访问簇表的连结所花的时间,(3) 簇键是簇表所共有的,减少了所需存储空间,创建簇表,创建簇表需经历两个步骤(1) 创建簇(2) 基于簇创建簇表,例7:创建一个名为emp_dept 的簇,包含deptno列,然后基于该簇创建簇表。 EXA_05_07.SQL,创建簇的简要语法,创建簇表在表的物理存储部分指明使用某个簇CLUSTER cluster ( column, column . ),CREATE CLUSTER schema.cluster ( column datatype , column datatype. ) ;,创建簇索引,簇表只有在创建簇索引之后才可用,例8:
13、为emp_dept 簇创建簇索引,并进行簇索引的使用测试。 EXA_05_08.SQL,创建簇索引语法,一般应为簇索引指定单独的表空间,CREATE INDEX index_name ON CLUSTER cluster_name index_attributes ;,删除簇,删除簇及其簇索引语法 DROP CLUSTER table INCLUDING TABLES ;,例8:创建一个名为emp_dept 的簇,包含deptno列,然后基于该簇创建簇表。 EXA_05_08.SQL,例: DROP CLUSTER emp_dept; DROP CLUSTER emp_dept INCLUDI
14、NG TABLES;,簇表的删除同普通表的删除 簇索引的删除同普通索引的删除,分区表,实现快速存取有大量数据的表的有效方法是创建和使用分区表和分区索引,每个分区可以被单独管理,将分区存储到不同的表空间有如下好处(1) 减少读写数据的I/O操作在多个分区中冲突的可能性(2) 可以单独备份和恢复每个分区(3) 控制分区与磁盘驱动器之间的映射,平衡I/O 负载(4) 改善可管理性、可用性和性能,分区操作标准DML语句来说是透明的,可在DML 中使用分区扩展表以利用分区的优点,范围、散列、列表和组合分区4种分区方法,范围分区表,将行映射到基于某列值范围的分区 当数据在整个范围中能被均等地划分成几个小区
15、间时性能最好,创建范围分区时必须指定:,范围区间用分区列的值从小到大分段表示 用MAXVALUE关键字表示可能的最大值,(1) 分区方法:范围(by range)(2) 分区的列(3) 标识分区边界的分区描述,范围分区表,范围分区语法,指定范围区间的语法,例9:按雇员工资建立范围分区表part_emp。 EXA_05_09.SQL,散列分区表,基于分区键的哈希散列值将行映射到分区中,创建散列分区时需要指定:(1) 分区方法:哈希散列(by hash)(2) 分区列(3) 分区数量或单独的分区描述,HASH散列分区语法图,单独指定各散列分区存储属性,例10:创建散列分区雇员表hash_emp,分区列是雇员编号empno。该表4个分区的名字由系统产生,并将分区分别放到4个名为ts1ts4的表空间中 EXA_05_10.SQL,散列分区表,散列分区表,给定数量的方法指定散列分区,例11:创建部门哈希散列表。指定各个散列分区的名字及其所属的表空间。在表一级上明确地为每个散列分区段指定初始磁盘区间的大小,并且所有分区都继承这个属性。 EXA_05_11.SQL,