您的位置:首页 > 数据库 > Oracle

ORACLE学习之路--数据库的存储结构

2009-09-05 14:04 281 查看
最近特别忙,连上网的时间都没有。今天把ORACLE的存储结构介绍一下。

ORACEL数据库中的数据逻辑存储在TABLESPACE中,同时物理地存储在数据文件中。要了解数据库的存储结构,就要先了解数据库中的数据是存放在哪里,以及存放数据库的逻辑空间名。

ORACLE中对数据的存储分了四层,根据存储大小以及从属关系依次为:

TABLESPACE 表空间

SEGMENT 段

EXTENTS 区

BLOCK 数据块

从上到下都是一对多的关系,下面我们一起来看看上面说的这些东西都是什么,有什么作用,如何管理。为了使大家更容易明白他们之间的关系,就从下往上开始介绍。

1、BLOCK 数据块

BLOCK是ORACLE中数据的最小存储单位,它的大小是在创建TABLESPACE的时候就定义了,一旦在TABLESPACE中定义了BLOCK的大小,那么在该TABLESPACE中创建的TABLE都会使用且只能用该尺寸来创建BLOCK。BLOCK大小的定义一定是操作系统数据块(OS BLOCK)大小的整数倍。ORACLE中BLOCK的大小有2K、4K、8K、16K、32K五种,其中8K在ORACLE中被定义为标准BLOCK SIZE,其他几种为非标准BLOCK SIZE。使用ORACLE自动管理来创建的TABLESPACE时使用的就是标准BLOCK SIZE。

标准BLOCK SIZE是在数据库创建时定义的,它对应参数文件中的参数为DB_BLOCK_SIZE。非标准BLOCK SZIE 对应的参数为DB_nK_SIZE,当n为8时,就会和DB_BLOCK_SIZE冲突,导致无效。用户在使用ORACLE创建表空间时可以使用标准BLOCK SIZE也可以使用非标准的BLOCK SZIE,但是有两个表空间是必须要使用标准BLOCK SIZE来定义:SYSTEM(系统表空间)、TEMPORARY(临时表空间)。

好不容易用画笔工具画个小图,下面这个图就是BLOCK机构的示意图:



HEADER为BLOCK的头,里面存放的是BLOCK的控制参数,FREE为空闲空间,DATA为存放在BLOCK中的数据。BLOCK中DATA的存储时从下往上涨。BLOCK常用控制参数为:INITRANS,MAXTRANS,PCTFREE,PCTUSED。

INITRANS,MAXTRANS为连接事物槽,控制并发。INITRANS为初始连接数,如果该BLOCK中存放的是DATA则默认为1,如果存放的是INDEX则默认为2,MAXTRANS 默认为255。

PCTFREE 最小为10%,这个参数不是用来显示还有多少空间没被使用,而是在BLOCK被创建时候用来定义该BLOCK中有多少空间被做为空闲空间。因为一条记录存放在一个BLOCK中,当初始化时候可能不全面,后面还要使用UPDATE来更新该记录,PCTFREE就是为了UPDATE而预留的用于已存储数据扩展用的。所以可以通过配置PCTFREE的值来使用性能调优,通常如果表中数据经常性的进行UPDATE则需要把PCTFREE配大点,反之则配小点。

PCTUSED,说来惭愧,我还不清楚是有什么用。嘿嘿!!

配置语句:

CREATE TABLE EMPLOYEE(

ID NUMBER(10) NOT NULL,

EMP_ID VARCHAR2(10),

EMP_NAME VARCHAR2(50),

EMP_DEPT_ID VARCHAR2(10)

)

TABLESPACE EMPLOYEE
PCTFREE 10
INITRANS 1
MAXTRANS 255

PCTFREE 参数后面的10表示的是10%。

今天先到这里,有事要出去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: