第四章 ORACLE表管理_第1页
第四章 ORACLE表管理_第2页
第四章 ORACLE表管理_第3页
第四章 ORACLE表管理_第4页
第四章 ORACLE表管理_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章

ORACLE数据库对象表4.1ORACLE表和数据类型第四讲Oracle数据表

4.2DUAL表4.3常规表(堆表)(NormalTable)4.5索引组织表(IndexOrganizedTableIOT)4.6对象表(ObjectTable)4.7嵌套表(NestedTable)4.8其他表4.4分区表(PartitionsTable)

重点掌握各种类型表的创建方法了解常规表、分区表、索引组织表和对象表的物理组织形式及其特点了解各种表的使用场合

4.1ORACLE表和数据类型表是数据库数据存储的基本单元,它对应于显示世界中的对象(部门和雇员等)。当进行数据库设计时,需要构造E-R图,在将E-R图转变为数据库对象时,实体最终要转换为数据库表。4.1.1ORACLE表简介BOSTONOPERATIONS40CHICAGOSALES30DALLASRESEARCH20NEWYORKACCOUNTING10LOCDNAMEDEPTNO表中存储的数据的逻辑结构是一张由行列组成的二维表。表中的一行又叫一条记录,或一个元组。一条记录描述一个实体;一列描述实体的属性,如部门有部门代码、部门名称、位置等属性,每个列还具有列名、数据类型、长度、约束条件、默认值等等。

ROWID是表的伪列,ROWID给出了表行的物理位置,用来唯一的标识表行。是定位表行最快的方式,它与其他列一样可以直接查询。ROWID在数据文件中其数据是掩码格式存放,所以一般用户不能直接读懂它的内容。而必须用包DBMS_ROWID进行转换。

4.1.2ORACLE数据行的物理标识rowid4.1ORACLE表和数据类型selectdeptno,dname,rowidfromscott.dept;selectdeptno,dname,rowid,dbms_rowid.rowid_relative_fno(rowid)file#,dbms_rowid.rowid_block_number(rowid)block#,dbms_rowid.rowid_row_number(rowid)row#fromscott.dept;为DEPT表的DEPTNO建立索引,分析数据库是如何存储索引信息的?如何利用索引来加快查找速度的?用户表空间DEPTROWIDDEPTNO其他列rowid110CHICAGOG1rowid230NEWYORKG1rowid340DALLASG2rowid420BOSTONG2形成索引列表rowid340rowid230rowid420rowid110INDEX_DEPTNO索引表空间Select*fromdeptWheredeptno=20

最大长度4000chars根据字符集而定的可变长度字符串(以字符为单位)VARCHAR2(nchar)

最大长度2000chars根据字符集而定的固定长度字符串(以字符为单位)CHAR(nchar)可做索引的最大长度749最大长度4000bytes可变长度的字符串(以字节为单位)VARCHAR2(n)

最大长度2000bytes固定长度字符串(以字节为单位)CHAR(n)其它说明

限制条件中文说明字段类型字符型4.1.3ORACLE基本数据类型(PAGE40)

4.1ORACLE表和数据类型

注解:因为char类型总是会用空格填充使之达到一个固定宽度,无论在是表段中还是索引段中,它都会占用很大的存储空间。NUMBER(63),精度更高实数类型REALNUMBER(38),双精度浮点数类型FLOAT小的整数NUMBER(38)整数类型INTEGER/INTP为整数位,S为小数位数字类型DECIMAL(P,S)/NUMERIC(P,S)精度13位;范围-10308.25--10308.25在内存中占9个字节双精度浮点数类型BINARY_DOUBLE精度6位;范围-1038.53--1038.53;在内存中占5个字节单精度浮点数类型BINARY_FLOATP为总位数,S为小数位;精度P<=38;长度0~22字节,范围10e-130~10e126数字类型NUMBER(P,S)

数值型4.1.3ORACLE基本数据类型

为数值型分配存储空间的公式:

Round((length(number)+s)/2)+1

当number>=0s=0;当number<0s=14.1ORACLE表和数据类型

注解:number可以很精确的存储数值;如果对科学数据执行数据挖掘或进行复杂的数值分析,精度损失往往是可以接受的,使用binary_float、binary_double可能会得到非常显著的性能提升。字段类型中文说明限制条件DATE(1)固定日期/时间格式;(2)7字节宽度描述世纪、年、月、日、时、分、秒7个属性;(3)使用DUMP函数,可查看实际存储。默认格式DD-MM-YY(HH-MI-SS),可以通过修改nls_language和nls_date_format两个参数来更改日期的显示。TIMESTAMP(n)(1)与DATE类似;存储方式与DATE相同;(2)支持小数秒N的取值为0~9INTERVAL时间量4.1ORACLE表和数据类型日期时间型4.1.3ORACLE基本数据类型

注解:date类型世纪和年份采用一种“加100”表示法来存储。月和日采用自然的存储方式。时、分、秒采用“加1”表示法存储。4.1ORACLE表和数据类型其他数据型4.1.3ORACLE基本数据类型

最大长度4000bytes二进制数据表中记录的唯一行号NROWID10bytes********.****.****格式,*为0或1数据表中记录的唯一行号ROWID最大长度4G存放在数据库外的二进制数据BFILE最大长度4G根据字符集而定的字符数据NCLOB最大长度4G字符数据CLOB最大长度4G二进制数据BLOB最大长度2G可变长度的二进制数据LONGRAW最大长度2000bytes固定长度的二进制数据RAW最大长度2G(231-1)超长字符串LONG4.2DUAL表

DUAL表属于SYS模式,它在数据字典创建时自动建立。DUAL表只有一列和一行,列名为dummy。由于ORACLE中大部分操作都必须在表中,如对一个代数表达式求值,可以在该表上使用SELECT命令计算一个常量表达式。

DUAL表在此充当了那些表达式的包罗万象的容器。SQLServerClientSomeQueryResultsdummydual4.3常规表(NormalTable)创建常规表的方法和过程3创建常规表前准备工作2常规表及其特征1DDLTABLESPACE数据定义命令usersTABLE1表结构的查看与维护4常规表及其特征14.3常规表(NormalTable)常规表又叫叫做堆组织表((heap),它是一个无序行集合合,并不是以以某种特定定的顺序来来存储数据据。堆是计算机机领域中深深入研究的的一种经典典的数据结结构,它的的特点是会会将数据放放在最合适适的地方,,而不是按按照某种特特定顺序来来放置。Example:建立一个测测试表t,数据库中中的每个数数据块刚好好能放一个整整行(数据据库块是8KB),向表中插入入多条记录录,验证记录存存储的无序序性。根据据数数据据需需求求分分析析设设计计数数据据库库表表的的模模式式,应该该使使用用范范式式来来规规划划每每个个表表。。定义义表表列列时时,,应应选选择择合合适适的的数数据据类类型型和和长长度度。。确定定表表中中所所需需要要的的完完整整性性约约束束。。规划划表表的的位位置置,,将将表表部部署署在在特特定定的的表表空空间间上上(USERS表空空间间)。预计计和和规规划划表表的的大大小小。。在在oracle10G中,,通通过过OEMDatabasecontrol估算算表表大大小小。。用户户与与权权限限问问题题。。(CREATEANYTABLE、CREATETABLE、UNLIMITEDTABLESPACE)4.3常规规表表(NormalTable)创建常规表前准备工作24.3常规规表表(NormalTable)report_card学生生成成绩绩管管理理数数据据库库deptcoursestudent实例例::学学生生成成绩绩管管理理项项目目数数据据库库设设计计dept字段名注释类型长度备注dept_no部门编号varchar28PKdept_name部门名称varchar240dept_mng部门经理varchar28address地址varchar280cont部门人数numberstudent字段名注释类型长度备注student_no学号varchar212PKstudent_name姓名varchar210dept_no部门编号varchar28FKsex性别varchar21CKtype学生类型varchar21CKhiredate入学日期dateprovince籍贯varchar220empid身份证号varchar225address详细地址varchar260borndate出生日期datespeciality所学专业varchar220nation民族varchar220htelno电话Varchar220money缴费总计Number(10,2)remarks备注Varchar280course字段名注释类型长度备注course_no课程号varchar28PKcourse_name课程名称varchar240grade开设年级varchar28period学时数numberreport_card字段名注释类型长度备注student_no学号varchar212FKcourse_no课程号varchar28FKterm学期varchar28result成绩number(5,2)remark备注varchar2804.3常规规表表(NormalTable)创建常规表的方法和过程3使用CreateTable脚本在SQLPlus环境中实现。使用OEM控制台通过图形界面面创建表结构构。在原来已有表的的基础上建立新表。4.3常规表(NormalTable)使用CreateTable脚本创建常规表Createtableschema.table_name(列名1类型(长度))列约束,列名2类型(长度))列约束,……,表约束)PctfreenPctusednInitransnMaxtransnTablespacetablespace_nameStorage(InitialnNextnPctincreasenMinextentsnMaxextentsn)指定表的每一个数据块为Update操作所保留的空间百分比,默认10指定在数据块上可以重新插入数据的已用空间最低百分比。

指定可同时对表所有块进行更新操作的最小和最大的事务数将所创建的表部署到规定的表空间中指定表第一个区的大小。指定初始扩展区的大小.指定扩展区递增的百分比。NEXT=(1+n/100)*Old_next指定为表段分配的区数的最小值和最大值。Createtabletest(anumber)

storage(initial100Knext100Kminextents2maxextents100pctincrease100);4.3常规表(NormalTable)示例:以新用户zhang登录,在方案zhang下创建学生成成绩管理项目四个个表。zhangCREATETABLEZHANG.dept(DEPT_NOvarchar2(8),DEPT_NAMEvarchar2(40),DEPT_MNGvarchar2(8),ADDRESSvarchar2(80),CONTnumber,PRIMARYKEY(DEPT_NO))pctfree20pctused50tablespaceusersstorage(initial100knext100kminextents2maxextents100pctincrease0);使用OEM创建常规表4.3常规表(NormalTable)示例:创建学生基本本信息表student,包含student_no等15个字段。其中中student_no为主键;student_name非空;dept_no参照与表dept中的dept_no的取值;type取值仅为1、2、3;sex取值只能为0或1。该表的表空间间为users,保留用于更更新的空闲空空间的百分比比为10%,并发事务个数初初始值为2个,最多并发发255个事务。为表分配的区区最少为2个,最多为20个,第一个区区大小为64K,第一个扩展区的大小小为64K,随着数据量量的增加新分分配的区相对对于上一个区区增长50%.通过Createtable…...asselect……….语句(Createtable嵌套子查询,简称CTAS),可以基于原原有的表或视视图来创建新新表,而不必必逐个定义列列。当新表与与原表结构相相似或者新表表需要使用原原表中大量数数据时很有必必要采用这种种方式。4.3常规表(NormalTable)CTAS方法建立常规表语法一:createtable<table_name>[NOLOGGING]asselect<selected_column_name>fromtable_old[wherecondition];语法二:createtable<table_name>[NOLOGGING]asselect<selected_column_name>fromtable_oldwhere1=2;建议使用NOLOGGING选项。如果不不使用这个选选项,则每插插入一条记录录都将会产生生重做日志信信息,占用了了空间和时间间。注意:不能修改列的的数据类型和和长度,新表表中的数据类类型和长度都都必须和查询询中的一致。。SELECT语句中不能包包含大对象数数据类型和LONG数据类型。约束性条件和和列的默认值值定义都不会会被复制。建议使用NOLOGGING选项。如果不不使用这个选选项,则每插插入一条记录录都将会产生生重做日志信信息,占用了了空间和时间间。4.3常规表(NormalTable)CTAS方法建立常规表4.3常规表(NormalTable)表结构的查看与维护4查看表结构修改表结构删除表结构可通过数据字字典dba_tables、all_tables、user_tables查看表的定义义信息如:SELECTowner,tablespace_name,pct_free,pct_used,initial_extent,next_extent,min_extents,max_extentsFROMdba_tablesWHEREtable_name=’STUDENT’;可通过查询数据字典典dba_tab_columns、dba_constraints查看表的字段段信息与约束束信息。通过SQL命令修改表的的语法格式如如下所示:ALTERTABLE[schema.]table_nameRENAMETONewTablenameADD[col_namedatatype][DEFAULTexpression][col_constraint]MODIFY[col_namedatatype][DEFAULTexpression][col_constraint]DROPCOLUMNcol_name(col_name1,col_name2)SETUNUSEDCOLUMNcol_nameDROPUNUSEDCOLUMNSSTORAGE子句;查看表结构修改表结构删除表结构使用renameto子句修改表名名使用ADD、MODIFY和DROP子句来修改列列定义使用STORAGE子句来修改存存储参数及区区分配参数删除表的结构构:Droptableschema.tablename[cascadeconstraints][purge]备注:不仅会删除了了表中的数据据,还会删除表结结构。这条命命令是不能回回退的,所以以,删除表的的时候应格外外小心。恢复被删除表表:FLASHBACKTABLEschema.tablenameTOBEFOREDROP各类分区表的创建和使用3分区表的定义和类型2引入分区表的目的14.4分区表表(PartitionsTable)分区表的维护4访问一一季度度数据据

一季度数据二季度数据三季度数据四季度数据P1分区段P2分区段P3分区段P4分区段10G4.4分区表表(PartitionsTable)2003年Sales表段假设一一张销销售表表SALES年数据据总量量达到到10G,每个个季度度平均均2.5G。现在在执行一条条SQL语句访访问SALES表中的的第一一季度度销售售总额额。这这时候候服务务器进进程会会对SALES表进行行全表表扫描描。如如果我我们使使用分分区表表把四四个季季度的的数据据分别别存放放到不同的的分区区中,,当统统计某某一季季度销销售数数据只只需要要扫描描2.5G数据,,提高高I/O性能。。引入分区表的目的1引入分区表的目的12.5Goracle允许用用户将将一个个表分分成多多个分分区用户可可以只只访问问表中中的特特定分分区,,避免免全表表扫描描,降降低磁磁盘I/O,提高访访问性性能将不同同的分分区存存储在在不同同的磁磁盘,,均衡衡分布布I/O,提高高访问问性能能可以独独立地地备份份和恢恢复每每个分分区,,提高高系统统健壮壮性、、可靠靠性及及可用用性4.4分区表表(PartitionsTable)分区是是一种种方法法,它它将一一个大大表从从逻辑辑上根根据某某些条条件把数数据分分成若若干个个较小小的且且更容容易管管理的的区分区段段(表)。分区表表是一一种特特殊的的常规规表。。按照分分区的的方式式可将将分区区表分分为::范围分分区((RangePartitioning)散列分分区((HashPartitioning)列表分分区((ListPartitioning)复合分分区(CompositePartitioning)--复合范范围-散列分分区(CompositeRange-HashPartitioning)--复合范范围-列表分分区(CompositeRange-ListPartitioning)分区表的定义和类型2分区表的定义和类型2各类分区表的创建和使用3各类分区表的创建和使用34.4分区表表(PartitionsTable)范围分分区(RangePartitioning)根据表表中某某一列列值的的范围围(通常是基基于时时间的的范围围),将表表中的的行映射到各各个分区。。适用场合:当数据量较较大且跨时时间范围均匀分布数数据时,非非常适合于于创建范围分区区表,这时时的表性能能是最佳的。范围分区示示例:假设一张销销售表SALES(customer_id销售单号、、sales_amount销售额、sales_date销售日期))年数据总总量达到10G,每个季度度平均2.5G。创建范围围分区表,,将一、二二、三、四季度的销销售数据存存放到不同同分区段((p1,p2,p3,p4)中。操作:1)范围分区区表的创建建:OEM实现、SQL脚本实现。。2)查看范围围分区表的的分区情况况3)使用范围围分区表范围分区(RangePartitioning)SALES范围分区表表的创建::CREATETABLEsales(customer_idnumber(3),sales_amountnumber(10,2),sales_dateDATE)PARTITIONBYRANGE(sales_date)(PARTITIONp1VALUESLESSTHAN('01-APR-2003')TABLESPACEusers,PARTITIONp2VALUESLESSTHAN('01-JUL-2003')TABLESPACEusers,PARTITIONp3VALUESLESSTHAN('01-OCT-2003')TABLESPACEusers,PARTITIONp4VALUESLESSTHAN('01-JAN-2004')TABLESPACEusers);步骤一::创建分分区表SALES(1)OEM方式创建建(2)命令方方式创建建范围分区区的语法法:PARTITIONBYRANGE(column_name)(PARTITIONpart1VALUELESSTHAN(range1)TABLESPACEtablespace_name,PARTITIONpart2VALUELESSTHAN(range2),TABLESPACEtablespace_name,...[PARTITIONpartNVALUELESSTHAN(MAXVALUE)]);根据该列列创建分分区分区的名名称该分区包包含低于于range1值的数数据信息息,并将将该分区区部署到到相应的的表空间间范围分区区(RangePartitioning)范围分区区表SALES的创建::createtablezhang.sales(customer_idnumber(3),sales_amountnumber(10,2),sales_dateDATE)PARTITIONBYRANGE(sales_date)(PARTITIONp1VALUESLESSTHAN('01-APR-2003'),PARTITIONp2VALUESLESSTHAN('01-JUL-2003'),PARTITIONp3VALUESLESSTHAN('01-OCT-2003'),PARTITIONp4VALUESLESSTHAN('01-JAN-2004'));SQL脚本创建建sales表:步骤二::查看和和使用分分区表SALES(1)通过OEM或者查询询数据字字典视图图user_segments,查看分区段信息息。SQL>COLsegment_nameformata10;SQL>SELECTtablespace_name,segment_name,partition_nameFROMuser_segmentsWHEREsegment_name='SALES';(2)当在分分区表上上执行DML操作时,,ORACLE会根据分分区列值值的范围在相相应的分分区上执执行操作作(T10.SQL)SQL>insertintosalesvalues(1,28500,’25-JAN-2003’);SQL>select*fromsales全表扫描描wheresales_date=to_date(’25-JAN-2003’,’’dd-mon-yyyy’’);SQL>select*fromsalespartition(p1)分区扫描描wheresales_date=to_date(’25-JAN-2003’,’’dd-mon-yyyy’’);范围分区区(RangePartitioning)各类分区表的创建和使用3各类分区表的创建和使用3散列(哈希)分区(HashPartitioning)散列分区区是指按按照ORACLE所提供的散列列(HASH)函数,计算列值值数据,并最最终按照照函数结结果将数数据均匀的部署在在不同的的分区中中。适用场合合:不符合时时间范围围分区且且需要均均匀分布数据据的场合合。4.4分区表(PartitionsTable)散列分区区示例::创建一张张产品编编码表PRODUCT(product_id产品编号号,description产品名称称),将产品品编码的的信息均均匀的部部署在两两个不同的逻辑辑分区上上,插入入示例数数据进行行验证。。操作:1)散列分区表表的创建:OEM实现、SQL脚本实现。2)查看散列分分区表的分区区情况3)使用散列分分区表散列(哈希)分区(HashPartitioning)创建散列分区区表product(1)OEM方式创建PARTITIONBYHASH(column_name)(PARTITIONpart1[TABLESPACEtbs1],PARTITIONpart2[TABLESPACEtbs2],...PARTITIONpartN[TABLESPACEtbsN]);散列(哈希)分区(HashPartitioning)(2)命令方式创建根据该列创建建分区分区的名称将各个分区部部署到指定的的表空间散列分区表product的创建:duct(product_idnumber(6),descriptionvarchar2(30))PARTITIONBYHASH(product_id)(PARTITIONp1tablespaceusers,PARTITIONp2tablespaceusers);(1)通过OEM或者查询数据据字典视图user_segments,查看分区段信息。SQL>COLsegment_nameformata10;SQL>SELECTtablespace_name,segment_name,partition_nameFROMuser_segmentsWHEREsegment_name=‘‘PROCUDT';(2)插入示例数数据T11.sql,观察数据的的分布。散列(哈希)分区(HashPartitioning)查看和使用散散列分区表product各类分区表的创建和使用3各类分区表的创建和使用3列表分区(listPartitioning)列表分区是专专门用于数据据建模的离散值分布的的一种分区方方式,它可以以将离散散数数据据((如如城城市市、、地地域域))有效效的的部署署到到不不同同的的分分区区中中。。适用用场场合合::大型型表表中中有有一一些些关关于于城城市市、、地地域域或类类似似的的属属性性值值且且大大部部分分应应用用基基于于不不同的的地地域域或或城城市市来来进进行行的的情情况况下下。。4.4分区区表表(PartitionsTable)列表表分分区区示示例例::某公公司司(在在全全国国北北京京、、上上海海、、重重庆庆、、广广州州、、南南京京、、武武汉汉六六个地地区区均均有有销销售售点点))经常常需需要要以以地地理理位位置置统统计计销销售售数数据据,,比比如如统计计上上海海的的销销售售数数据据,,统统计计北北京京的的销销售售数数据据等等等等。。由由于于数数据据量量大,,公公司司建建议议将将数数据据存存储储在在不不同同的的分分区区上上,,避避免免查查找找信信息息的的时时候扫扫描描全全表表增增加加开开销销。。根根据据以以上上要要求求为为该该公公司司建建立立销销售售数数据据表表SALES_BY_REGION(deptno部门门编编号号,dname部门门名名称称,quantity_sales销售售数数量量,city部门门所所在在城城市市))。。列表表分分区区((ListPartitioning)创建建散散列列分分区区表表SALES_BY_REGION(1)OEM方式式创创建建列表表分分区区((ListPartitioning)(2)命令令方式式创创建建PARTITIONBYLIST(column_name)(PARTITIONpart1VALUES(values_list1),PARTITIONpart2VALUES(values_list2),...PARTITIONpartNVALUES(DEFAULT));根据据该该列列(离散散值值如如地地理理位位置置)创建建的的列列表表分分区区分区区的的名名称称包含含values_list1值的的记记录录列表表分分区区sales_by_region的创创建建::createtablesales_by_region(deptnonumber,dnamevarchar2(20),quantity_salesnumber(10,2),cityvarchar2(10))PARTITIONBYLIST(city)(PARTITIONp1VALUES('北京京','上海海'),PARTITIONp2VALUES('重庆庆','广州州'),PARTITIONp3VALUES('南京京','武汉汉'));各类分区表的创建和使用3各类分区表的创建和使用3复合合分分区区((CompositePartitioning)组合合范范围围-散列列分分区区(CompositeRange-HashPartitioning)首先先用用范范围围分分区区对对表表进进行行分分区区,然后使使用用散散列列模模式式将将每每个个分分区区再再分分区区。。该分分区区方方式式既既具具有有范范围围分分区区良良好好的的逻逻辑辑管理理性性,还提提供供了了散散列列分分区区均均匀匀分分布布数数据据的优优势势。。4.4分区区表表(PartitionsTable)某公公司司的的销销售售单单表表sales_order包含含销销单单编编号号order_id、销销售售日日期order_date、产产品品编编号号procduct_id和数数量量quantity四个字字段,,但是该表表按照照逻辑辑范围围分区区后,,不同同范围围的数数据分分布不不均匀匀,试试通过范范围/散列((基于于order_id)组合合分区区有效效的部部署销销售单单表的的数据。。组合范范围-散列分分区(CompositeRange-HashPartitioning)示例createtablesales_order(order_idnumber,order_datedate,product_idnumber,quantitynumber)PARTITIONBYRANGE(order_date)SUBPARTITIONBYHASH(order_id)SUBPARTITIONS2(PARTITIONp1VALUESLESSTHAN('01-APR-2001'),PARTITIONp2VALUESLESSTHAN('01-JUN-2001'),PARTITIONp3VALUESLESSTHAN('01-OCT-2001'),PARTITIONp4VALUESLESSTHAN('01-JAN-2002'));创建的的四个个范围围分区区的名名称在表的的order_date列中创创建范范围分分区在每个个范围围分区区中创建2个散列列子分分区各类分区表的创建和使用3各类分区表的创建和使用3复合分分区((CompositePartitioning)组合范范围-列表分分区(CompositeRange-HashPartitioning)组合范范围-列表分分区(CompositeRange-ListPartitioning)首先用用范围围分区区对表表进行行分区区,然后用用列表表分区区的方方法将每每个分分区再再进行行分区区。用用户既既可以以按照照时间间范围围来访访问数据据(在在分区区内访访问)),也可可以按按照指指定地地理位位置来来访问数数据((在子子分区区内)),,通通过减减少访访问的的数据据量,,来进一步步提高高访问问的性性能。。组合范范围-列表分分区(CompositeRange-HashPartitioning)示例创建组组合范范围-列表分分区表表createtablesales_region(deptnonumber,sale_datedate,sale_amountnumber,cityvarchar2(10))PARTITIONBYRANGE(sale_date)SUBPARTITIONBYLIST(CITY)(PARTITIONr1_2003VALUESLESSTHAN(to_date(‘1-JUL-2003’’,’’DD-MON-YYYY’’))TABLESPACEusers(SUBPARTITIONr1_2003_1VALUES('北京','上海'),SUBPARTITIONr1_2003_2VALUES('重庆','广州'),SUBPARTITIONr1_2003_3VALUES('南京','武汉')),PARTITIONr2_2003VALUESLESSTHAN(to_date(‘1-JAN-2004’’,’’DD-MON-YYYY’’))TABLESPACEusers(SUBPARTITIONr2_2003_1VALUES('北京','上海'),SUBPARTITIONr2_2003_2VALUES('重庆','广州'),SUBPARTITIONr2_2003_3VALUES('南京','武汉')));分区表的维护4分区表的维护44.4分区表表(PartitionsTable)语法格式:ALTERTABLE

表名ADDPARTITION

分区名;例:在散列分区表product尾部增加分区p3。ALTERTABLEproductADDPARTITIONp3tablespaceusers;增加分区语法格式:ALTERTABLE

表名

SPLITPARTITION

分区名

AT(分区列值)

INTO(PARTITION

子分区1,PARTITION子分区2);

例:在范围分区表sales的中间增加分区;ALTERTABLEsalesSPLITPARTITIONp3AT('01-AUG-2003')INTO(PARTITIONp3_1,PARTITIONp3_2);分割分区语法格式:ALTERTABLE表名

MERGEPARTITION子分区名INTOPARTITION分区名;

例:将sales表分区p3_1,p3_2合并成一个分区p3。ALTERTABLEsalesMERGEPARTITIONSp3_1,p3_2INTOPARTITIONp3;合并分区语法格式:ALTERTABLE表名

RENAMEPARTITION旧名

TO新名;例:将sales表分区p3更名为p3_1。ALTERTABLEsalesRENAMEPARTITIONp3TOp3_1;重命名分区语法格式1:ALTERTABLE表名

DROPPARTITION分区名;语法格式2:ALTERTABLE

表名TRUNCATEPARTITION

分区名;例:将sales表分区p3_1中的数据删除掉。删除分区语法格式1:ALTERTABLE分区表

EXCHANGEPARTITION分区名

WITHTABLE常规表

例:将sales表p1分区中的数据导入到同结构的常规表sales_1表中;模拟故障删除P1分区中的数据,然后将sales_1表中的数据还原到sales表的p1区中.交换分区分区维护操作有:添加分区拆分分区合并分区重命名分区删除分区交换分区1234564.4分区表表(PartitionsTable)分区表小结5分区表小结5表分区区为了简简化数数据库库大表表的管管理,,例如如在数数据仓仓库中中一般般都是是TB级的数数量级级。Oracle8以后推推出了了分区区选项项,分分区将将表分分离在在若干干不同同的表表空间间上,,用分分而治治之的的方法法来支支撑无无限膨膨胀的的大表表,提提高大大表在在物理理一级级的可可管理理性。。将大大表分分割成成较小小的分分区可可以改改善表表的维维护、、备份份、恢恢复、、事务务及查查询性性能。。分区的的优点点1.增强可可用性性2.减少关关闭时时间3.维护轻轻松4.均衡I/O5.改善性性能6.分区对对用户户透明明索引组织表与常规表的使用比较3创建索引组织表2索引组织表及特征1索引组织表的优势分析44.5索引组组织表表(IndexOrganizedTableIOT)叶子数数据块块中存存储以以排好好序的的索引主主键以以及记记录对对应的的物理理地址rowid,根据据rowid定位记记录。。4.5索引组组织表表(IndexOrganizedTableIOT)索引组织表及特征1索引组织表及特征1…………建立B树索引…数据是是按照照主键键顺序序存放放在叶子子数据据块中中。找找到主主键也就找找到完完整的的数据据记录录。…………索引组组织表表拥有有索引引和表表两者者的特特征。。索引引组织织表是是以B-树索引引结构构存储储数据据的表表,它将表表的数数据((非主主键列列)和和索引引字段段(主主键列列)一一同存存储在在索引引段中中。因此此找到到记录录的主主键也也就找找到了了相应应记录录的完完整内内容。。索引组组织表表的缺缺点::数据块块中的的数据据会随随着记记录的的插入入、删删除等等操作作在数数据块块之间间移动动,因此而而产生生开销销,适适用于于OLAP,不适用用OLTP.1..5051..100101..150……10000..100500..1011..1920..25……42..5051..5859..6364..75……98..1001,rowid2,rowid3,rowid……10,rowid11,rowid12,rowid13,rowid……19,rowid10021,rowid10022,rowid10023,rowid……10028,rowid10046,rowid10047,rowid10048,rowid……10050,rowid………………10000..1000910010..1002010021..10028……10046..10050100501004910048…975431备注价格规格名称产品编码4.5索引组组织表表(IndexOrganizedTableIOT)创建索引组织表2创建索引组织表2建立索索引组组织表表的关关键建表的的同时时必须须定义义主键键。创建索索引组组织表表EMP_WORK,包括括员工工编号号empnovarchar2(8),工作日日期work_date两个字字段,,并检检查是是否创创建成成功。。createtableemp_work(empnovarchar2(8),work_datedate,constraintpk_ewprimarykey(empno,work_date))organizationindex;测试索索引组组织表表物理理存储储的有有序性性t15.sql。4.5索引组组织表表(IndexOrganizedTableIOT)索引组织表与常规表的使用比较3索引组织表与常规表的使用比较3例:假假设设每个个员工工都有有3~4个(或者者更多))的(地地址)详详细记录录,但是是这些详详细记录录是随机机到来的的。创建建员工详详细地址址表包括括员工编编号empno,地址类型型addr_type,街道street,城市city,州state,邮政编码码zip,主键为为(empno,addr_type)。要求:将同一员员工的地地址信息息尽量存存储在相相同的或或邻近的的数据块块上,以便在反反复获取取记录时时,减少系统统访问的的工作量量.分析:由由于员工工的地址址信息是是随机到到来的,,那么同同一员工工的各个个地址存存放在同同一个数数据块或或临近数数据库块块上概率率基本接接近于0,但是我我们在执执行SQL操作的时时候又希希望总是是把所有有地址详详细记录录都取出出来。因因此,建建议对该该地址表表使用IOT表,每插插入一个个员工地地址,都都会根据据索引主主键将记记录插入入与该员员工其他他地址相相互“靠靠近”的的地方,,这样在在反复获获取记录录时,可可以减少少工作量量。10002workRTstreetbostonAD32334empnoAddr_typestreetcitystatezip10001homeADTstreetchicagoAC6544310001workmainstreetWashingtonDC2013210002homemainstreetWashingtonOP3828210002workRTstreetbostonAD3233410001homeADTstreetchicagoAC6544310001workmainstreetWashingtonDC2013210002homemainstreetWashingtonOP38282将地址表表实现为为常规表表,数据据的具体体存储将地址表表实现为为索引组组织表,,数据的的具体存存储10002workRTstreetbostonAD32334empnoAddr_typestreetcitystatezip10001homeADTstreetchicagoAC6544310001workmainstreetWashingtonDC2013210002homemainstreetWashingtonOP3828210002workRTstreetbostonAD3233410001workMainstreetWashingtonDC2013210001homeADTstreetchicagoAC6544310002homemainstreetWashingtonOP3828210001workmainstreetWashingtonDC2013210002homemainstreetWashingtonOP382824.5索引组织织表(IndexOrganizedTableIOT)1、将EMP表设置为为主表,,EMPNO为其主关关键字。。将其子子表(员员工的详详细地址址表),,用堆组组织表和和索引组组织表的的方式实实现两次次。创建EMP表并填充充测试数数据;将员工详详细地址址表创建建为索引引组织表表iot_addresses;将员工详详细地址址表创建建为堆组组织表heap_addresses;2、分别向向heap_addresses、iot_addresses表中插入入大量示示例数据据。3、启用SQLTRACE工具查看看以下两两条SQL语句的CPU使用情况况。select*fromemp,heap_addresseswhereemp.empno=heap_addresses.empnoandemp.empno=42;select*fromemp,iot_addresseswhereemp.empno=iot_addresses.empnoandemp.empno=42;①使用索引引组织表可快快速准确地进进行匹配查找找或根据主关关键字在一定定范围内的查查询。一旦找找到键值,在在该位置中也也找到其余数数据。这样消消除了频繁的的I/O操作。②最适合数数据库24x7状态下的表结结构,当数据据库必须保持持随时联机状状态时,可联联机重新组织织IOT,无需重建其其辅助索引。。③减少了存存储需求。关关键字列与表表和索引并不不重复,也不不需要额外存存储rowid。当关键字列列占据了一行行的大部分时时,可节省存存储空间。4.5索引组织表(IndexOrganizedTableIOT)索引组织表的优势分析4索引组织表的优势分析44.6对象表(ObjectTable)传统关系型仅仅支持简单数数据类型;不不支持数组、、嵌套和递归归的数据结构构,给新型数数据模型-面向对象的数数据模型(OODBS)提供了应用背背景。目前,以关系数据库库和SQL为基础扩展关关系模型以及及对象关系数据据库(ORDBMS)的发展满足了了许多应用需需求。ORACLE、DB2UDB、INFORMIX都推出ORDBMS,ANSI/ISO发布的SQL-99标准是一个对对象关系标准准。姓名职务家属关系姓名张家口职员妻子李小玫儿子张冠李柴米油经理妻子陆续琴郝成功职员妻子朱那亚儿子郝乃军女儿郝佳欣employeeseidenameJobnamesex0001赵子龙男经理0002张翌德男职员0003孟可飞女职员对象表的引入1对象表的引入1例:createtypenamesex_typeasobject(namevarchar2(8),sexvarchar2(2));创建对象类型2创建对象类型2一个对象类型型由多个成员员属性构成,ORACLE中对象类型由由Createtype语句创建,也可在OEM中创建。createtype类型名asobject(字段1类型(长度)),字段2类型(长度))……);/SQL*plus中创建对象类类型必须有/定义了一个对对象构造器。。4.6对象表(ObjectTable)employeeseidenameJobnamesex0001赵子龙男经理0002张翌德男职员0003孟可飞女职员4.6对象表(ObjectTable)基于对象类型创建对象表3基于对象类型创建对象表3createtableemployees(eidvarchar2(4),enamenamesex_type,jobvarchar2(6));4.6对象表(ObjectTable)操作对象表数据4操作对象表数据4通过对象构造造器为对象类类型字段赋值值typename(属性值)称为对象构造造器通过访问对象象字段的成员员属性,访问问成员值表名.对象属性.成员属性INSERTINTOemployeesVALUES('0001',namesex_type('赵子龙','男'),'经理');WHEREe.job='经理';SELECT*FROMemployeesWHEREe.ename.sex='男';employeeseidenameJobnamesex0001赵子龙男经理0002张翌德男职员0003孟可飞女职员4.7嵌套表(NestedTable)嵌套表的使用*3创建嵌套表2嵌套表及特征1嵌套表及其特点1嵌套表及其特点14.7嵌套表(NestedTable)嵌套表(nestedtable)是oracle对象关系扩展展的一部分,,它和关系模模型中传统的的“父/子表对”中的的子表很相似似。这是数据据元素的一个个无序集合,,所有的数据据元素的数据据类型都相同同,可以是一一个内置数据据类型,也可可以是一个对对象数据类型型。嵌套表的使用用方法:一种种是在PL/SQL代码中使用,,用来扩展PL/SQL语言。另一种种方法可作为为物理存储机机制,持久的的存储数据。。DEPTNODNAMELOC

10ACCOUNTINGNEWYORK20RESEARCHDALLAS

30SALESCHICAGO

40

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论