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

oracle学习笔记(8)——逻辑存储结构——数据块

2011-10-24 13:35 288 查看
1、  数据块的概念

        Oracle对数据库数据文件(datafile)中的存储空间进行管理的单位是数据块。数据块是数据库中最小的(逻辑)数据单位。与数据块对应的,所有数据在操作系统级的最小物理存储单位是字节(byte)。每种操作系统都有一个被称为块容量(block size)的参数。Oracle每次获取数据时,总是访问整数个(Oracle)数据块,而不是按照操作系统块的容量访问数据。

       数据库中标准的数据块(data block)容量是由初始化参数 DB_BLOCK_SIZE指定的。除此之外,用户还可以指定五个非标准的数据块容量(nonstandardblocksize)。数据块容量应该设为操作系统块容量的整数倍(同时小于数据块容量的最大限制),以便减少不必要的I/O操作。Oracle数据块是Oracle可以使用和分配的最小存储单位。

2、  数据库块结构



         块头部包括标题、表目录、行目录三部分。

         标题包含块的一般属性信息,如块的物理地址、块所属段的类型等;

         表目录包含数据块中保存的表的信息。

         行目录包含数据块中的行地址等信息。当一个数据块(data block)的行目录区(row directory)空间被使用后,即使数据行被删除(delete),行目录区空间也不会被回收。举例来说,当一个曾经包含50条记录的数据块被清空后,其块头(header)的行目录区仍然占用100字节(byte)的空间

        存储区包括行数据区和空闲区两部分。

                行数据区是已经使用的空间,保存数据库的对象数据;

                空闲区是尚未使用的存储空间,用于存放新的行或用来更新已存在的行。

3、数据块的管理

      对块的管理主要是对块中可用存储空间的管理,确定保留多少空闲空间,避免产生行链接、行迁移而影响数据的查询效率。

      当向表格中插入数据时,如果行的长度大于块的大小,行的信息无法存放在一个块中,就需要使用多个块存放行信息,这称为行链接

      当表格数据被更新时,如果更新后的数据长度大于块长度,Oracle会将整行的数据从原数据块迁移到新的数据块中,只在原数据块中留下一个指针指向新数据块,这称为行迁移

      对块的管理分为自动和手动两种:

      如果建立表空间时使用本地管理方式,并且将段的管理方式设置为AUTO,则采用自动方式管理块。否则,DBA可以采用手动管理方式,通过为段设置PCTFREE和PCTUSED两个参数来控制数据块中空闲空间的使用。

      PCTFREE参数指定块中必须保留的最小空闲空间比例。当数据块的自由空间百分率低于PCTFREE时,此数据块被标志为USED,此时在数据块中只可以进行更新操作,而不可以进行插入操作。该参数默认为10。

      PCTUSED参数指定可以向块中插入数据时块已使用的最大空间比列。当数据块使用空间低于PCTUSED时,此块标志为FREE,可以对数据块中数据进行插入操作;反之,如果使用空间高于PCTUSED,则不可以进行插入操作。该参数默认为10。

      INITRANS指定可以同时对此数据块进行DML操作的事务的个数。

      MAXTRANS指定可以同时对此数据块进行DML操作的最多事务的个数。

 

     PCTFREE和PCTUSED参数的使用如下图:



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息