Oracle 数据库从物理存储中完全抽象出逻辑存储. 逻辑数据存储采用 "段" 的形式. 段的类型有很多种: 典型的段是 "表". 这些段以物理形式存储在数据文件中. 通过表空间将逻辑存储从物理存储中抽象出来. 逻辑结构和物理结构及其定义之间的关联在数据字典中定义.
物理数据库结构
Oracle 数据库包括三类文件, 以及其他几种数据库之外 (或者说是可选的) 的文件. 必需的文件是控制文件(control file), 联机重做日志文件(online redo
log file)和数据文件 (data file). 通常所说的外部文件(还有一些事高级选项需要的) 是初始化文件, 口令文件, 归档重做日志文件以及日志和追踪文件.
控制文件
控制文件包含指向数据库其余部分的指针: 联机重做日志文件和数据文件的位置, 以及更新的归档日志文件 (如果数据库处于归档日志模式) 的位置. 它还存储这维护数据库完整性所需的信息: 例如各种重要的序列号和时间戳. 例如, 如果将恢复管理器工具用于备份, 则控制文件也将存储这些备份的详细信息. 控制文件的大小通常不过数 MB, 却起着至关重要的作用.
不必考虑使控制文件的多路副本保持同步, Oracle 将做好这一切. 维护工作将自动完成, 只需要控制要制作多少副本, 以及要将副本放于何处即可. 如果创建数据库时设置的副本数量或位置有误, 就可以在后期添加或删除副本, 或移动它们, 但要注意, 执行任何此类工作都需要停机, 因此, 最好还是一开始就设置好. 如果任何控制文件副本受损, 数据库实例将立即终止. Oracle 不允许使用控制文件数量低于要求的数据库.
联机重做日志文件
重做日志按时间顺序存储应用于数据库的一连串的变更向量. 其中仅包含重建 (或重做) 所有已完成工作的最少限度的信息. 如果数据文件 (或整个数据库) 受损, 则可以将这些变更向量应用于数据文件备份来重做工作, 将它们恢复到发生故障的那一刻前的状态. 重做日志包含两类文件: 联机重做日志文件 (必需的) 和归档日志文件(可选的).
每个数据库至少有两个联机重做日志文件, 但与控制文件一样, 优秀的 DBA 总是为每个联机重做日志文件创建多个副本. 联机重做日志包含多组联机重做日志文件, 每个文件都称为一个成员. Oracle 数据库至少需要两个组, 其中每个组知道有一个成员在运行. 处于性能考虑, 可以创建两个以上的组, 出于安全起见, 每组要有多个成员.
其中一个组是当前组: LGWR 将更改写入当前联机重做日志文件. 当用户会话更新数据库缓冲区缓存中的数据时, 也将尽可能少的变更向量写出到重做日志缓冲区. LGWR 将此缓冲区不断转储到当前联机重做日志文件组中的文件. 日志文件的大小固定不变, 因此, 当前组中文件最终会被写满. 此时, LGWR 将执行称为 "日志切换" 的操作. 这使第二个组称为当前组, 并开始执行写入. 如果数据库配置得当 ARCn 进程将归档 (实际上是备份) 第一个组中的日志文件成员. 当第二个组变满时, LGWR 将再切换回第一个组, 使第一个组成为当前组, 并重写其内容. ARCn 将接着归档第二个组. 这样, 联机重做日志文件组 (及其成员) 将被循环使用, 而每次日志切换将生成归档重做日志文件.
与控制文件一样, 如果每组具有多个成员(事实也应当如此), 那么仍然不必担心保持这些成员同步的问题. LGWR 能够确保对所有成员进程并行写操作, 从而使这些成员完全相同. 如果丢失某个组的一个成员, 只要还存在其他成员, 数据库仍然能够继续运行.
联机重做日志文件组的大小与数量涉及调整问题. 通常, 我们应当选择与预期活动数相适应的大小. 至少为 50MB, 但某些活动数特别多的数据库需要将此数值提高到数 GB, 否则, 每过几分钟, 文件就会变慢. 就十分忙碌的数据库而言, 每秒钟可生成数 MB 的重做数据, 就基本处于静态的数据库而言, 每小时也不过生成数 MB 的重做数据. 每个联机重做日志组的成员数量取决于适当的容错级别, 也依照住址标准中的文档记录而定. 不过, 不必再数据库创建阶段担心这个问题. 在稍后的任意时间, 都能够移动, 添加或删除联机重做日志文件, 并且可以任意创建不同大小的联机重做日志文件. 上述操作都可以在不停机的情况下 "联机" 执行, 因此对于最终用户来说是透明的.
数据文件
在数据库创建阶段, 至少必须创建两个数据文件. 一个用于 SYSTEM 表空间(存储数据字典), 一个用于 SYSAUX 表空间(存储数据字典的辅助数据), 一个用于 UNDO 表空间(存储保护事务所需的撤销段).
数据文件是数据的存储仓库. 数据文件的大小与数量实际上是不受限制. 其大小只受操作系统和硬件功能的限制.
数据文件是系统管理员可以看见的物理结构. 从逻辑上讲, 它们是段 (包含编程人员可以看到的用户数据的段, 以及构成数据字典的段) 的储存库."段(segment)" 是数据的存储结构, 典型的段是表和索引. 在数据库的生命周期内, 可以随时重命名, 移动, 添加或删除数据文件, 也可以重设其大小. 对某些数据文件执行某些操作时, 将产生停机时间.
在操作系统级别看, 数据文件由多个操作系统块组成. 在内部, 将数据文件的格式设置为 Oracle"块(block)". 在每个数据文件中, 这些块连续编号. 在创建数据文件时, 块大小固定不变, 在大多数环境中, 整个数据库的块大小都是一样的. 块大小设计调整问题, 大小范围是 2KB 到 32KB(收到平台的限制).Oracle 块大小与操作系统的块大小不存在任何关联.
块中存在头部分和数据区域, 还可能有一些空闲空间. 头部分包含诸如行目录的信息, 行目录列出块中行数据区域中的位置 (如果将相应的块用于表段), 还包含行锁定信息(如果有事务或几个事务正在处理块中的行). 数据区域包含行本身, 如行(如果是表段的一部分) 或索引键(如果块是索引段的一部分).
服务器进程对数据文件执行读操作, 而 DBWn 对数据文件执行写操作.
其他数据库文件
这些文件位于数据库之外. 在实际中, 它们都是必需的, 但雅阁地将, 它们并不是数据库的一部分.
实例参数文件 (Instance Parameter File) 当启动 Oracle 实例时, SGA 结构会根据此参数文件的设置内置到内存, 后台进程会据此启动. 这是启动实例所需的唯一文件. 其中的参数有数百个, 但只有一个是必需的, 它就是 DB_NAME 参数. 其他多有参数都有默认值. 因此说, 此参数文件可以很小, 但必须存在.
口令文件 (Password File) 用户用过提交用户名和口令来建立对话. Oracle 服务器根据存储在数据字典的用户定义对用户名和口令进行验证. 数据字典是数据库中的一组表, 如果未打开数据库, 将无法对其进行访问. 有时, 需要在使用数据字典前对用户进行身份验证: 在需要启动数据库时或创建数据库时. 外部口令文件是完成此任务的一种方式. 它包含存在于数据字典之外的少量用户名和口令(通常少于 6 个), 这些用于在使用数据字典前连接到实例.
归档重做日志文件 (Archive Redo Log Files) 当联机重做日志文件变满时, ARCn 进程会将联机重做日志文件从数据库复制到归档日志文件中. 在完成后, 归档日志就不再是数据库的一部分, 因为它不是连续的数据库操作所必需的. 但是, 如果需要还原数据文件备份, 它将起到重要的作用. Oracle 提供了用于管理归档重做日志文件的功能.
警报日志和跟踪文件 (Alert Log and Trace Files) 警报日志是影响视力和数据库的某些重要操作的相关消息的连续流. 并非所有事项都予以记录: 只记录认为确实重要的事件, 例如启动和关闭, 更改数据库的物理结构和更改控制实例的参数. 后台进程会在检测到错误条件时生成跟踪文件, 有时也用于报告特定事件.
逻辑数据库结构
Oracle 使用术语 "段" 来描述任何包含数据的结构. 典型的段是包含数据行的表, 但是 Oracle 数据库包含十多种段类型. 其中最引人关注的表段, 索引段和撤销段. Oracle 通过表空间 (tablespace) 方式, 将逻辑存储从物理存储中抽象出来. 表空间在逻辑上是一个或多个段的集合, 在物理上是一个或多个数据文件的集合. 如果使用 "关系分析" 术语, 则段和数据文件之间存在多对多关系: 可以将一个表分布在多个数据文件中, 而一个数据文件也可能包含多个表的一部分. Oracle 通过在段和文件之间插表空间实体, 解决这种多对多关系的问题.
必须在创建数据库时创建 SYSAUX 表空间. 如果未予指定, 将创建默认的 SYSAUX 表空间.
段由多个块组成. 数据文件的格式被设置为多个块, 随着块的增加, 这些块被分配给段. 由于每次管理一个块的空间过于耗时, 又将块分组为区间(extent). 区间是数据文件中编号连续的一系列块, 通过为段新添区间, 段将扩大. 这些区间不必相邻, 即使在同一数据文件中, 也是如此. 它们可以来自作为段所在表空间一部分的任何数据文件.
从逻辑上讲, 一个表空间可以包含多个段, 每个段可以包含多个区间. 区间是一组 Oracle 块. 从物理上界量, 数据文件由多个操作系统块 (由操作系统正在使用的文件系统所分配) 组成. 连接模型的两端的关系显示一个表空间可以包含多个数据文件, 从最低级别看, 一个 Oracle 块将包含多个操作系统块.
数据字典
数据字典包含从逻辑上和物理上描述数据库及其内容的元数据. 用户定义, 安全信息, 完整性约束和性能监视信息都是数据字典的一部分. 元数据作为一组段存储在 SYSTEM 和 SYSAUX 表空间中.
从很多方面讲, 构成数据字典的段与其他的段很相似. 关键区别在于: 数据字典表在创建数据库时生成, 你无权直接访问它们. Oracle 提供了一组视图来查询字典. 视图有四种形式: 带有前缀 CDB_,DBA_,ALL_和 USER_. 任何带有前缀 USER_的视图将描述查询视图的用户拥有的对象. 任何带有前缀 ALL_的视图将显示描述您有权访问的对象的行. 因此 ALL_TABLES 将显示描述你的表的行, 以及描述已经授权你查看的任何人的表的行. 任何带有前缀 DBA_的视图将显示数据库中每个对象的行, 因此, DBA_TABLES 拥有数据库中每个表对应的行. CDB 视图与 DBA 视图相同, 除非在多租户数据库中工作. 在创建数据库的过程中, 将创建这些视图, 还会创建大量由 Oracle 提供的 PL/SQL 包来帮助数据库管理员管理数据库, 帮助编程人员开发应用程序. PL/SQL 代码也存储在数据字典中.
表空间和数据文件之间的关联在数据库控制文件中维护. 其中列出多有数据文件, 致命其所属的表空间. 如果没有控制文件, 实例就无法找到数据文件, 然后识别组成 SYSTEM 表空间的文件. 只有打开 SYSTEM 表空间时, 实例才可能访问数据字典, 才可能打开数据库.
来源: http://www.linuxidc.com/Linux/2019-04/158208.htm