Oracle数据库存储结构:物理存储结构
Oracle数据库存储结构:物理存储结构
本⽂所讨论的内容涉及的数据库版本为 Oracle 19c。
物理存储结构简介
Oracle的物理存储结构与逻辑存储结构是分离的,因此你可以在不影响逻辑结构访问的情况下对物理存储结构进⾏管理。Oracle数据库可以看作是持久化存储上保存有数据的⽂件集合。当你执⾏ CREATE DATABASE 时,会⽣成以下数据库⽂件:
数据⽂件和临时⽂件:数据⽂件(data file)是Oracle数据库在持久化存储中⽣成的物理⽂件,其中包含有表、索引等数据结构。临时⽂件(temp file)是属于临时表空间的数据⽂件。Oracle会以其他软件⽆法读取的专有格式向这些⽂件写⼊数据。
控制⽂件(control file):是追踪数据库物理组成的⼆进制⽂件。没有控制⽂件数据库就⽆法启动。
在线重做⽇志(online redo log):是记录对数据库操作的⽇志⽂件。
数据库实例(database instance)是管理数据库⽂件的内存结构的集合。下图展⽰了数据库实例与它管理的⽂件之间的关系。
图1 数据库实例与数据库⽂件
数据库⽂件的存储机制
Oracle数据库常见的管理物理⽂件存储的机制包括:
Oracle⾃动存储管理(Automatic Storage Management, ASM):Oracle ASM 是专门为 Oracle 数据库设计的⼀种⽂件系统。
操作系统的⽂件系统(Operating system file system):⼤多数 Oracle 数据将⽂件存储在⽂件系统中。所有的操作系统都有在⽂件系统中给⽂件分配和释放磁盘空间的⽂件管理器。⽂件系统通常建⽴在逻辑卷管理器(Logical volume manager, LVM)创建的逻辑卷上。
集⽂件系统(Cluster file system):集⽂件系统是⼀个分布式的⽂件系统,通常⽤于对客户提供⾼性能服务的服务器集。集中的⼀个节点失败不会使整个⽂件系统不可⽤。
在实际应⽤中,Oracle数据库可以组合使⽤以上存储机制。⽐如,可以将控制⽂件和在线 redo ⽇志存储在传统的⽂件系统中,⽤户的某些数据⽂件存储在裸分区(raw partitions)中,其他的数据⽂件存储在 ASM 中,⽽归档的 redo ⽇志⽂件存储到集⽂件系统中。
Oracle ASM
⾃动存储管理是⼀个⾼性能、易于管理的 Oracle 数据库⽂件存储解决⽅案。Oracle ASM 也是⼀个专门为 Oracle 数据库提供⽂件系统的卷管理器(volume manager)。相对于传统的⽂件系统和存储管理器,ASM 具有如下优点:
简化了存储相关的任务,例如创建和布局(lay out)数据库、管理磁盘空间;
在物理磁盘上分布数据,解决了热点(hot spots)问题,同时提供了⼀致的性能;
在存储结构发⽣变化后⾃动再平衡(rebalance)数据。
要使⽤Oracle ASM,你需要为Oracle数据库分配已分区的磁盘,并具有条带化(Striping)和镜像(Mirroring)的⾸选项。Oracle ASM 管理磁盘空间,在所有可⽤资源之间分配 I/O 负载,以优化性能,同时消除了⼿动 I/O 调整的需要。
ASM 存储结构
性格Oracle 可以将数据⽂件存储为 ASM 磁盘组(ASM disk group)中的⼀个 ASM ⽂件(也可以存储其他类型的数据库⽂件)。下图展⽰了使⽤ ASM 的 Oracle数据库中的存储关系。
图2 Oracle ASM 组成
其中出现了以下重要概念:
ASM磁盘:是分配给 ASM 磁盘组的存储设备。ASM 磁盘可以是⼀个物理磁盘,也可以是⼀个分区、存储阵列(storage array)中的⼀个逻辑单元号(Logical unit number, LUN)、⼀个逻辑卷、或者⼀个⽹络附属⽂件(network-attached file)。
ASM磁盘组:是 ASM 作为⼀个逻辑单元来管理的⼀个 ASM 磁盘的集合。在磁盘组内,Oracle ASM 会为数据库⽂件暴露⼀个⽂件系统接⼝。磁盘组内存储的⽂件内容是均匀分布或者条带化的,以解决热点问题并提供⼀致的性能。
ASM⽂件:是存储在磁盘组中的⽂件。可以将 Oracle 中的数据⽂件、控制⽂件、在线重做⽇志等其
它类型的⽂件存储为 ASM ⽂件。小说人物名字
ASM ⽂件名以加号和ASM 磁盘组⽂件名开头,例如 +DISKGROUP/DB_INSTANCE/DATAFILE/tablepsace.256.167523。
ASM区(ASM extents):是 ASM ⽂件的⼀部分。⼀个 ASM ⽂件由⼀个或多个 ASM 区组成。每个 ASM 区由⼀个磁盘上的⼀个或多个分配单元组成。(注意:这⾥的ASM 区与逻辑存储结构中的区不⼀样。)
ASM分配单元(allocation units):是 ASM 磁盘组内的基本分配单元。分配单元是 Oracle ASM 分配的最⼩的邻近的磁盘空间。
⼀个或多个分配单元组成⼀个 ASM区。
ASM 实例
ASM 实例是仅⽤于管理 ASM 磁盘的特殊 Oracle 实例。Oracle 数据库实例和 ASM 实例都需要共享访问 ASM磁盘组中的磁盘。ASM
实例管理磁盘组的元数据,并向数据库实例提供⽂件布局信息。数据库实例不需要经过 ASM 实例就能直接向 ASM 磁盘进⾏ I/O 操作。
Oracle 使⽤相同的技术建⽴ ASM 实例与数据库实例。例如,与数据库实例类似,ASM 实例也有⼀个系统全局区(System global area, SGA)和后台进程。但是,ASM 实例不能挂载数据库,功能也⽐数据库实例少很多。
下图展⽰了⼀个 ASM 实例 和两个数据库实例组成的单点架构。
图3 Oracle ASM实例和数据库实例
Oracle管理的⽂件 vs ⽤户管理的⽂件
Oracle 管理的⽂件(Oracle managed files)是⼀个允许你使⽤数据库对象(⽽不是⽂件名)来说明操作的⽂件命名策略。例如,你可以创建⼀个表空间⽽⽆需注明它的数据⽂件。Oracle 管理的⽂件使得数据库管理员⽆需直接管理数据库中的操作系统⽂件。Oracle ASM 需要使⽤ Oracle 管理的⽂件。
另⼀⽅⾯,通过⽤户管理的⽂件(user-managed files),你可以直接管理数据库中的操作系统⽂件。你需要⾃主决定⽂件结构和命名。⽐如,创建⼀个表空间时指定其他名字和其中数据⽂件的路径。
数据⽂件(data files)
在操作系统层⾯,Oracle 数据库将数据存储在数据⽂件中。Oracle 数据库必须⾄少有⼀个数据⽂件。
数据⽂件的⽤途
每个未分区的 schema 对象(⽐如表、索引)、对象的每个分区都存储在⾃⼰的段(segment)中。每个段都只属于⼀个表空间(tablespace)。表空间和数据⽂件存在以下重要区别:
每个表空间由⼀个或多个数据⽂件组成;
⼀个数据库的所有数据都存储在数据库表空间的数据⽂件中;
⼀个段可以跨越⼀个或多个数据⽂件,但是不能跨越多个表空间;
⼀个Oracle数据库必须有 SYSTEM 和 SYSAUX 这两个表空间。在数据库创建时,Oracle 会⾃动为 SYSTEM 表空间分配第⼀批数据⽂件。SYSTEM 表空间中存有数据字典(data dictionary),即包含数据库元数据的表的⼀个集合。通常,Oracle 数据库还会有⼀个 undo 表空间和⼀个临时表空间(⼀般命名为 TEMP)。
下图展⽰了表空间、数据⽂件和段之间的关系。
图4 数据⽂件和表空间
永久数据⽂件 vs 临时数据⽂件
永久表空间(permanent tablespace)包含有持久化的 schema 对象,存储在永久数据⽂件中。
临时表空间(temporary tablespace)中的 schema 对象只存在于⼀个 session 中。在本地管理的临时表空间包含有临时⽂件(temp files),⽤于存储哈希、排序等操作中的数据。当内存空间不够时,临时⽂件也会⽤来存储查询操作的结果集数据。
油泼面做法步骤临时⽂件与永久数据⽂件相似,但存在以下区别:
永久数据库对象,⽐如表,不会存储在临时⽂件中;
临时⽂件⼀直被设定为 NOLOGGING 模式,即不会产⽣ redo⽇志。介质恢复过程中也不会识别临时⽂件;
临时⽂件不能被设置为只读;
不能使⽤ ALTER DATBASE 命令来创建临时⽂件;
当你创建或者改变临时⽂件的⼤⼩时,Oracle 并不会保证会给临时⽂件分配到指定⽂件⼤⼩的磁盘空
间。在 Linux 和 Unix 操作系统中,临时⽂件会被创建为稀疏⽂件(sparse files)。即只有当数据块被⾸次访问时才会给临时⽂件分配磁盘空间,⽽不是在创建或者resize 临时⽂件时就分配。
临时⽂件的信息可以在数据字典视图 DBA_TEMP_FILES 和 动态性能视图 V$TEMPFILE 中查看,但⽆法在 DBA_DATA_FILES 或V$DATAFILE 视图中看到。
在线数据⽂件 vs 离线数据⽂件
数据⽂件有在线(可⽤)和离线(不可⽤)两种状态。数据库⽆法访问离线的数据⽂件。当要进⾏离线备份或者发⽣数据块损坏时,就可以将数据⽂件离线。如果数据库⽆法向⼀个数据⽂件写⼊数据,就会⾃动将该数据⽂件离线。
与数据⽂件类似,表空间也有在线和离线两种状态。如果将⼀个在线表空间中的⼀个数据⽂件离线,该表空间本⾝仍然会保持在线状态。当我们将⼀个表空间离线,该表空间内的所有数据⽂件都会暂时不可⽤。
从 Oracle 12c 开始,在数据库打开时,可以使⽤ ALTER DATABASE MOVE DATAFILE 语句将⼀个在线的数据⽂件从所在的物理⽂件迁移到另⼀个物理⽂件。该功能可以在以下场景中使⽤:
将表空间从⼀种存储中迁移到另⼀种存储中;
福州移动将很少被访问的数据⽂件迁移到开销低的存储中;
qq超长网名将表空间设置为只读后,将其中的数据⽂件迁移到 write-once 存储中,⽐如 WORM (write once read many)驱动(⼀次性写⼊后不可删除和修改);
将数据库迁移到 Oracle ASM。
数据⽂件结构
在创建数据⽂件时,除了分配指定的磁盘空间以外,还会加上数据⽂件 header 的⼤⼩。数据⽂件 header 中包含有该数据⽂件的元数据,⽐如数据⽂件⼤⼩和检查点 SCN(checkpoint system change number, Checkpoint SCN)。每个数据⽂件 header 都包含⼀个绝对⽂件编号(⽤于在数据库中唯⼀标识该数据⽂件)和⼀个相对⽂件编号(⽤于在表空间中唯⼀标识该数据⽂件)。
创建数据⽂件时,分配的磁盘空间会被格式化但是尚未存储⽤户数据。这部分磁盘空间会被保留给相关表空间中将来存储数据的segment。随着表空间的数据增长,Oracle 会将数据⽂件中的剩余空间⽤来给 segment 分配区(extent)。
下图展⽰了数据⽂件中的不同空间。
图5 数据⽂件中的空间
控制⽂件(control files)
控制⽂件是仅与⼀个数据库有关的⼆进制⽂件。每个 Oracle 数据库都有⼀个唯⼀的控制⽂件,但是允许存在多个相同的控制⽂件拷贝。控制⽂件的⽤途
Oracle 数据库使⽤控制⽂件来定位数据库⽂件、管理数据库状态。
个体户营业执照控制⽂件中包含如下信息:
数据库的名称、数据唯⼀识别ID(database unique identifier, DBID);
创建数据库的时间戳;
数据⽂件、在线 redo log ⽂件、归档 redo log ⽂件的相关信息;
表空间的信息;
RMAN 的备份信息。
控制⽂件有如下重要⽤途:
控制⽂件包含有数据⽂件和在线重做⽇志⽂件的信息,是打开数据库所需的。控制⽂件还会跟踪记录更新数据库的结构变化(⽐如新建、重命名、删除数据⽂件)。
控制⽂件包含有数据库关闭时必须可访问的元数据。⽐如,⽤于恢复(recover)数据库的信息。
在数据库使⽤过程中,Oracle 持续地读写控制⽂件。在恢复数据库时,也需要从控制⽂件中读取所有数据⽂件的名称。在添加、删除、重命名数据⽂件时,控制⽂件中的信息也会更新。
控制⽂件复⽤
Oracle 允许同时打开多个相同的控制⽂件,写⼊同⼀个数据库。通过在不同的磁盘上复⽤控制⽂件,可以达到冗余状态以避免单点故障。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论