侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Oracle 物理存储结构

与晚风述往事
2021-11-07 / 0 评论 / 0 点赞 / 192 阅读 / 1,028 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-29,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

介绍

RDBMS(关系型数据库)通常具有物理存储结构和逻辑存储结构。采用物理和逻辑结构分离的方式,可以做到管理物理结构而不影响逻辑结构的访问。

Oracle将物理结构又分为数据库和实例。数据库是Oracle数据存储在磁盘存储中的一组文件。这些文件又根据不同的作用划分成了三类,分别是:

  • 数据文件和临时文件
  • 控制文件
  • online redo log文件

实例就是用来管理数据库文件的内存结构,下图显示数据库和实例的关系:
image.png

数据文件

Oracle将数据存在到数据文件中,并且对于每个数据库,必须至少有一个数据文件。

上面提到数据文件有两种,一种是数据文件,一种为临时文件。这两种文件的作用都是存储数据,不同点就在于,数据文件是存储Oracle产生的数据,这些数据会永久性的保存;而临时文件是用存储那些因为物理内存不足,无法将数据全部在内存中完成操作(HASH、排序、数据集和其它操作),而临时写入到临时文件中。

控制文件

控制文件是一个二进制文件,只和数据库有关联,并且每个数据库中有且仅有一个控制文件。

控制文件中主要包含以下信息:

  • 数据库名和数据库标识符(DBID)
  • 创建数据库的时间戳
  • 数据文件、redo log和归档日志文件的信息
  • 表空间信息
  • RMAN备份信息

说完了控制文件中的内容,再来说说它的用途。它主要用途有两点:

  • 跟踪数据库的物理结构变化情况。
  • 记录数据库未打开时必须可以访问的元数据。

Oracle在打开后,会不断的进行读取和写入控制文件的信息,并且是在数据库打开时必须可以用于写入。

online redo log

Online redo log主要是记录对数据的更改,它是两个或两个以上的预先分配的文件组成。

Oracle数据库会将每个事务写入到redo log buffer中,然后根据某些规则,将其写入到redo log文件中。redo log的内容包括有为提交的事务、undo数据、架构(schema)和对象管理语句。

Oracle将数据库实例的online redo log叫做重做线程(redo thread),除集群RAC环境外,单个实例的重做线程只有一个,而集群环境是每个数据库实例都会有各自的重做线程。如果集群环境仅配置一个重做进程,每个数据库实例都要去访问,可能就会有争用的情况。注意,这里说的是单实例重做线程只有1个,不是redo log的数量。

redo log的结构

redo log文件包含重做记录。重做记录由一组更改向量组成,每个向量描述对数据块的更改。

更改向量这个词可能有点难以理解,举个例子:你执行了一个SQL语句,该语句是对A表的字段B执行一个更新操作,执行后就会在重做记录中记录对表A的数据段中的块、UNDO段中的块和UNDO段中的事务表的更改。

重做记录包括更改的所有相关元数据,包括以下内容:

  • 更改的SCN和时间戳
  • 生成更改的事务的事务ID号
  • 事务提交时的SCN和时间戳(如果已提交的话)
  • 进行更改的操作类型
  • 修改数据段的名称和类型
0

评论区