Oracle模式对象基础教案_第1页
Oracle模式对象基础教案_第2页
Oracle模式对象基础教案_第3页
Oracle模式对象基础教案_第4页
Oracle模式对象基础教案_第5页
已阅读5页,还剩175页未读 继续免费阅读

下载本文档

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

文档简介

第9章模式对象本章内容容模式概念念表管理索引管理理分区表与与分区索索引的管管理视图、序序列、同同义词、、数据库库链接管管理本章要求求掌握表的的管理掌握索引引的管理理掌握分区区的概念念及分区区管理了解视图图、序列列、同义义词、数数据库链链接等的的管理9.1模式模式概念念模式与用用户的关关系模式选择择与切换换模式概念念是指一系系列逻辑辑数据结结构或对对象的集集合。模式与用用户的关关系模式与用用户相对对应,一一个模式式只能被被一个数数据库用用户所拥拥有,并并且模式式的名称称与这个个用户的的名称相相同。通常情况况下,用用户所创创建数据据库对象象都保存存在与自自己同名名的模式式中。同一模式式中数据据库对象象的名称称必须惟惟一,而而在不同同模式中中的数据据库对象象可以同同名。默认情况况下,用用户引用用的对象象是与自自己同名名模式中中的对象象,如果果要引用用其他模模式中的的对象,,需要在在该对象象名之前前指明对对象所属属模式。。模式选择择与切换换如果用户户以NORMAL身份登录录,则进进入同名名模式;;若以SYSDBA身份登录录,则进进入SYS模式;如果以SYSOPER身份登录录,则进进入PUBLIC模式。9.2表创建表表约束的的管理表参数设设置修改表删除表利用OEM管理表9.2..1创建表表的创建建创建临时时表利用子查查询创建建表(1)表的创创建表的规划划与设计计表名称列的数量量列名称与与类型表约束表内部数数据的组组织方式式(标准准表、索索引化表表、分区区表)表存储位位置、存存储空间间分配等等。使用CREATETABLE语句创创建表CREATETABLEtable_name(column_namedatatype[column_level_constraint]][,column__namedatatype[column_level_constraint]]…][,table_level_constraint])[parameter_list]];CREATETABLEemployee((empnoNUMBER((5)PRIMARYKEY,,enameVARCHAR2(15),,deptnoNUMBER(3))NOTNULLCONSTRAINTfk_empREFERENCESdept(deptno))TABLESPACEUSERSPCTFREE10PCTUSED40STORAGE(INITIAL50KNEXT50KMAXEXTENTS10PCTINCREASE25));表名(table_name)必须是合合法标识识符,长长度为1~30字节,并并且以字字母开头头,可以以包含字字母(A~Z,a~z)、数字((0~9),下划划线(_)、美元元符号(($)和井号号(#)。此外外,表名名称不能能是Oracle数据库的的保留字字数据类型型(datatype))字符类型型数字类型型日期类型型LOB类型二进制类类型行类型CHAR(n)定长字符符串,n的取值范范围为1-2000字节VARCHAR2(n)可变字符符串,n取值范围围为1-4000字节自动调整整数据长长度NCHAR(n)用来存储储Unicode类型字符符串。NVARCHAR2((n)它用来存存储Unicode类型字符符串。LONG可变长字字符列,,最大长长度为2GB用于不需需设置成成索引的的字符,,不常用用字符类型型数字类型型NUMBER(m,n)用于存储储整数和和实数。。m表示数值值的总位位数(精精度),,取值范范围为1~38,默认为为38;n表示小数数位数,,若为负负数则表表示把数数据向小小数点左左边舍入入,默认认值为0。日期类型型DATE可以存储储的日期期范围为为公元前前4712年1月1日到公元元4712年1月1日,由世世纪、年年、月、、日、时时、分、、秒组成成。可以以在用户户当前会会话中使使用参数数NLS__DATE_FORMAT指定日期期和时间间的格式式,或者者使用TO_DATE函数,将将表示日日期和时时间的字字符串按按特定格格式转换换成日期期和时间间。TIMESTAMP[[(n)]:表示时时间戳,,是DATE数据类型型的扩展展,允许许存储小小数形式式的秒值值。n表示秒的的小数位位数,取取值范围围为1~9,默认值值为6。TIMESTAMP[[(n)]WITHTIMEZONE:通过存存储一个个时区偏偏差来扩扩展TIMESTAMP类型。时时区偏偏差值为为相对于于通用协协调时间间(或称称UTC,以前称称为格林林威治时时间或GMT)的时差差。TIMESTAMP[[(n)]WITHLOCALTIMEZONE与TIMESTAMP[[(n)]WITHTIMEZONE的不同之之处在于于,存储储日期时时直接转转换为数数据库时时区日期期,而读读取日期期时将数数据库时时区日期期转换为为用户会会话时区区日期。。INTERVALYEAR(n)TOMONTH存储以年年份和月月份表示示的时间间段。n是表示YEAR的最多数数字位数数,默认认为2。例如,,INTERVAL''2-11'YEARTOMONTH表示2年11个月。INTERVALDAY((m)TOSECOND(n)存储以天天数、小小时数、、分钟数数和秒数数表示的的时间段段。m是表示DAY的最多数数字位数数,默认认为2。n是表示SECOND的小数部部分的位位数,默默认为6。例如,,INTERVAL''510:30:40'DAYTOSECOND表示5天10小时30分40秒。LOB类型CLOB用于存储储可变长长度的字字符数据据,如文文本文件件等,最最大数据据量为4GB。NCLOB用于存储储可变长长度的Unicode字符数据据,最大大数据量量为4GB。BLOB用于存储储大型的的、未被被结构化化的可变变长度的的二进制制数据((如二进进制文件件、图片片文件、、音频和和视频等等非文本本文件)),最大大数据量量为4GB。BFILE用于存储储指向二二进制格格式文件件的定位位器,该该二进制制文件保保存在数数据库外外部的操操作系统统中,文文件最大大为4GB。二进制类类型RAW((n)用于存储储可变长长度的二二进制数数据,n表示数据据长度,,取值范范围为1~2000字节;LONGRAW用于存储储可变长长度的二二进制数数据,最最大存储储数据量量为2GB。行类型ROWID行标识符符,表中中行的物物理地址址的伪列列类型。。ROWID类型数据据由18位十六进进制数构构成,包包括对象象编号、、文件编编号、数数据块编编号和块块内行号号。UROWID行标识符符,用于于表示索索引化表表中行的的逻辑地地址。约束(constraint)在Oracle数据库中中对列的的约束包包括主键键约束、、惟一性性约束、、检查约约束、外外键约束束和空/非空约束束等5中,定义义方法有有表级约约束和列列级约束束2种。参数(parameter__list)在定义表表时,可可以通过过参数设设置表存存储在哪哪一个表表空间中中,和存存储空间间分配等等。(2)创建临临时表临时表中中的数据据在特定定条件下下自动释释放,但但其结构构将一直直存在。。根据临时时表中数数据被释释放的时时间不同同,临时时表分为为事务级级别的临临时表和和会话级级别的临临时表两两类。ONCOMMITDELETEROWS///事务级临临时表ONCOMMITPRESERVEROWS///会话级临临时表语法使用CREATEGLOBALTEMPORARYTABLE语句创建建临时表表使用ONCOMMIT子句说明明临时表表的类型型,默认认为事务务级别的的临时表表。事务级别别的临时时表是在在事务提提交时系系统自动动删除表表中所有有记录。。CREATEGLOBALTEMPORARYTABLEtran_temp((IDNUMBER((2)PRIMARYKEY,,nameVARCHAR2(20))ONCOMMITDELETEROWS;;会话级别别的临时时表是在在会话终终止时系系统自动动删除表表中所有有记录。。CREATEGLOBALTEMPORARYTABLEsess_temp((IDNUMBER((2)PRIMARYKEY,,nameVARCHAR2(20))ONCOMMITPRESERVEROWS;(3)利用子子查询创创建表语法CREATETABLEtable__name(column_name[[column_level_constraint][,column__name[[column_level_constraint]]…][,table_level_constraint])[parameter_list]]ASsubquery;;注意通过该方方法创建建表时,,可以修修改表中中列的名名称,但但是不能能修改列列的数据据类型和和长度;;源表中的的约束条条件和列列的缺省省值都不不会复制制到新表表中;子查询中中不能包包含LOB类型和LONG类型列;;当子查询询条件为为真时,,新表中中包含查查询到的的数据;;当查询询条件为为假时,,则创建建一个空空表。创建一个个标准表表,保存存工资高高于3000的员工的的员工号号、员工工名和部部门号。。语句为为CREATETABLEemp__select(emp_no,emp__name,dept_no)ASSELECTempno,,ename,,deptnoFROMemployeeWHEREsal>>3000;创建一个个会话级级临时表表,保存存部门号号、部门门人数和和部门的的平均工工资。CREATEGLOBALTEMPORARYTABLEept__tempONCOMMITPRESERVEROWSASSELECTdeptno,count(*))num,avg((sal)avgsalFROMempGROUPBYdeptno;;9.2..2表约束约束的类类别定义约束束添加和删删除约束束设置约束束状态约束的延延迟检查查查询约束束信息(1)约束的的类别约束作用用是在表中中定义的的用于维维护数据据库完整整性的一一些规则则。通过过对表中中列定义义约束,,可以防防止在执执行DML操作时,,将不符符合要求求的数据据插入到到表中。。约束类型型PRIMARYKEYUNIQUECHECKFOREIGNKEYNULL/NOTNULLPRIMARYKEY特点定义主键键,起惟惟一标识识作用,,其值不不能为NULL,也不能能重复;;一个表中中只能定定义一个个主键约约束;建立主键键约束的的同时,,在该列列上建立立一个惟惟一性索索引,可可以为它它指定存存储位置置和存储储参数;;主键约束束可以是是列级约约束,也也可以是是表级约约束。UNIQUE特点定义为惟惟一性约约束的某某一列或或多个列列的组合合的取值值必须惟惟一;如果某一一列或多多个列仅仅定义惟惟一性约约束,而而没有定定义非空空约束,,则该约约束列可可以包含含多个空空值;Oracle自动在惟惟一性约约束列上上建立一一个惟一一性索引引,可以以为它指指定存储储位置和和存储参参数;惟一性约约束可以以是列级级约束,,也可以以是表级级约束。。在一个基基本表中中只能定定义一个个PRIMARYKEY约束,但但可定义义多个UNIQUE约束;对于指定定为PRIMARYKEY的一个列列或多个个列的组组合,其其中任何何一个列列都不能能出现空空值,而而对于UNIQUE所约束的的唯一键键,则允允许为空空。不能为同同一个列列或一组组列既定定义UNIQUE约束,又又定义PRIMARYKEY约束。PRIMARYKEY与UNIQUE比较CHECK特点检查约束束用来限限制列值值所允许许的取值值范围,,其表达达式中必必须引用用相应列列,并且且表达式式的计算算结果必必须是一一个布尔尔值;约束表达达式中不不能包含含子查询询,也不不能包含含SYSDATE、USER等SQL函数,和和ROWID、ROWNUM等伪列;;一个列可可以定义义多个检检查约束束;检查约束束可以是是列级约约束,也也可以是是表级约约束。概念FOREIGNKEY约束指定定某一个个列或一一组列作作为外部部键,其其中,包包含外部部键的表表称为从从表,包包含外部部键所引引用的主主键或唯唯一键的的表称主主表。系统保证证从表在在外部键键上的取取值要么么是主表表中某一一个主键键值或唯唯一键值值,要么么取空值值。以此此保证两两个表之之间的连连接,确确保了实实体的参参照完整整性。FOREIGNKEY特点定义外键键约束的的列的取取值要么么是主表表参照列列的值,,要么为为空;外键列只只能参照照于主表表中的主主键约束束列或惟惟一性约约束列;;可以在一一列或多多列组合合上定义义外键约约束;外键约束束可以是是列级约约束,也也可以是是表级约约束。NULL/NOTNULL特点在同一个个表中可可以定义义多个NOTNULL约束;只能是列列级约束束。(2)定义约约束列约束对某一个个特定列列的约束束,包含含在列定定义中,,直接跟跟在该列列的其他他定义之之后,用用空格分分隔,不必指定定列名;表约束与列定义义相互独独立,不不包括在在列定义义中。通通常用于于对多个个列一起起进行约约束,与与列定义义用’,’分隔。定定义表约约束时必必须指出出要约束束的那些些列的名名称。定义列级级约束的的语法为为:[CONSTRAINTconstraint_name]]constraint_type[[conditioin]];定义表级级约束的的语法为为:[CONSTRAINTconstraint_name]]constraint_type(([column1__name,column2_name,,…]|[condition]]);注意Oracle约束通过过名称进进行标识识。在定定义时可可以通过过CONSTRAINT关键字为为约束命命名。如如果用户户没有为为约束命命名,Oracle将自动为为约束命命名。创建一个个student表。CREATETABLEstudent(snoNUMBER(6))CONSTRAINTS_PKPRIMARYKEY,snameVARCHAR2(10)NOTNULL,sexCHAR(2))CONSTRAINTS_CK1CHECK(sexin(('M'',''F'))),sageNUMBER((6,2),CONSTRAINTS__CK2CHECK(sagebetween18and60));创建一个个course表,同时时为主键键约束列列上的唯唯一性索索引设置置存储位位置和存存储参数数,语句句为CREATETABLEcourse(cnoNUMBER((6)PRIMARYKEY,,cnameCHAR(20)UNIQUEUSINGINDEXTABLESPACEindxSTORAGE(INITIAL64KNEXT64K));创建一个个SC表,语句句为CREATETABLESC(snoNUMBER(6))REFERENCESstudent(sno)),cnoNUMBER(6))REFERENCEScourse(cno),,gradeNUMBER((5,2),CONSTRAINTSC_PKPRIMARYKEY(sno,cno));定义列级级FOREIGNKEY约束[CONSTRAINTconstraint_name]][FOREIGNKEY]]REFERENCESref_table_name((column_name,…)定义表级级FOREIGNKEY约束[CONSTRAINTconstraint_name]]FOREIGNKEY((column_name,,…)REFERENCESref_table_name((column_name,…)[ONDELETECASCADE||SETNULL]];ONDELETECASCADE删除子表表中所有有相关记记录ONDELETESETNULL将子表中中相关记记录的外外键约束束列值设设置为NULLONDELETERESTRICTED受限删除除,即如如果子表表中有相相关子记记录存在在,则不不能删除除主表中中的父记记录,默默认引用用方式。。DEFAULT如果用户户在插入入新行时时没有显显示为列列提供数数据,系系统将默默认值赋赋给该列列。语法[CONSTRAINT<<约束名>]DEFAULT表达式(3)添加和和删除约约束添加约束束语法为为:ALTERTABLEtable_nameADD[[CONSTRAINTconstraint_name]constraint_type((column1_name,column2__name,…)[condition];;创建一个个player表CREATETABLEplayer(IDNUMBER(6)),snoNUMBER(6)),snameVARCHAR2((10)),sageNUMBER(6,,2),,resumeVARCHAR2((1000));添加主键键约束ALTERTABLEplayerADDCONSTRAINTP__PKPRIMARYKEY((ID));添加惟一一性约束束ALTERTABLEplayerADDCONSTRAINTP_UKUNIQUE((sname));添加检查查约束ALTERTABLEplayerADDCONSTRAINTP_CKCHECK((sageBETWEEN20AND30);;添加外键键约束ALTERTABLEplayerADDCONSTRAINTP_FKFOREIGNKEY(sno)REFERENCESstudent(sno)ONDELETECASCADE;;添加空/非空约束束为表列添添加空/非空约束束时必须须使用MODIFY子句代替替ADD子句ALTERTABLEplayerMODIFYresumeNOTNULL;ALTERTABLEplayerMODIFYresumeNULL;删除约束束使用ALTERTABLE…DROP语句删除除已经定定义的约约束。可以通过过直接指指定约束束的名称称来删除除约束,,或指定定约束的的内容来来删除约约束。删除指定定内容的的约束ALTERTABLEplayerDROPUNIQUE((sname));删除指定定名称的的约束ALTERTABLEplayerDROPCONSTRAINTP__CK;;删除主键键约束、、唯一性性约束的的同时将将删除唯唯一性索索引,如如果要在在删除约约束时保保留唯一一性索引引,则必必须在ALTERTABLE…DORP语句中指指定KEEPINDEX子句。ALTERTABLEplayerDROPCONSTRAINTP__UKKEEPINDEX;如果要在在删除约约束的同同时,删删除引用用该约束束的其他他约束,,则需要要在ALTERTABLE…DORP语句中指指定CASCADE关键字。。ALTERTABLEplayerDROPCONSTRAINTP__PKCASCADE;(4)设置约约束状态态激活(ENABLE)状态当约束处处于激活活状态时时,约束束将对表表的插入入或更新新操作进进行检查查,与约约束规则则冲突的的操作被被回退。。禁用(DISABLE)状态当约束处处于禁用用状态时时,约束束不起作作用,与与约束规规则冲突突的插入入或更新新操作也也能够成成功执行行。利用SQL**Loader从外部数数据源提提取大量量数据到到数据库库中;进行数据据库中数数据的大大量导入入、导出出操作;;针对表执执行一项项包含大大量数据据操作的的批处理理工作时时。禁用约束束在定义约约束时,,可以将将约束设设置为禁禁用状态态,默认认为激活活状态。。也可以以在约束束创建后后,修改改约束状状态为禁禁用。创建表时时禁用约约束CREATETABLES((SNOCHAR((11))PRIMARYKEYDISALBE,,…);利用ALTERTABLE…DISABLE禁用约束束ALTERTABLESTUDENTDISABLECONSTRAINTS_CK1;ALTERTABLESTUDENTDISABLEUNIQUE(sname);;禁用主键键约束、、惟一性性约束时时,会删删除其对对应的惟惟一性索索引,而而在重新新激活时时,Oracle为它们重重建惟一一性索引引。若在在禁用约约束时,,保留对对应的惟惟一性索索引,可可使用ALTERTABLE…DISABLE…KEEPINDEX语句。ALTERTABLESTUDENTDISABLEUNIQUE(sname)KEEPINDEX;ALTERTABLESTUDENTDISABLEPRIMARYKEYKEEPINDEX;若当前约约束(主键约束束、惟一一性约束束)列被引用用,则需需要使用用ALTERTABLE…DISABLE…CASCADE语句同时时禁用引引用该约约束的约约束。ALTERTABLESTUDENTDISABLEPRIMARYKEYKEEPINDEXCASCADE;激活约束束创建或添添加约束束时,默默认为激激活状态态。利用ALTERTABLE…ENABLE…语句激活活约束ALTERTABLESTUDENTENABLEUNIQUE((sname);禁用主键键约束、、惟一性性约束时时,会删删除其对对应的惟惟一性索索引,而而在重新新激活时时,Oracle为它们重重建惟一一性索引引,可以以为索引引设置存存储位置置和存储储参数(索引与表表尽量分分开存储储)。ALTERTABLESTUDENTENABLEPRIMARYKEYUSINGINDEXTABLESPACEindxSTORAGE(INITIAL32KNEXT16K);通过ALTERTABLE…MODIFY…DISABLE|ENABLE语句改变变约束状状态ALTERTABLESTUDENTMODIFYCONSTRAINTS__CK2DISABLE;;(5)约束的的延迟检检查默认情况况下,在在表中的的约束都都是不可可延迟约约束,Oracle在一条DML语句执行行完毕之之后立即即进行约约束检查查(除非非禁用))。创建约束束时可以以显式使使用DEFERRABLE关键字,,创建可可延迟的的约束。。INITIALLYIMMEDIATE或INITIALLYDEFERRED说明可延延迟约束束在初始始状态下下是立即即检查还还是延迟迟检查如果在定定义约束束时设定定为不可可延迟,,则约束束创建后后不能更更改其可可延迟性性。只有有创建时时设定为为可延迟迟的约束束,创建建后才能能更改其其可延迟迟性。创建两个个表,其其约束都都是可延延迟的。。CREATETABLEnew_dept((deptnoNUMBERPRIMARYKEYDEFERRABLEINITIALLYIMMEDIATE,,dnameCHAR(11)UNIQUE);CREATETABLEnew_emp(empnoNUMBERPRIMARYKEY,enameCHAR(11),,deptnoNUMBERCONSTRAINTNE__FKREFERENCESnew__dept(deptno))ONDELETECASCADEDEFERRABLE);由于外键键约束的的作用,,执行下下面语句句时会产产时错误误。INSERTINTOnew__empVALUES(1,'ZHANG',,11));*ERROR位于第1行:ORA--02291::违反完整整约束条条件(SCOTT..E_FK)--未找到父父项关键键字将new__emp表的外键键约束检检查延迟迟。ALTERTABLEnew__empMODIFYCONSTRAINTNE_FKINITIALLYDEFERRED;此时,由由于将new__emp表外键约约束延迟迟到事务务结束后后进行检检查,因因此可以以先向new__emp中插入数数据,而而后向new__dept中插入数数据。INSERTINTOnew__empVALUES(1,'ZHANG',,11));INSERTINTOnew__deptVALUES((11,,'COMPUTER');;COMMIT;;操作完后后,应将将new__emp外键约束束检查恢恢复原来来状态。。ALTERTABLEnew__empMODIFYCONSTRAINTNE_FKINITIALLYIMMEDIATE;;注意在修改约约束的检检查延迟迟性时,,如果无无法确定定约束的的名称或或需要设设置多个个约束的的延迟性性,可以以一次性性将所有有可延迟迟的约束束延迟或或恢复。。SETCONSTRAINTALLDEFERRED;;SETCONSTRAINTALLIMMEDIATE;(6)查询约约束信息息ALL__CONSTRAINTSUSER_CONSTRAINTSDBA__CONSTRAINTSALL__CONS_COLUMNSUSER_CONS__COLUMNSDAB__CONS_COLUMNS查看student表中的所所有约束束。SELECTCONSTRAINT_NAME,CONSTRAINT_TYPE,,DEFERRED,,STATUSFROMUSER__CONSTRAINTSWHERETABLE_NAME='STUDENT';查看student表中各个个约束所所作用的的列。SELECTCONSTRAINT_NAME,COLUMN__NAMEFROMUSER__CONS_COLUMNSWHERETABLE_NAME='STUDENT';9.2..3表参数设设置TABLESPACETABLESPACE子句用于于指定表表存储的的表空间间。STORAGESTORAGE子句用于于设置表表的存储储参数。。若不指指定,则则继承表表空间的的存储参参数设置置。NITIALNEXTPCTINCREASEMINEXTENTSMAXEXTENTSBUFFER__POOL((KEEP、RECYCLE、DEFAULT)STORAGE参数设置置需注意意如果表空空间管理理方式为为EXTENTMANAGEMENTLOCALAUTOALLOCATE,则在STORAGE中只能指指定INITIAL,NEXT和MINEXTENTS这3个参数;;如果表空空间管理理方式为为EXTENTMANAGEMENTLOCALUNIFORM,则不能能指定任任何STORAGE子句;如果表空空间管理理方式为为EXTENTMANAGEMENTDICTIONARY,则在STORAG中可以设设置任何何参数。。数据块管管理参数数PCTFREE:用于指指定数据据块中必必须保留留的最小小空闲空空间。PCTUSED:用于指指定当数数据块空空闲空间间达到PCTFREE参数的限限制后,,数据块块能够被被再次使使用前,,已占用用的存储储空间必必须低于于的比例例。INITRANS:用于指指定能够够并发访访问同一一个数据据块的事事务的数数量。MAXTRANS:用于指指定能够够并发访访问同一一个数据据块的事事务的最最大数量量。LOGGING与NOLOGGING子句默认为NOLOGGING,即表的的创建操操作不会会记录到到重做日日志文件件中,尤尤其适合合通过查查询创建建表的情情况。使使用LOGGING子句,表表的创建建操作((包括通通过查询询创建表表时的插插入记录录操作))都将记记录到重重做日志志文件中中。PARALLEL、NOPARALLELCACHE、NOCACHEMONITORING、NOMONITORING9.2..4修改表基本语法法列的添加加、删除除、修改改表参数修修改表结构重重组表重命名名等为表和列列添加注注释(1)修修改表基基本语法法ALTERTABLE<<表名>ADD<<新列名><数据类型型>[<<完整性约约束定义义]MODIFY<<列名><数据类型型>RENAMECOLUMNoldnameTOnewnameSETUNUSEDCOLUMNcolumn////singlecolumnSETUNUSEDCOLUMNS(column1,column2…)DROPCOLUMN<<col>///singlecolumnDROP<col1,col2…>////multicolumnDROPUNUSEDCOLUMNS(2)列列的添加加、删除除、修改改添加列语法ALTERTABLEtable_nameADD((new_column_namedatatype[NOTNULL][DEFAULTvalue]);;示例ALTERTABLEemployeeADD((phoneVARCHAR2((11)),hiredateDATEDEFAULTSYSDATENOTNULL);修改列类类型语法ALTERTABLEtable_nameMODIFYcolumn__namenew__datatype;;修改表中中列类型型时,必必须满足足下列条条件:可以增大大字符类类型列的的长度和和数值类类型列的的精度;;如果字符符类型列列、数值值类型列列中数据据满足新新的长度度、精度度,则可可以缩小小类型的的长度、、精度;;如果不改改变字符符串的长长度,可可以将VARCHAR2类型和CAHR类型转换换;如果更改改数据类类型为另另一种非非同系列列类型,,则列中中数据必必须为NULL。示例ALTERTABLEemployeeMODIFYenameCHAR(20);;ALTERTABLEemployeeMODIFYphoneNUMBER;修改列名名语法ALTERTABLEtable_nameRENAMECOLUMNoldnameTOnewname;示例ALTERTABLEemployeeRENAMECOLUMNenameTOemployee_name;删除列直接删除除列语法法ALTERTABLEtable_nameDROP[COLUMNcolumn_name]]|[(column1__name,column2_name,,…)][CASCADECONSTRAINTS];;直接删除除列示例例ALTERTABLEscDROPCOLUMNsnoCASCADECONSTRAINTS;ALTERTABLEemployeeDROP(phone,hiredate);;将列标记记为UNUSED,然后进进行删除除。ALTERTABLEtable_nameSETUNUSED[COLUMNcolumn_name]]|[(column1__name,column2_name,,…)][CASCADECONSTRAINTS];;示例ALTERTABLEplayerSETUNUSEDCOLUMNsage;ALTERTABLEplayerSETUNUSED((sname,,resume);ALTERTABLEplayerDROPUNUSEDCOLUMNS;如果数据据库表空空间处于于字典管管理方式式,可以以对表的的参数进进行修改改,包括括存储参参数、存存储位置置、数据据块设置置等。ALTERTABLEemployeePCTFREE30PCTUSED60STORAGE(NEXT512KPCTINCREASE11));注意表创建后后不能对对INITIAL、MINEXTENTS两个参数数进行修修改。(3)表表参数修修改将一个非非分区的的表移动动到一个个新的数数据段中中,或者者移动到到其他的的表空间间中,通通过这种种操作可可以重建建表的存存储结构构,称为为表结构构重组。。如果发现现表的数数据段具具有不合合理的区区分配方方式,但但是又不不能通过过别的方方法来进进行调整整(改变变存储参参数不会会影响到到已经分分配的区区),可可以考虑虑将表移移动到一一个新的的数据段段中。此此外,如如果频繁繁地对表表进行DML操作,会会产生大大量空间间碎片和和行迁移移、行连连接,可可以考虑虑进行表表结构重重组。(4)表表结构重重组语法ALTERTABLEtbnameMOVE[[TABLESPACEtbs__name]注意直到表被被完全移移动到新新的数据据段中之之后,Oracle才会删除除原来的的数据段段;表结构重重组后,,表中每每个记录录的ROWID会发生变变化,因因此该表表的所有有索引失失效,需需要重新新建立索索引;如果表中中包含LOB列,则默默认情况况下不移移动LOB列数据和和LOB索引段。。语法ALTERTABLEold__nameRENAMETOnew_name;;RENAMEold_nameTOnew_name;;说明表重命名名后,Oracle会自动将将旧表上上的对象象权限、、约束条条件等转转换到新新表上,,但是所所有与旧旧表相关关联的对对象都会会失效,,需要重重新编译译。(5)表表重命名名为表添加加注释COMMENTONTALBEtable_nameIS…;为列添加加注释COMMENTONCOLUMNtable_name.column_nameIS…注释可以以通过以以下数据据字典来来查看.ALL__COL_COMMENTSUSER_COL_COMMENTSALL__TAB_COMMENTSUSER_TAB_COMMENTS(6)为为表和列列添加注注释语法DROPTABLEtable_name[CASCADECONSTRAINTS][[PURGE]]删除一个个表同时时,Oracle将执行下下列操作作:删除该表表中所有有记录;;从数据字字典中删删除该表表定义;;删除与该该表相关关的所有有索引和和触发器器;回收为该该表分配配的存储储空间;;依赖于该该表的数数据库对对象处于于INVALID状态。9.2..5删除表注意在Oracle10g中,使用用DROPTABLE语句删除除一个表表时,并并不立即即回收该该表的空空间,而而只是将将表及其其关联对对象的信信息写入入一个称称为“回收站”(RECYCLEBIN)的逻辑辑容器中中,从而而可以实实现闪回回删除表表操作。。如果要要回收该该表空间间,可以以采用清清空“回收站”(PURGERECYCLEBIN)或在DROPTABLE语句中使使用PURGE语句。9.2..6利用OEM管理表创建表删除表修改表查询表(1)创建表表(2)表的其其他管理理9.3索引索引概述述索引管理理利用OEM管理索引引9.3..1索引概述述索引概念念及作用用索引是为为了加速速对表中中元组的的检索而而创建的的一种分分散存储储结构;;是对表而而建立的的,由除除存放表表的数据据页面以以外的索索引页面面组成,,独立于于被索引引的表;;通过使用用索引加加速行的的检索,,但减慢慢更新的的速度;;快速定位位数据,,减少磁磁盘I/O;Oracle自动使用用、维护护索引索引分类类惟一性索索引与非非惟一性性索引平衡树索索引与位位图索引引单列索引引与复合合索引函数索引引聚簇索引引全局索引引与本地地索引索引使用用原则导入数据据后再创创建索引引在适当的的表和字字段上创创建索引引经常查询询的记录录数目少少于表中中所有记记录总数数的5%时就应当当创建索索引;经常进行行连接查查询表时时,在连连接列上上建立索索引能够够显著提提高查询询的速度度;对于取值值范围很很大的列列应当创创建B树索引;;对于取值值范围很很小的列列应当创创建位图图索引;;不能在LONG,LONGRAW,LOB数据类型型的列上上创建索索引;Oracle会自动在在PRIMARYKEY和UNIQUE约束的列列上创建建唯一性性索引。。合理设置置复合索索引中的的字段顺顺序限制表中中索引的的数目表中索引引数目越越多,查查询速度度越快,,但表的的更新速速度越慢慢。因为为索引越越多,维维护索引引所需开开销越大大,当更更新表时时,需要要同时更更新与表表相关的的所有索索引。为索引设设置合适适的PCTFREE参数选择存储储索引的的表空间间默认情况况下,索索引与表表存储在在同一表表空间中中。索引引与表存存储在同同一表空空间中,,有利于于数据库库维护操操作,具具有较高高的可用用性;反反之,若若索引与与表存储储在不同同的表空空间中,,则可提提高系统统的存取取性能,,减少硬硬盘I/O冲突,但但是表与与索引可可用状态态可能出出现不一一致,如如一个处处于联机机状态,,另一个个处于脱脱机状态态。9.3..2管理索引引创建索引引修改索引引监视索引引删除索引引索引的查查询语法CREATE[[UNIQUE]||[BITMAP]INDEXindex__nameONtable_name([column__name[ASC||DESC],,…]|[expression]))[REVERSE][parameter_list]];说明UNIQUE表示建立立惟一性性索引;;BITMAP表示建立立位图索索引;ASC//DESC用于指定定索引值值的排列列顺序,,ASC表示按升升序排序序,DESC表示按降降序排序序,缺省省值为ASC;REVERSE表示建立立反键索索引;parameter__list用于指定定索引的的存放位位置、存存储空间间分配和和数据块块参数设设置。(1)创建索索引创建非惟惟一性索索引CREATEINDEXemployee__enameONemployee((ename))TABLESPACEusersSTORAGE(INITIAL20KNEXT20kPCTINCREASE75);;创建惟一一性索引引CREATEUNIQUEINDEXdeptartment_indexONdepartment((dname));创建位图图索引CREATEBITMAPINDEXstudent__sexONstudent((sex);创建反序序索引CREATEINDEXplayer_sageONplayer(sage))REVERSE;;创建函数数索引CREATEINDEXidxONemployee(UPPER(ename));;定义约束束时创建建索引CREATETABLEnew_employee(empnoNUMBER((5)PRIMARYKEYUSINGINDEXTABLESPACEusersPCTFREE0,,enameVARCHAR2(20));(2)修改索索引合并索引引合并索引引是对索索引进行行合并操操作,但但只是简简单地将将B树叶节点点中的存存储碎片片合并在在一起,,并不会会改变索索引的物物理组织织结构语法ALTERINDEX…COALESCE示例ALTERINDEXemployee_enameCOALESCE;重建索引引重建索引引的实质质是在指指定的表表空间中中重新建建立一个个新的索索引,然然后再删删除原来来的索引引,这样样不仅能能够消除除存储碎碎片,还还可以改改变索引引的存储储参数设设置,并并且将索索引移动动到其他他的表空空间中。。语法ALTERINDEX…REBUILD示例ALTERINDEXplayer__sageREBUILD;合并索引引与重建建索引比比较合并索引重建索引不能将索引移到其他表空间中可以将索引移到其他表空间中代价较低,不需要使用额外的存储空间代价较高,需要使用额外的存储空间只能在B树的同一子树中进行合并,不会改变树的高度重建整个B树,可能会降低树的高度可以快速释放叶子节点中未使用的存储空间可以快速更改索引的存储参数。在重建过程中如果指定了ONLINE关键字,不会影响对当前索引的使用索引重命命名语法ALTERINDEX…RENAMETO语句为索索引重命命名。示例ALTERINDEXemployee_enameRENAMETOemployee__new_ename;(3)监视索索引已经建立立的索引引是否能能够有效效地工作作,取决决于在查查询执行行过程中中是否会会使用到到这个索索引。要要查看某某个指定定索引的的使用情情况,可可以使用用ALTERINDEX语句打开开索引的的监视状状态。打开索引引监视状状态ALTERINDEXindex_enameMONITORINGUSAGE;关闭索引引监视状状态ALTERINDEXindex_enameNOMONITORINGUSAGE;;查看索引引使用情情况通过V$OBJECT_USAGE动态性能能视图中中查看索索引的使使用情况况。USED列为YES,表示索索引正被被引用,,否则为为NO。(4)删除索索引语法DROPINDEXindex_name;;在下面几几种情况况下,可可以考虑虑删除索索引该索引不不再使用用。通过一段段时间监监视,发发现几乎乎没有查查询或只只有极少少数查询询会使用用该索引引。由于索引引中包含含损坏的的数据块块或包含含过多的的存储碎碎片等,,需要删删除该索索引,然然后重建建索引。。由于移动动了表数数据而导导致索引引失效(5)索引的的查询DBA__INDEXES、ALL__INDEXES、USER_INDEXES包含索引引的基本本描述信信息和统统计信息息,包括括索引的的所有者者、索引引的名称称、索引引的类型型、对应应表的名名称、索索引的存存储参数数设置、、由分析析得到的的统计信信息等信信息DBA__IND_COLUMNS、ALL__IND_COLUMNS、USER_IND_COLUMNS包含索引引列的描描述信息息,包括括索引的的名称、、表的名名称和索索引列的的名称等等信息DBA__IND_EXPRESSIONS、ALL__IND_EXPRESSIONS、USER_IND_EXPRESSIONS包含函数数索引的的描述信信息,通通过该视视图可以以查看到到函数索索引的函函数或表表达式V$OBJECT_USAGE包含通过过ALTERINDEX…MONITORINGUSAGE语句对索索引进行行监视后后得到的的索引使使用信息息。9.3..3利用OEM管理索引引创建索引引修改索引引删除索引引查询索引引(1)创建索索引(2)索引的的其他管管理9.4分区表与与分区索索引分区概述述创建分区区表维护分区区表查询分区区表和分分区索引引信息利用OEM管理分区区表和分分区索引引分区概述述分区概念念所谓的分分区是指指将一个个巨型表表或巨型型索引分分成若干干独立的的组成部部分进行行存储和和管理,,每一个个相对小小的、可可以独立立管理的的部分,,称为原原来表或或索引的的分区。。每个分区区都具有有相同的的逻辑属属性,但但物理属属性可以以不同。。如具有有相同列列、数据据类型、、约束等等,但可可以具有有不同的的存储参参数、位位于不同同的表空空间等。。分区后,,表中每每个记录录或索引引条目根根据分区区条件分分散存储储到不同同分区中中。分区原则则表的大小小超过2GB要对一个个表进行行并行DML操作,必必须分区区为了平衡衡硬盘的的I/O操作,将将一个表表分散存存储在不不同的表表空间中中,必须须对它进进行分区区如果需要要将表一一部分设设置为只只读,另另一部分分为可更更新的,,必须对对表进行行分区9.4..1创建分区区表分区方法法范围分区区列表分区区散列分区区复合分区区(1)范围分分区概述范围分区区是按照照分区列列值的范范围来对对表进行行分区的的。参数通过PARTITIONBYRANGE子句说明明根据范范围进行行分区,,其后括括号中列列出分区区列,可可以进行行多列分分区。每每个分区区以PARTITION关键字开开头,其其后是分分区名。。VALUESLESSTHAN子句用于于设置分分区中分分区列值值的范围围。可以以对每个个分区的的存储进进行设置置,也可可以对所所有分区区采用默默认的存存储设置置。示例创建一个个分区表表,将学学生信息息根据其其出生日日期进行行分区,,将1980年1月1日前出生生的学生生信息保保存在ORCLTBS1表空间中中,将1980年1月1日到1990年1月1日出生的的学生信信息保存存在ORCLTBS2表空间中中,将其其他学生生信息保保存在ORCLTBS3表空间中中。CREATETABLEstudent_range(snoNUMBER(6))PRIMARYKEY,snameVARCHAR2(10),,sageint,birthdayDATE)PARTITIONBYRANGE((birthday))(PARTITIONp1VALUESLESSTHAN(TO__DATE(''1980-1-1'',''YYYY-MM-DD')))TABLESPACEORCLTBS1,PARTITIONp2VALUESLESSTHAN(TO__DATE(''1990-1-1'',''YYYY-MM-DD')))TABLESPACEORCLTBS2,PARTITIONp3VALUESLESSTHAN(MAXVALUE)TABLESPACEORCLTBS3STORAGE((INITIAL10MNEXT20M)))STORAGE(INITIAL20MNEXT10MMAXEXTENTS10

);(2)列表分分区概述如果分区区列的值值并不能能划分范范围(非非数值类类型或日日期类型型),同同时分区区列的取取值范围围只是一一个包含含少数值值的集合合,则可可以对表表进行列列表分区区(LIST),如按按地区、、性别等等分区。。与范围分分区不同同,列表表分区不不支持多多列分区区,只能能根据一一个单独独的列来来进行分分区。创创建列表表分区时时需要指指定分区区列和分分区描述述。通过PARTITIONBYLIST子句说明明根据列列表进行行分区,,其后括括号中列列出分区区列。每每个分区区以PARTITION关键字开开头,其其后是分分区名。。VALUES子句用于于设置分分区所对对应的分分区列取取值。示例创建一个个分区表表,将学学生信息息按性别别不同进进行分区区,男学学生信息息保存在在表空间间ORCLTBS1中,而女女学生信信息保存存在ORCLTBS2中。CREATETABLEstudent_list(snoNUMBER(6))PRIMARYKEY,snameVARCHAR2(10),,sexCHAR(2))CHECK(sexin(('M'',''F'))))PARTITIONBYLIST(sex))(PARTITIONstudent_maleVALUES(''M'))TABLESPACEORCLTBS1,,PARTITIONstudent_femaleVALUES('F')TABLESPACEORCLTBS2);(3)散列分分区概述在进行范范围分区区或列表表分区时时,由于于无法对对各个分分区中可可能具有有的记录录数量进进行预测测,可能能导致数数据在各各个分区区中分布布不均衡衡,某个个分区中中数据很很多,而而某个分分区中数数据很少少。此时时可以采采用散列列分区((HASH)方法,,在指定定数量的的分区中中均等地地分配数数据。为了创建建散列分分区,需需要指定定分区列列、分区区数量或或单独的的分区描描述。通过PARTITIONBYHASH指定分区区方法,,其后的的括号指指定分区区列。使使用PARTITION子句指定定每个分分区名称称和其存存储空间间。或者者使用PARTITIONS子句指定定分区数数量,用用STOREIN子句指定定分区存存储空间间。示例创建一个个分区表表,根据据学号将将学生信信息均匀匀分布到到ORCLTBS1和ORCLTBS2两个表空空间中。。CREATETABLEstudent_hash(snoNUMBER(6))PRIMARYKEY,snameVARCHAR2(10))PARTITIONBYHASH(sno))(PARTITIONp1TABLESPACEORCLTBS1,PARTITIONp2TABLESPACEORCLTBS2);CREATETABLEstudent_hash2((snoNUMBER(6))PRIMARYKEY,snameVARCHAR2(10)))PARTITIONBYHASH(sno))PARTITIONS2STOREIN((ORCLTBS1,,ORCLTBS2));(4)复合分分区复合分区区包括::范围-列表复合合分区范围-散列复合合分区。。创建复合合分区时时需要指指定分区方法法(PARTITIONBYRANGE)分区列子分区方方法(SUBPARTITIONBYHASH,SUBPARTITIONBYLIST)子分区列列每个分区区中子分分区数量量或子分分区的描描述。范围-列表复合合分区范围-列表复合合分区先先对表进进行范围围分区,,然后再再对每个个分区进进行列表表分区,,即在一一个范围围分区中中创建多多个列表表子分区区。范围-列表复合合分区示示例创建一个个范围-列表复合合分区表表,将1980年1月1日前出生生的男、、女学生生信息分分别保存存在ORCLTBS1和ORCLTBS2表空间中中,1980年1月1日到1990年1月1日出生的的男、女女学生信信息分别别保存在在ORCLTBS3和ORCLTBS4表空间中中,其他他学生信信息保存存在ORCLTBS5表空间中中。CREATETABLEstudent_range_list(snoNUMBER(6))PRIMARYKEY,snameVARCHAR2(10),,sexCHAR((2)CHECK((sexIN(''M',,'F'')),,sageNUMBER((4),,birthdayDATE)PARTITIONBYRANGE((birthday))SUBPARTITIONBYLIST(sex))(PARTITIONp1VALUESLESSTHAN((TO__DATE(''1980-1-1'',''YYYY-MM-DD')))(SUBPARTITIONp1_sub1VALUES('M')TABLESPACEORCLTBS1,SUBPARTITIONp1__sub2VALUES(('F'')TABLESPACEORCLTBS2),PARTITIONp2VALUESLESSTHAN(TO_DATE('1990-1--1',,'YYYY-MM-DD')))(SUBPARTITIONp2_sub1VALUES('M')TABLESPACEORCLTBS3,SUBPARTITIONp2__sub2VALUES(('F'')TABLESPACEORCLTBS4),PARTITIONp3VALUESLESSTHAN(MAXVALUE)TABLESPACEORCLTBS5);范围-散列复合合分区范围-散列复合合分区先先对表进进行范围围分区,,然后再再对每个个分区进进行散列列分区,,即在一一个范围围分区中中创建多多个散列列子分区区。示例创建一个个范围-散列复合合分区表表,将1980年1月1日前出生生的学生生信息均均匀地保保存在ORCLTBS1和ORCLTBS2表空间中中,1980年1月1日到1990年1月1日出生的的学生信信息保存存在ORCLTBS3和ORCLTBS4表空间中中,其他他学生信信息保存存在ORCLTBS5表空间中中。CREATETABLEstudent_range_hash(snoNUMBER(6))PRIMARYKEY,snameVARCHAR2(10),,sageNUMBER((

温馨提示

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

评论

0/150

提交评论