数据块、数据区、数据段、表空间

数据块 (Data Block)

数据块是oracle逻辑存储结构中最小的逻辑单位,也是执行数据库输入输出的最小储存单位。oracle数据存放在“oracle数据块”中,而不是“操作系统块”中。通常oracle数据块是操作系统块的整数倍,如果操作系统块大小为2048B,且oracle数据块大小为8192B,则表示oracle数据块由4个操作系统快构成。oracle数据块有一定的标准大小,其大小被写入到初始化参数DB_BLOCK_SIZE中。另oracle支持同一库中使用多种大小的块,与标准块大小不同的就是非标准块。

  可通过v$parameter数据字典来查询oracle标准块的大小,

 

 

 

上述代码中先格式化显示"name"列和"value"列大小方便同行显示,后用sql查询db_block_siae的值value 此时的值就是标准块的大小。     

  块头:存放数据块的基本信息,如块的物理地址、块所属的段的类型。                  

  表日录:存放表的相关信息。如果数据块中存储的数据是表数据,则表目录中存储有关这些表的相关信息。

   行目录:如果块中有行数据存在,则这些行的信息将被记录在行目录中。这些信息包括行的地址等

   空余空间:空余空间是一个块中末使用的区域,这片区域用于新行的插入和己经存在的行的更新。

   行数据:用于存放表数据和索引数据的地方,这部分空间己被数据行所占用 (如表中的若干行数据记录)。                                         

 

通常把块头、表目录、行目录这3部分组合起来称为头部信息区,头部信息区不存放数据,它存放整个块的引导信息,起到引导系统读取数据的作用。
所以头部信息区若遭到破坏,则Oracle 系统将无法读取这部分数据。另外,空余空间和行数据共同构成块的存储区,用于存放真正的数据记录

 

 

 

 数据区(Extent)

 

      数据区(也可称作数据扩展区)是由一组连续的 Oracle 数据块所构成的 Oracle 存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段(Segment)。当一个段中的所有空问被使用完后,Oracle 系统将自动为该段分配一个新的数据区,这也正符合 Extent 这个单词所具有的“扩展”的含义,可见数据区是 Oracle 存储分配的最小单位,Oracle 就以数据区为单位进行存储控件的扩展。

         使用数据区的目的是用来保存特定数据类型的数据。数据区是表中数据增长的基本单位,在 Oracle数据库中,分配存储空间就是以数据区为单位的。一个Oracle对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。

 

段(Segment  )

段是由一个或多个数据区构成的,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或族等占用空间的数据对象,Oracle也把这种占用空间的数据对象统一称为段。

一个段只属于一个特定的数据对象,每当创建一个具有独立段的数据对象时,Oracle 将为它创建一个段。段是为特定的数据对象(如表、索引、回滚等)分配的一系列数据区。段内包含的数据区可以不连续,并且可以跨越多个文件,使用段的目的是用来保存特定对象。一个 Oracle 数据库通常有以下 4种类型的段:

  (1)数据段:数据段中保存的是表中的数据记录。在创建数据表时,Oracle 系统将为表创建数据段。当表中的数据量增大时,数据段的大小自然也随着变大,数据段的增大过程是通过向其添加新的数据区来实现的。当创建一个表时,系统自动创建一个以该表的名字命名的数据段。

(2)索引段:索引段中包含了用于提高系统性能的索引。一旦建立索引,系统自动创建一个以该索引的名宇命名的索引段。


(3)回滚段:回滚段(也可称作撤销段)中保存了回滚条目,Oracle将修改前的旧值保存在回滚条目中。利用这些信息,可以撤销未提交的操作,以便为数据库提供读入一致性利回滚末提交的事务,即用来回滚事务的数据空间。当一个事务开始处理时,系统为之分配回滚段,回滚段可以动态创建和撤销。Oracle 11g 系统有个默认的回滚段,其管理方式既可以是自动的,也可以是手工的。

(4)临时段:当执行创建索引、 查询等操作时,Oracle 可能会使用一些临时存储空间,用于暂时性地保存解析过的查询语句以及在排序过程中产生的临时数据。Oracle 系統将在专门用于存储临时数据的表空间中为操作分配临时段。在执行 “CREATE INDEX”、“SELECT ORDER BY”、“SELECT DISTINCT” 和“SELECT GROUP BY” 等几种类型的 SQL 语句时, Oracle 系统就会在临时表空间中为这些语句的操作分配一个临时段。

在数据库管理过程中,若经常需要执行上面这类SQL 语句,最好调整 SORT_AREA_SIZE 初始花参数来增大排序区,从而使排序操作尽量在内存中完成,以获得更好的执行效率,但同时这对数据库服务器的内存空间提出了更大的要求。

表空间(Tablespace) 

      oacle 使用表空间将相关的逻辑结构(如段、数据区等)组合在一起,表空间是数据库的最大逻辑划分区城,通常用来存放数据表、索引、回滚段等数据对象,任何数据对象在创建时都必须被指定储存在某个表空间中,表空间 (属逻辑存储结构)与数据文件(属物理存储结构)相对应,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间;Oracle 数据的存储空间在逻辑上表现为表空间,而在物理上表现为数据文件。举个例子来说,表空间相当于操作系统中的文件夹,而数据文件就相当于文件夹中的文件。每个数据库至少有一个表空间 (即 SXSTEM 表空间),表空间的大小等于所有从属于他的数据文件大小的总和。

   由于表空间在物理上(即磁盘上) 包含操作系统中的一个或多个数据文件,因此在表空间中创建的数据对象就存在以下两种情况:

  (1)若表空间只包含一个数据文件,则该表空间中的所有对象都存储在这个数据文件中
  (2)若表空问包含多个数据文件,则Oracle 即可将数据对象存储在该表空间的任意一个数据文件中,也可以将同一个数据对象中的数据分布在表空间的多个数据文件中。

在创建数据库时,Oracle 系统会自动创建多个默认的表空间,这些表空间除了用于管理用户数据的表空间之外,还包括用于管理 Oracle 系统内部数据(如数据字典)的表空间,下面列举了 Oracle 11g
默认创建的主要表空间。

 

SYSTEM 系统表空间,
 用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等。Oracle 本身不赞成将用户创建的表、索引等存放在系统表空问中。表空间中的数据文件个数
不是固定不变的,可以根据需要向表空间中追加新的数据文件。

通过底朝天、

通过dict 查看数据库中数据字典信息

 

 

 通过v$fixed_view_definition查看数据库中内部系统表的信息,

 

           2. SYSAUX 表空间

   SXSAUX 表空间是 Oracle 11g 新增加的表空间,是随着数据库的创建而创建的,它充当 SYSTEM的辅助表空间,降低了 SYSTEM 表空间的负荷,主要存储除数据字典以外的其他数据对象。SYSAUX表空间一般不存储用户的数据,由 Oracle 系统内部自动维护。


3. UODO 表空间
撤销表空间,用于存储撒销信息的表空间。当用户对数据表进行修改操作 (包括插入、更新、删除等操作)时,Oracle 系统自动使用撤销表空间来临时存放修改前的旧数据。当所
做的修改操作完成并执行提交命令后,Oracle 根据系统设置的保留时间长度来决定何时释放掉撤销表空间的部分空间。一般在创建 Oracle 实例后,Oracle 系统自动创建一个名字为 “UNDOTBS1” 的撤销表空间,该撤销表空间对应的数据文件是 “UNDOTBS01.DBF”。

4. USERS 表空间

USERS 表空间-----用户表空间,是 Oracle 建议用户使用的表空间,可以在这个表空间上创建各种数据对象,比如创建表、索引、用户等数据对象。Oracle 系统的样例用户 SCOTT 对象就存放在 USERS表空间中。
除了 Oracle 系统默认创建的表空间外,用户可根据应用系统的实际情况及其所要存放的对象类型创建多个自定义的表空间,以区分用户数据与系统数据。此外,不同应用系统的数据应在放在不同的表空间上,而不同表空间的文件应在存放在不同的盘上,从而减少 I/Q 冲突,提高应用系统的操作性能。

 

posted @ 2022-03-11 14:47  孙栗峰  阅读(1382)  评论(0编辑  收藏  举报