Oracle第章模式对象_第1页
Oracle第章模式对象_第2页
Oracle第章模式对象_第3页
Oracle第章模式对象_第4页
Oracle第章模式对象_第5页
已阅读5页,还剩176页未读 继续免费阅读

下载本文档

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

文档简介

第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(4),birthdayDATE)PARTITIONBYRANGE(birthday)SUBPARTITIONBYHASH(sage)(PARTITIONp1VALUESLESSTHAN(TO_DATE('1980-1-1','YYYY-MM-DD'))(SUBPARTITIONp1_sub1TABLESPACEORCLTBS1,SUBPARTITIONp1_sub2TABLESPACEORCLTBS2),PARTITIONp2VALUESLESSTHAN(TO_DATE("1990-1-

温馨提示

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

评论

0/150

提交评论