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

来源:互联网 发布:it makes 编辑:程序博客网 时间:2024/06/07 18:40

    最近特别忙,连上网的时间都没有。今天把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机构的示意图:

        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%。

 

         今天先到这里,有事要出去。