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的重做数据。每个联机重做日志组的成员数量取决于适当的容错级别,也依照住址标准中的文档记录而定。不过,不必再数据库创建阶段担心这个问题。在稍后的任意时间,都能够移动、添加或删除联机重做日志文件,并且可以任意创建不同大小的联机重做日志文件。上述操作都可以在不停机的情况下“联机”执行,因此对于最终用户来说是透明的。
数据文件