您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 管理oracle对象
第七章管理Oracle对象•管理表概览表是最基本的数据库对象,它用于存储用户数据,关系数据库的所有操作最终都是围绕用户表进行的。在Oracle数据库中,按照存储方式的不同,表可以分为普通表、分区表、索引组织表以及簇表等四种表。1.表结构表是Oracle数据库数据存储的基本单元,在表中是通过行和列来组织数据的。一张表一般都具有多个列,或者称为字段,每个字段都具有特定的属性,包括字段名、字段数据类型、字段长度、约束、默认值等,这些属性在表创建时即被确定。而表的每一行存放一条信息。2.基本的数据类型当建立表时,不仅要指定表名、列名,而且要根据情况为列选择合适的数据类型以及长度。下面介绍一些常用的Oracle数据类型:CHAR(N)该数据类型用于定义固定长度的字符串,其最大长度为2000字节。假定定义COLA列为CHAR(100),并且该列的数据为“ACCESS”,这时虽“ACCESS”只有六个字符,但COLA列仍将占用100字节的空间。VARCHAR2(N)该数据类型用于定义可变长度的字符串,其最大长度为4000字节。假定定义COLA列为VARCHAR2(100),并且该列的数据为“ACCESS”,那么COLA列将占用6字节的空间。所以使用VARCHAR2类型可以节省空间,但CHAR类型存取速度更快。NUMBER(P,S)该数据类型用于定义数字类型的数据,其中P是精度,表示数字的总位数,而S是刻度范围,表示小数点后的位数。精度和刻度范围都是可选的,但若指定了刻度范围,那么必须指定精度。假定定义SAL列为NUMBER(4,3),若该列的数据为123.4567,则存储错误,因为超出了精度范围;若该列的数据为1.234567,则实际存储的数据为1.235,因为当被指派值超出了刻度范围时,存储值按照刻度范围指定的数字位的位数进行舍入。另外,定义整数还可以直接使用INT数据类型。DATE该数据类型用于定义日期时间数据,其长度为7个字节。RAW(N)该数据类型用于定义二进制数据,其最大长度为2000字节。通常用来存储小型二进制数据。存储大对象的数据类型Oracle为存储大对象(LOB)提供了六种数据类型Long,longrawLob(CLOB、BLOB.BFILE、NCLOB)一个表只能有一个LONG或LONGRAW列一个表上可以有多个LOB列最多2gb最多4gbSelect返回数据Select返回定位器与其他列数据存放在一起小于4000:与其他列存放在一起大于4000:存放到LOB段无对象类型支持支持对象类型顺序访问随机访问其中:CLOB和LONG用于存储大型的、固定宽度字符数据;BLOB和LONGRAW用于存储非结构化数据,如二进制图象;NCLOB用于存储大型的、固定宽度字符集数据;BFILE用于存储操作系统文件中的非结构化数据。3.数据的存储方式当创建表时,Oracle会自动从指定的表空间中为新建的表创建一个数据段,而该表的所有数据都会存放到相应的表段中。表的行数据存储在数据块中,如果一个块的大小足够容纳一条记录,Oracle就将一条记录完整的存储在一个数据块中。一般情况,记录按列定义顺序来存放,但若使用LONG或LONGRAW类型,那么它们的数据总是放在记录的尾部。如果表中某字段允许为NULL,若NULL值字段位于非NULL值字段的中间,则需使用1字节的空间来存储NULL值字段的长度;若NULL值字段位于一条记录的末尾,将不需要任何存储空间来存储NULL值。因此,在定义表时候,应当将可能包含NULL值的字段放在字段列表的末尾,这样可以节省存储空间。4.ROWIDROWID用于惟一标识表行。当执行INSERT操作时,服务器进程会将数据插人到表段的相应数据块中,并且Oracle会生成惟一的ROWID对应于该行数据。ROWID间接地给出了表行的物理存放位置,它是定位表行最快速的方式。ROWID占用10个字节的存储空间,而显示结果为18个字符,具体格式如下:OOOOOOFFFBBBBBBRRR数据对象号相对文件号数据块号行号数据对象号:表的惟一对象标识号。当建立表时,Oracle会为该表分配惟一的数据对象号。相对文件号:表空间内数据文件的惟一标识号。块号:行所在数据块的位置。行号:行在块内的位置。因为创建了一个表就创建了一个段,而一个段只能驻留在一个表空间中,所以使用数据对象编号,Oracle服务器可以确定表所在的表空间;又因为表空间的数据都存放在数据文件中,使用相对文件编号Oracle可以确定存放表数据的数据文件;数据文件用数据块来存储数据,使用数据块编号可知表的某一行数据存放在哪个数据块中;而一个数据块可能存放多行数据,利用行号就可以定位表中的任一行了。ROWID是表的伪列,用户在查看表的结构时不会看到ROWID字段,但和其它字段一样,可以在执行SELECT操作时直接引用。但是因为用户无法直接读懂ROWID内容,所以在引用ROWID时通常使用DBMS_ROWID将其转变为可读取的内容。selectdeptno,dbms_rowid.rowid_relative_fno(rowid)||'.'||dbms_rowid.rowid_block_number(rowid)||'.'||dbms_rowid.rowid_row_number(rowid)行位置fromdept;7.1.2建表建表是使用createtable命令完成的,执行该命令要求用户必须具有createtable系统权限;如果要在其他用户模式中建表,则要求用户必须具有createanytable系统权限。当建立表时,Oracle会为该表分配相应的表段,因为表段所需空间是从表空间上分配的,所以要求表的所有者必须要在表空间上具有相应的空间配额或具有unlimitedtablespace系统权限。1.建立普通表普通表是存储用户数据最常用的方式。当建立普通表时,Oracle会自动为该表建立相应的段,并且段的名称与表名完全相同,而且段的数据只能存放在一个表空间中。创建普通表的语法如下:CREATETABLE[schema.]table(columndatatype[,columndatatype]…)[TABLESPACEtablespace][PCTFREEinteger][PCTUSEDinteger][INITRANSinteger][MAXTRANSinteger][STORAGEstorage-clause][LOGGING|NOLOGGING][CACHE|NOCACHE]现对命令中各参数说明如下:TABLESPACE:标识要在其中创建表的表空间。如果创建表时没有显式的指定表所处的表空间,则表被创建在当前用户的默认表空间中。PCTFREE和PCTUSED:PCTFREE参数用于指定块中必须保留的最小空闲空间比例,PCTUSED参数用于指定当数据块达到PCTFREE参数的限制之后(这时数据块被标记为不可用),数据块能够被再次使用前,已占用的存储空间必须低于的比例。INITRANS和MAXTRANS:INITRANS与MAXTRANS参数用于指定针对同一个块所允许的并发事务数目。每当一个DML事务访问表中的一个数据块时,该事务会在数据块的块头部(BlockHeader)中保存一个条目,用于标记该事务正在使用这个数据块。当该事务结束时,它所对应的条目被删除。在创建表时,Oracle将在表中每个数据块的头部空间中分配可以存储INITRANS个事务条目的空间。这部分存储空间是永久性的,只能用来存储事务条目。当一个DML事务访问这个数据块时,Oracle首先将该事务的条目存储在块头部空间中。当块头部空间已经存储了INITRANS个事务条目后,再没有多余的空闲空间来存储其他的事务条目了。这时若还有别的事务要访问这个数据块,Oracle将在数据块的空闲空间中为事务条目分配存储空间(如果在块中还有空闲空间的话)。这部分空闲空间是动态分配的,回收以后可以用于存储其他数据。能够在空闲空间中存储的事务条目数量等于MAXTRANS参数值减去INITRANS参数的值。STORAGE:用于指定段的存储参数,若不指定存储参数,那么Oracle会使用表空间的默认存储参数。在STORAGE子句中可以设置下面6个存储参数:INITIAL:为表的数据段分配的第一个区的大小。NEXT:为表的数据段分配的第二个区的大小。PCTINCREASE:指定从第二个区开始,为表的数据段分配的区的大小增加比例。即每个区的大小等于前一个区的大小乘以(1+PCTINCREASE/100)。如果表处于本地管理方式的表空间中,则该参数被忽略。MINEXTENTS:允许为表的数据段分配的最小区数目。MAXEXTENTS:允许为表的数据段分配的最大区数目。如果表处于本地管理方式的表空间中,则该参数被忽略。BUFFER_POOL:指定表的数据块的缓存池。LOGGING和NOLOGGING:使用了LOGGING,则表的创建操作(包括通过查询创建表时的插入记录操作)都将记录到重做日志中,若用NOLOGGING,则表的创建操作不会被记录到重做日志中。默认情况将使用LOGGING子句。NOLOGGING子句适合于通过查询创建表的情况。CACHE和NOCACHE:在创建表时默认使用NOCACHE子句。但对于比较小又经常查询的表,可以使用CACHE子句。下面是一个在data表空间上建立employee表的例子。createtableemployee(idnumber(7),last_namevarchar2(25),dept_idnumber(7))pctfree20pctused50storage(initial200knext200kpctincrease0maxextents50)tablespacedata;2.复制表使用CREATETABLE命令不仅可以建立表结构,而且还可以将已存在表的结构和数据复制到另一张新表中。另外为了尽快复制表的数据,复制表时可以指定PARALLEL选项和NOLOGGlNG选项,示例如下:createtablenew_empparallel2nologgingasselect*fromscott.emp;其中,paralleldegree用于指定执行并行操作,parallel2表示由两个并行服务器进程执行数据加载操作。另外使用Nologging,在重做日志中没有记录下创建表的操作3.建立临时表通过createtable语句创建的表是永久性的表,即其中的记录可以一直保存下来。与之对应,在Oracle中还可以创建临时表(TemporaryTable)。与普通表不同,临时表中的数据在使用完毕后自动删除。“使用完毕”有两种情况:事务结束和会话结束。在创建临时表时若使用了oncommitdeleterows子句,则说明临时表是事务级别的。这时Oracle将在每次提交事务时对临时表进行删减操作,即删除表中的所有数据。若使用了oncommitpreserverows子句,则说明临时表是会话级别的。这时Oracle将直到会话终止时才对临时表进行删减操作。下面语句就建立了名称为employee_temp的临时表,该临时表将在每次事务提交时进行删减操作:createglobaltemporarytableemployee_temponcommitdeleterowsasselect*fromscott.emp;4.建立索引组织表一般情况下,表与索引数据分别存放在表段和索引段中。但索引组织表(IOT)比较特殊,它将表的数据和索引数据存储在一起,即以B树索引的方式来组织表中的数据。非键列键列行头普通表及其索引索引组织表要创建索引组织表,必须在CREATETABLE语句中显式地指定organizationindex关键字。另外,在索引组织表中必须建立一个primarykey主码约束。下面语句就创建了一个索引组织表employees。createtableemployees(empnonumber(5)pri
本文标题:管理oracle对象
链接地址:https://www.777doc.com/doc-14484 .html