Oracle 存储结构简介

物理存储结构

Oracle的物理存储大致分为三种:数据文件(.DBF)、日志文件(.LOG)和控制文件(.CTL)

数据文件

每一个ORACLE数据库有一个或多个物理的数据文件。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:

  • 一个数据文件仅与一个数据库联系
  • 一旦建立,数据文件不能改变大小
  • 一个表空间(tablespace,数据库存储的逻辑单位)由一个或多个数据文件组成。

数据文件中的数据在需要时可以读取并存储在ORACLE内存存储区中。例如:用户要存取数据库某张表的某些数据,如果请求信息不在数据库的内存存储区内,则从相应的数据文件中读取并存储在内存。当修改和插入新数据时,也不必立刻写入数据文件。为了减少磁盘输出的总数,提高性能,数据存储在内存,然后由ORACLE后台进程DBWR决定如何将其写入到相应的数据文件。

控制文件

每一ORACLE数据库有一个控制文件,它记录数据库的物理结构,包含下列信息类型:

  • 数据库名
  • 数据库数据文件和日志文件的名字和位置
  • 数据库建立日期

为了安全起见,允许控制文件被镜象。
每一次ORACLE数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们必须被打开。当数据库的物理组成更改时,ORACLE自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。

日志文件

每一个数据库有两个或多个日志文件的组,每一个日志文件组用于收集数据库日志。日志的主要功能是记录对数据所作的修改,所以对数据库作的全部修改是记录在日志中。在出现故障时,如果不能将修改数据永久地写入数据文件,则可利用日志得到该修改,所以从不会丢失已有操作成果。

日志文件主要是保护数据库以防止故障。为了防止日志文件本身的故障,ORACLE允许镜象日志,即可在不同磁盘上维护两个或多个日志副本。

日志文件中的信息仅在系统故障或介质故障恢复数据库时使用,这些故障阻止将数据库数据写入到数据库的数据文件。然而任何丢失的数据在下一次数据库打开时,ORACLE自动地应用日志文件中的信息来恢复数据库数据文件。

日志文件包括两种:

  • 联机日志文件:用来循环记录数据库改变的操作系统文件
  • 归档日志文件:联机日志文件的备份。为避免联机日志文件重写时丢失重复数据。Oracle有两种归档日志模式,Oracle数据库可以采用其中任何一种模式:
    • NOARCHIVELOG:不对日志文件进行归档。这种模式可以大大减少数据库备份的开销,但可能会导致数据的不可恢复。
    • ARCHIVELOG:在这种模式下,当Oracle转向一个新的日志文件时,将以前的日志文件进行归档。为了防止出现历史“缺口”的情况,一个给定的日志文件在它成功归档之前是不能重新使用的。归档的日志文件,加上联机日志文件,为数据库的所有改变提供了完整的历史信息。

逻辑存储结构

Oracle的逻辑结构类型按照尺寸从小到大分可分为 :块(block) 、 区(extent) 、 段(segment) 、 表空间(tablespace) 、 数据库(database)
在这里插入图片描述

  • 块是Oracle用来管理存储的最小单元,也是最小的逻辑存储结构
  • Oracle数据库在进行输入输出时,都是以块为单位进行读写操作的
  • 新建表空间时可以指定块的大小
  • 块一般设置为操作系统数据块容量的整数倍
  • 块的默认大小为8kb(8192=1024×8)
    SQL> show parameter db_block_size;
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_block_size                        integer     8192
    

块的结构:

  • 头部信息区:负责管理开销,但是不存放数据,存放的是整个块的引导信息,引导系统读取数据。
    • 数据块头:记录块的地址和该数据块所属的段的的类型
    • 表目录区:记录插入数据所属表的信息
    • 行目录区:存放插入行的地址、ROWID等
  • 空闲空间: 主要包含空闲空间和已经使用的空间 。 Oracle主要是通过下面的两个参数对这部分空间进行管理,这两个参数既可以在表空间级别进行设置,也可以在段级别进行设置。段级别的设置优先级更高。
    • PCTFREE:指定块中必须保留的最小空闲空间比例。当块中的空闲存储空间减少到PCTFREE所设置的比例时,Oracle将块标记为不可用状态,新的数据行将不能被加入到这个块。
    • PCTUSED:指定的一个百分比参数,当块中已经使用的存储空间降低到这个百分比之下时,这个块才被重新标记为可用状态。
  • 数据空间:存储具体行的信息或索引的信息,占据了块的绝大多数空间。

常见的块的类型:

SQL> select distinct segment_type from dba_segments;//当前所有使用的块的类型

SEGMENT_TYPE
------------------
LOBINDEX
INDEX PARTITION
TABLE SUBPARTITION
TABLE PARTITION
NESTED TABLE
ROLLBACK
LOB PARTITION
LOBSEGMENT
INDEX
TABLE
CLUSTER
TYPE2 UNDO

12 rows selected

  • 区是Oracle数据库分配空间的最小单位
  • 区是由一组连续的块构成的,由一个或多个块组成
  • 一个或多个区构成一个段,当段中所有空间被使用完后,Oracle会自动为该段分配一个新的区

  • 由多个区组成,这些区可以是连续的,也可以是不连续的
  • 当用户在数据库中创建各种具有实际存储结构的对象时(保存有数据的对象),比如表、索引等,Oracle将为这些对象创建“段”
  • 一般一个对象只拥有一个段

段的类型

  • 数据段:保存表中的记录
  • 索引段:索引中的索引条目
  • 临时段:在执行查询等操作时,Oracle可能会需要使用到一些临时存储空间,用于临时保存解析过的查询语句以及在排序过程中产生的临时数据
  • 回滚段:保存回滚数据

表空间

  • 表空间是Oracle数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象
  • 一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间
  • 表空间的大小等于所有从属于它的数据文件大小的总和
  • 一个数据库是由多个表空间组成的
  • 在创建数据库时会自动创建一些默认的表空间,例如 SYSTEM表空间,SYSAUX表空间等

表空间的类型

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
  • 系统表空间(SYSTEM<主>、SYSAUX<辅>):默认的表空间,用于保存数据字典(一组保存数据库自身信息的内部系统表和视图,及用于Oracle内部使用的其他一些对象),保存所有的PL/SQL程序的源代码和解析代码,包括存储过程和函数、包、数据库触发器等,保存数据库对象(表、视图、序列)的定义
  • 回滚表空间(UNDOTBS1):用于存放回滚段,每个实例最多只能使用一个回滚表空间
  • 临时表空间(TEMP):存储SQL执行过程中产生的临时数据
  • 用户表空间(USERS):用于存储用户数据的普通表空间等,保存数据库对象(表、视图、序列)的定义
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值