oracle 基础知识(十一)----表空间结构

一,逻辑结构图

二.tablespace

  01,Oracle表空间

    它是一个逻辑的概念,它在物理上是不存在的.

  02,oracle 存储结构

    

  03.表空间特性

    一个数据库可以包含多个表空间,一个表空间只能属于一个数据库

    一个表空间包含多个数据文件,一个数据文件只能属于一个表空间

    一个表空间必须要有一个数据文件.

    一个表空间的大小等于其中所有数据文件的大小之和。数据库的大小等于其中所有表空间的大小之和;

    表空间可以被联机和脱机。SYSTEM表空间不能被脱机;

    表空间可以在读写、只读状态之间切换;

  04,表空间作用

    控制数据库所占用的磁盘空间;

    控制用户所占用的表空间配额,也就等于控制用户所占用的配额空间;

    通过将不同表的数据、分区表中不同分区的数据放置到不同的表空间中,可以提高数据库的I/O性能,并有利于进行部分备份和恢复等管理工作;

    能够将一个表的数据和这个表的索引数据分别防止到不同的表空间中,同样可以提高数据库的I/O性能;

    可以将表空间设置成只读状态而保持大量的静态数据。

  05,表空间类型

    😗系统表空间

      存放系统数据,系统表空间在数据库创建时创建。表空间名称为SYSTEM。存放数据字典和视图以及数据库结构等重要系统数据信息,在运行时如果 SYSTEM 空间不足,对数据库影响会比较大,虽然在系统运行过程中可以通过命令扩充空间,但还是会影响数据库的性能,因此有必要在创建数据库时适当的把数据文件设置大一些。系统表空间包括SYSTEM表空间和SYSAUX表空间,其余的表空间就是非系统表空间。存放到ORACLE的数据字典及其数据。

    😙临时表空间

      临时表空间,安装数据库时创建,可以在运行时通过命令增大临时表空间。临时表空间的重要作用是数据排序。比如当用户执行了诸如 Order by 等命令后,服务器需要对所选取数据进行排序,如果数据很大,内存的排序区可能装不下太大数据,就需要把一些中间的排序结果写在硬盘的临时表空间中。

    😏撤销表空间

      撤销表空间存储撤销段,撤销段主要用于入下目的:

        🎑.用一条ROLLBACK语句明确的回退一个事务;

         🎁.隐含的回退一个事务;

         🎗.重构数据的一个读一致图像;

         🎟.从逻辑错误中恢复。

      在ORACLE中可以创建多个撤销表空间,但同一时刻值允许激活一个撤销表空间。在初始化参数文件中用UNDO_TABLESPACE指出要激活的撤销表空间。撤销表空间的组织与管理由ORACLE内部自动完成。当回退段不足时,一个事务可以使用多个回退段,不会中止事务的运行。数据库管理员只需了解撤销表空间是否有足够的空间,而不必为每个事务设置回退段。

三.Segments

   01,段

    一种在数据库中消耗物理存储空间的任何实体(一个段可能存在于多个数据文件中,因为物理的数据文件
 是组成逻辑表空间的基本物理存储单位)

     表(table),用来保存行列结构的数据
     索引(Index),用来加快访问速递
     回滚(Rollback),在用户事务期间和执行事务恢复期间用来维护读一致性的特殊的段,回滚段会被宰第8章节管理一致和 并发继续说明
     分区(partition),为实现性能目标把表分成更小的更加容易管理的片。
     EXTENTS 是有由存储空间连续的块组成,但是每一个扩展只能驻留在单个数据文件中
     Database blocks 是orcacle中更小的块,他操作系统块组成。

四.Extents

     extent segment由一个或多个extent组成,extent是文件中一个逻辑上连续分配的空间(一般来讲,文件本身在磁盘上并不是连续的)。每个segment都至少有一个extent,有些对象可能还需要至少两个extent(回滚段就至少需要两个extent)。

    如果一个对象超出了其初始extent,就会请求再为它分配另一个extent。第二个extent不一定就在磁盘上第一个extent旁边,但extent内的空间总是文件中的一个逻辑连续空间。

    每个段(segment)的定义中都包含了extent的存储参数(storage parameter)。存储参数适用于各种类型的段。这个参数控制着Oracle如何为段分配可用空间。例如,用户可以在  CREATE TABLE 语句中使用 STORAGE 子句设定存储参数,决定创建表时为其数据段(data segment)分配多少初始空间,或限定一个表最多可以包含多少extent。如果用户没有为表设定存储参数,那么表在创建时使用所在表空间(tablespace)的默认存储参数。
    用户既可以使用数据字典管理的表空间(dictionary managed tablespace),也可以使用本地管理的表空间(locally managed tablespace)。除了 SYSTEM 之外的所有永久表空间(permanent tablespace)默认使用本地管理方式。

    在一个本地管理的表空间中,其中所分配的extent的容量既可以是用户设定的固定值,也可以是由系统自动决定的可变值。当用户创建表空间(tablespace)时可以使用  UNIFORM (用户指定)或 AUTOALLOCATE (由系统管理)子句设定extent的分配方式。

    * 对于固定容量(UNIFORM)的extent,用户可以为extent设定容量或使用默认大小(1 MB)。用户须确保每个extent的容量至少能包含5个数据块(database block)。本地管理(locally managed)的临时表空间(temporary tablespace)在分配extent时只能使用此种方式。
    * 对于由系统管理(AUTOALLOCATE)的extent,由Oracle决定新增extent的最佳容量,其最小容量为 64 KB。如果创建表空间时使用了“segment space management auto”子句,且数据块容量大于等于 16 KB,Oracle扩展一个段时(segment)所创建的extent的最小容量为 1 MB。对于永久表空间(permanent tablespace)上述参数均为默认值。

    在本地管理的表空间(locally managed tablespace)中,INITIAL,NEXT,PCTINCREASE,和 MINEXTENTS 这四个存储参数可以作用于段(segment),但不能作用于表空间。INITIAL,NEXT,PCTINCREASE,和 MINEXTENTS 相结合可以用于计算段的初始容量。

    一般来说,在用户将一个段(segment)对应的方案对象(schema object)移除(使用 DROP TABLE 或 DROP CLUSTER 语句)之前,此段的extent不会被回收到表空间(tablespace)中,但是以下情况例外:

    * 表,簇表的所有者(owner)或拥有 DELETE ANY 权限的用户, 可以使用 TRUNCATE...DROP STORAGE 语句将表,簇表的数据清除
   * DBA 可以使用以下语法收回一个段中未使用的extent

      ALTER TABLE table_name DEALLOCATE UNUSED;
    * 如果用户为回滚段(rollback segment)设定了 OPTIMAL 参数,Oracle将周期性地从其中回收extent

五.Data  Blocks

     block是oracle中最小的空间分配单位。数据行、索引或者临时排序结果就存储在块中。通常oracle从磁盘读写的就是块。常见大小有4种:2kb、4kb、8kb或者16kb,但这并不意味着块的大小是2的幂,而是可以任意2~32之间的数值。

    数据库中是允许有多种块大小,目的是为了可以在更多的情况下使用可传输的表空间。而有多种块大小的表空间主要用于传输表空间,一般没有其他用途。

    数据库还有一个默认的块大小。system表空间总是使用这个默认块大小。

    在所给定的表空间内部,块大小都是一致的。对于一个多段对象,如一个包含LOB列的表,可能每个段在不同的表空间中,而这些表空间分别有不同的大小。可无论大小如何,每个块的格式是一致的。

    块首部(block header)包含块类型的有关信息(表块、索引块)、块上发生的活动事务和过去事务的相关信息,以及块在磁盘上的地址。
    表目录(table directory),包含把行存储在这个块上的表的有关信息。
    行目录(row directory)包含块中行的描述信息,这是一个指针数组,指向块数据部分中的行。
以上3部分称为块开销(block overhead),这部分空间并不用于存放数据,而是由oracle用来管理块本身。接下来的两部分就是存储数据了:块上可能有一个空闲空间(free space),通常还会有一个目前已经存放数据的已用空间(used space)。

    对于块空间的管理,主要有两个参数,pctfree和pctused。

      pctfree值是指达到该值后,数据将无法继续插入数据,同时将该块从free list 上移走;
      pctused值是指如果因删除更新等操作使得实际值低于pctused值,则表示数据可以继续插入,同时将该块移入free list ,表示该块是空闲的。
      系统默认值是pctfree =10 ,pctused=40

来自:  

posted on 2019-03-07 10:24  kingle-l  阅读(726)  评论(0编辑  收藏  举报

levels of contents