Oracle 11g R2 DBA 操作指南(17) 管理和维护表

来源:互联网 发布:知乎 杭州电子科技大学 编辑:程序博客网 时间:2024/06/05 16:55

1.Oracle基本的数据存储机制——表
1.1 数据的存储类型
Oracle定义了3种数据类型,分别是标量数据类型、集合数据类型和关系数据类型。

(1)标量数据类型。VARCHAR2(size)和NVARCHAR2(size):变长字符型数据CHAR(size)和NCHAR(size):定义字符型数据DATE:日期型数据    Oracle服务器使用7个定长的存储区存储日期型数据,它可以月,年,日,世纪,时,分和秒。NUMBER(P,S):数字型数据    参数p的最大值为38,最小值为1,而参数s的最大值为1217,最小值为-817.CLOB或LONG:用于存储大数据对象,该对象为定长的字符型数据。对于CLOB数据类型的列的操作不能直接使用Oracle数据库指令,需要一个DBMS_LOB的PL/SQL软件包来维护该数据类型的列。BLOB或LONG RAW:存储无结构的大对象,如照片,PPT,二进制图像等。它和CLOB数据类型一样,BLOB数据类型的列的操作只能通过PL/SQL软件包的DBMS_LOB来实现。BFILE:在操作系统文件中存储无结构的二进制对象,显然它是ORACLE的外部数据类型,Oracle无法直接维护这些数据类型,必须由操作系统来维护。RAW:该数据类型使得数据库可以直接存储二进制数据,在计算机直接传输该类型数据时,数据库不对数据做任何转换,所以该数据类型的存储和传输效率较高,RAW数据类型的最大长度为2000个字节。*LONG和LONG RAW数据类型主要用在Oracle8以前的数据库系统。LONG数据类型完全可以用Oracle9i,oracle10g,Oracle11g的CLOB或BLOB数据类型替换。(2)集合数据类型Oracle集合数据类型包括嵌套表和VARRY数据类型。在嵌套表的列值中又包含表,嵌套表中的元素数量没有限制,当然不能超过表所在的表空间的大小,而VARRY集合中的元素是有数量限制的。(3)关系数据类型。关系类型REF指向一个对象,在Oracle数据库中一个典型的REF类型的对象就是游标cursor。

1.2 行ID(ROWID)
ROWID也是一种数据类型,但是这种数据类型是Oracle服务器使用并管理的。首先解释ROWID的特性,通过特性可以理解ROWID的作用。

ROWID是数据库中每一行的唯一标识符。ROWID作为列值是隐式存储的。ROWID不直接给出行的物理地址,但是可以用ROWID来定位行。ROWID提供了最快速地访问表中行的方法。

虽然ROWID是非显式存储的,但是对于每一个表,都可以查询该表中每一行的ROWID。

select deptno,dname,loc,rowid from dept;ROWIDAAAH17EAAIAAAAByAAB前6位AAAH17E为数据对象号,在数据库中每个对象是唯一的。接着3位AAI为相对文件号,它和表空间中的一个数据文件对应。接着为AAAABy的块号,块号为相对文件中存储该行的块的位置,最后三位AAB为行号,行号标识块头中行目录的位置,而使用该行目录的位置可以找到行的起始地址。

2016/09/17 22:50:00

2.创建表
2.1 Oracle创建表的规则

Oracle数据库推荐了一些与表相关的标准。①命名尽量简单,表名要具有一定的意义,即表名要清楚描述表中存储的数据内容,如一个临时员工表的表名为temp_employees。②每个表一个表空间,这样易于管理和维护,对一个表空间的维护不影响其他的表,并且该表空间是本地管理的。③使用标准EXTENT尺寸减少表空间碎片。④Oracle数据库允许表名的最大长度为30个字符。

2.2 创建普通表

创建一个临时员工表temp_employeescreate table scott.temp_employees    (employee_id    number(17),     employee_name  varchar(30),     employee_sex   char,     department     varchar(30))    tablespace users;可以在dba_tables中查询表是否成功创建select owner,table_name,tablespace_name from dba_tables where owner = 'SCOTT';创建一个本地管理的表空间lincreate tablespace lindatafile 'd:\temp\lin.dbf'size 30Mextent management localuniform size 1M;创建临时表临时表是非常特殊的表,该表只对当前用户的当前会话有效。创建临时表的目的就是使得某些操作效率更高。临时表中的数据只对当前的会话的用户有效,是当前会话的私有数据,当前会话只操作自己的数据,没有数据锁的争用,这极大提高了临时表操作的效率。create global temporary tablescott.emp_temporaryon commit preserve rowsasselect * from scott.empwhere job = 'MANAGER';如果不再使用临时表,则最好删除,比较它占用存储空间,而且一旦用户改变或重新登录,都无法重新使用该表。DROP TABLE scott.emp_temporary;

3.段空间管理
在Oracle9i之后开始使用自动段空间管理即ASSM,它使用位图来管理段空间的使用情况。

4.理解高水位线(HWM)
高水位线HWM是Oracle访问数据实现全表扫描的数据块范围。如果使用TRUNCATE而不是DELETE删除表中的所有数据,此时会调整高水位线到表段的第一个数据块。

5.理解行迁移
行迁移是指某一行的数据量过大,导致该行无法存储在创建这一行的数据库中,此时Oracle就会使得该行离开原来的块,存储到另一个数据库中,该行的原始块和新块之间使用ROWID记录这种变迁关系,使得原始行知道后续数据存储的位置。

2016/09/20 21:36:00

6.创建索引组织表(IOT)

0 0
原创粉丝点击