现在的位置: 首页 > 综合 > 正文

Oracle存储物理结构

2012年06月22日 ⁄ 综合 ⁄ 共 11079字 ⁄ 字号 评论关闭

翻译和整理:刘晓韬 时间:2007-01-12

摘要: 本文描述了表空间(Oracle数据库首要的逻辑数据库结构)和与每个表空间对应的物理数据文件。这里为了介绍的方便,把属于存储逻辑概念的表空间放到了本章。

综述

  Oracle逻辑上把数据存储在表空间中,在物理上把数据存储在相应的数据库。如下图所示:

  数据库、表空间和数据文件是紧密相关的,但它们之间有重要的差别:

  • 一个Oracle数据库由一个或多个称为表空间的逻辑存储单元构成,它集中存储了所有的数据库数据
  • 在Oracle数据库中的表空间由一或多个文件构成,这些文件叫数据文件,它们是符合Oracle运行的得操作系统的物理结构。
  • 数据库的数据存储在数据文件中,数据库的每个表空间由数据文件构成。例如,最简单的Oracle的数据库将包括一个表空间和一个数据文件。另一个数据库可包含三个表空间,每个由两个数据文件构成(总共6个文件)。
  • Oracle管理的文件

      Oracle管理的文件消除了你或DBA直接管理组成Oracle数据库的操作系统文件的需要。你定义数据库对象而不是文件名。Oracle内部使用标准文件系统接口来创建和删除文件,文件主要用于以下目的:

    • Tablespaces
    • Redo log files
    • Control files

      通过初始化参数,你为某种类型文件指定文件系统路径。Oracle则保证文件创建的唯一性,并在不再使用时删除。

  • 为数据库分配更多的空间

      表空间的尺寸是组成表空间的所有数据文件的尺寸。数据库的尺寸是组成数据库的表空间集合的尺寸。

      你可以通过三种方式加大数据库尺寸:

    • 增加数据文件到表空间
    • 增加新的表空间
    • 增加数据文件的尺寸

      当你增加新的数据文件到存在的表空间,你也就增加了相应表空间的磁盘空间。下图显示了这种空间增长:

      替代办法是,你能创建新的表空间(它至少包含一个别的数据文件)以增长数据库尺寸。下图显示了这种增长:

      第三种扩大数据库尺寸的方法是改变数据库文件的尺寸或让已存在的数据库文件根据空间需要动态增长。你可以通过修改存在的文件或给文件增加动态扩展属性来实现。如下图所示:

表空间

  1. Bigfile表空间

      Oracle可以让你创建bigfile表空间。这允许Oracle数据库包含由一个大文件构成而不是多个小文件构成的表空间。这使Oracle数据库能够在64-bit系统上创建和管理超大文件。这使Oracle Database现在能扩展到8 exabytes大小。

      对于Oracle管理的文件,bigfile表空间中的数据文件对用户是完全透明的。换句话说,你可以在表空间上执行操作,而不是在底层的数据文件上。Bigfile表空间使表空间成为磁盘空间管理、备份和恢复等操作主要单元。Bigfile表空间也简化了Oracle管理的和自动存储管理中的数据文件管理,在这种情况下取消了增加新的数据文件和处理多文件的需求。

      系统的缺省是创建小文件表空间,这是Oracle表空间的传统类型. SYSTEM和SYSAUX表空间类型总是使用系统缺省类型进行创建。

      Bigfile表空间仅对使用自动段空间管理的本地管理的表空间可用。那里有两个例外:本地管理的undo和临时表空间,即使它们的段是人工管理的也可以是bigfile表空间。

      Oracle数据库能同时包含bigfile和smallfile表空间。不同类型的表空间在执行SQL语句时是没有区别的,这些语句不直接访问数据文件。

      你可以创建临时表空间组,从而让用户从多个表空间中使用临时空间。一个表空间足能被设为数据库的缺省临时表空间。在排序时要使用大量临时表空间的情况,bigfile表空间就非常有用了。

      Bigfile表空间的好处

    • Bigfile表空间能显著地增加Oracle数据库的存储容量。Smallfile表空间最多能包含1024个文件,bigfile表空间仅能包含一个文件,该文件是smallfile表空间的1024倍。Smllfiel表空间的总容量和bigfile表空间是相同的。但,由于每个数据库可包括的表空间的总限制为64K个,则一个数据库中bigfile表空间的总容量可以是smallfile表空间的1024倍以上。换句话说,在bigfile使用32k为最大的块尺寸时,Oracle数据库的最大尺寸时8 exabytes。
    • Bigfile表空间通过减少数据文件的数量,简化了超大规模数据库的数据文件的管理。你也可以通过调整参数减少数据文件和控制文件信息所需的SGA空间。

      这样通过对数据文件的透明性,而简化了数据库文件管理。

      对于Bigfile表空间的考虑

    • Bigfile表空间趋向于使用自动存储管理或别的逻辑卷管理以支持动态的逻辑扩展和条带化或RAID。
    • 在系统不支持条带化时要避免创建bigfile表空间,这是由于这样会对并行执行和RMAN并行备份造成负面影响。
    • 在这种情况下也要避免使用bigfile表空间,在磁盘组中没有自由表空间可用,扩展表空间的唯一办法就是增加在另一个磁盘组上的数据文件。
    • 在不支持大文件系统的平台上部不建议使用bigfile表空间。参考你的操作系统文档关于最大支持的文件尺寸。
    • 数据存储在bigfile表空间,而不是传统表空间,可以提高打开数据库、检查点和DBWR进程的性能。

      当然,增加了数据文件尺寸可能会增加对损坏文件的修复时间和创建新数据文件的时间。

  2. SYSTEM表空间

      每个Oracle数据库包含一个叫SYSTEM的系统表空间,它是Oracle在创建数据库时自动创建的。SYSTEM表空间在数据库打开时,总是在线。

      为了利用本地管理的表空间的优势,你可以创建一个本地管理的SYSTEM表空间,或把已存在的管理SYSTEM表空间的字典迁移为本地管理格式。

      在本地管理SYSTEM表空间的数据库,不能创建字典管理的表空间。在使用transportable 特性时,插入一个字典管理的表空间是可行的,但该表空间不能写。

      数据字典

      SYSTEM表空间总是包含整个数据库的数据字典表。数据字典表存储在datafile 1种。

      PL/SQL程序单元的描述信息

      PL/SQL程序单元的信息(存储过程、函数、包和触发器)存储在SYSTEM表空间中。假如数据库包含许多这些程序单元,则系统管理员必须在SYSTEM表空间中考虑到程序单元的存储需求。

      注意:假如表空间是本地管理的,则它不能转换回字典管理格式。

  3. SYSAUX表空间

      SYSAUX表空间是对SYSTEM的辅助表空间。许多数据库组件把SYSAUX表空间作为存储数据的缺省地址。

      因此,SYSAUX表空间总是在数据库创建或更新时创建。SYSAUX 表空间对不存储在SYSTEM表空间中的元数据提供了一个集中存储地址。它减少了在种子(seed)数据库和用户定义数据库中缺省创建的表空间的数量。

      在常用的数据库操作中,Oracle数据库服务器不允许SYSAUX表空间被删除和更名。对SYSAUX表空间的传递(transportable)是不支持的。

      注意:假如SYSAUX表空间不可用,例如介质失败,则某些数据库特性将失败。

  4. Undo表空间

      Undo表空间是唯一用于存储undo信息的特定表空间。

      你不能在undo表空间中创建任何别的段类型(如表和索引)。每个数据库包含零个或多个undo表空间。在自动undo管理模式,每个Oracle实例分配唯一一个undo表空间。Undo数据在undo表空间中通过undo段管理,undo段是Oracle自动创建和维护的。

      当事务中的第一个DML操作运行时,事务被分配给当前undo表空间中的一个undo段(也就是一个事务表)。在某种特定环境下,假如实例中没有预想的undo表空间,事务被分配给系统undo段。

      undo表空间由undo文件组构成,它是本地管理的。类似于别的表空间类型,undo块以区为组,每个区的状态用位图来表示。在任何时间点,区要么分配给事务,要么是自由的。

      你可以创建一个bigfile undo表空间。

      注意:在创建第一个undo表空间并使它在线,不要运行任何事务。

      创建Undo表空间

      数据库管理员可以用CREATE UNDO TABLESPACE语句独立创建undo表空间。它也能在使用CREATE DATABASE语句创建数据库时创建undo表空间。每个undo表空间要分配一个文件集合。类似于别的常规表空间,undo表空间的属性可以使用ALTER TABLESPACE语句修改,可以使用DROP TABLESPACE语句删除。

      分配Undo表空间

      你可以以两种方式分配undo表空间:

    • 在实例启动时。你可以在初始化文件中指定undo表空间,或者让系统选择一个可用的undo表空间。
    • 在实例运行时,使用ALTER SYSTEM SET UNDO_TABLESPACE语句用别的undo表空间替换活动的undo表空间。这个方法很少使用。

      你可以使用ALTER TABLESPACE语句增加文件到undo表空间中,以得到更多的undo表空间。

      你可以有多个undo表空间,并在它们之间切换。使用数据库资源管理器创建undo表空间的用户配额。你可以指定undo信息的保留周期。

      注意:undo表空间在被某个实例使用时或者包括任何恢复事务的数据时,该表空间不能删除。

  5. 缺省的Temporary表空间

      当SYSTEM表空间是本地管理的,你在创建数据库时必须定义至少一个缺省的临时表空间。一个本地管理的SYSTEM表空间不能用于缺省临时存储。

      假如SYSTEM是字典管理的,并且你在创建数据库时未定义一个缺省的临时表空间,则SYSTEM表空间可以被用于缺省的临时存储。无论如何,泥浆在ALERT.LOG收到一个警告,建议创建一个缺省的临时表空间,这在未来的版本中是必须的。

      如何指定一个缺省临时表空间

      当你创建数据库时,指定缺省的临时表空间;这可以在调用CREATE DATABASE时通过DEFAULT TEMPORARY TABLESPACE来指定。

      假如删除了所有的缺省临时表空间,则SYSTEM表空间被用于缺省的临时表空间。

      你可以创建bigfile临时表空间。Bigfile临时表空间中用tempfiles代替数据文件。

      注意: 你不能把缺省临时表空间作成永久的,或使其离线。

  6. 使用多表空间

      一个很小的小数据库只需要SYSTEM表空间;无论如何,Oracle建议你至少创建一个额外的表空间以把用户数据与数据字典信息分别存储。这给你在不同的数据库管理操作中更多的灵活性,并减少字典对象和schema对象由于使用同一数据文件带来的偶合性。你可以使用多表空间以执行以下任务:

    • 控制对数据库数据的磁盘空间分配
    • 给数据库用户分配指定的空间配额
    • 通过指定独立表空间的在线和离线,以控制数据的可用性
    • 执行部分数据库备份和恢复操作
    • 把数据存储分配跨设备,以提高性能

      数据库管理员使用表空间完成以下动作:

    • 创建新的表空间
    • 增加数据文件到一个表空间
    • 为表空间中的段独立设置和修改缺省段存储设置
    • 使表空间只读或读/写
    • 使表空间临时或永久
    • 对表空间重命名
    • 删除表空间
  7. 在表空间中管理空间

      表空间以区的方式分配空间。表空间能用两种不同的方式追踪自由和已用空间:

    • 本地管理的表空间:表空间自己对区进行管理
    • 字典管理的表空间:数据字典管理进行区管理

      当你创建表空间,你选择这两种管理方式的一种;此后你可以通过DBMS_SPACE_ADMIN PL/SQL包改变管理方式。

      注意:假如在创建表空间时,你不指定区管理的方式,则缺省的为本地管理。

      本地管理的表空间

      本地管理的表空间在每个数据文件中维护了一个位图,以追踪自由的和已用的块状态。在位图中的每一位对应到一个块或一个块组。当一个区分配了或释放并可重用了,Oracle改变了位图的值以显示块的最新状态。这些改变不产生回滚信息,因为它们不更新数据字典中的表。 (除为在某些特定情况下,如改变了表的配额信息)。

      本地管理的表空间比起字典管理的表空间有如下优势:

    • 本地管理的的区自动追踪相邻的自由空间,取消对自由区合并的需要。
    • 本地管理的区避免了空间管理的递归操作。这种递归操作在字典管理的表空间中有可能发生。例如某个区消耗(或释放)了空间,导致了字典表或回滚段消耗(释放)空间的行为。

      本地管理的区的大小可以由系统缺省的指定。另一种选择是在本地管理的表空间中所有的区有相同的尺寸,而忽略具体对象的存储选项。

      在CREATE TABLESPACE和CREATE TEMPORARY TABLESPACE语句的LOCAL子句中,可指定创建本永久或临时表空间。

      在本地管理的表空间中的段空间管理

      当你使用CREATE TABLESPACE 语句创建本地管理的表空间,在EGMENT SPACE MANAGEMENT子句中让你指定在一个段中自由和已用空间是如何管理的。你可以选择:

    • 自动AUTO

        该关键字告诉Oracle,你希望在段中使用位图来管理自由空间。位图(在这种情况下)是描述段中每个数据块的状态的一个映射,它对应着块中可用于插入行的大小。在数据块中更多或更少的空间可用时,它插入新的状态反映在位图中。位图使Oracle更自动地管理自由表空间;这样,这种形式的管理成为自动段空间管理。

        本地管理的表空间可在smallfile和bigfile表空间中使用自动段空间管理。AUTO是缺省的。

    • 手工MANUAL

        该关键字告诉Oracle,你希望在段中使用自由链表管理自由空间。自由链表列出了所有拥有空间,可用于行插入的数据块。

      字典管理的表空间

      假如你使用一个更老版本的Oracle创建数据库,则你可以使用字典管理的表空间。对于使用字典管理段的表空间,Oracle在区被释放或分配时更新数据字典中对应的表。Oracle也把字典表中的更新信息存储在回滚段中。因为字典表和回滚段是数据库的一部分,它们占用的空间与其它的数据空间一样的方式进行管理。

  8. 多种块尺寸

      Oracle在数据库中支持多个块尺寸。在SYSTEM表空间中使用标准块尺寸。

      尺寸在数据库创建时被指定,可以是任何合法值。你可以通过在DB_BLOCK_SIZE初始化参数中指定标准块尺寸。合法的值是2K到32K。

      在初始化参数文件中或服务器参数种,你可以在buffer cache中为每种块尺寸指定subcache。Subcaches也能在实例运行中配置。你可以创建有任何合法块尺寸的表空间。标准块尺寸用于system表空间和许多别的表空间。

      多个块尺寸主要用于,在从一个OLTP数据库中传送表空间到企业数据仓库。该功能使不同块尺寸的数据库之间能进行传输。

      注意:所有的分区对象中的分区所在的表空间中的尺寸必须相同。

  9. 在线和离线表空间

      数据库管理员可以使SYSTEM表空间之外的任何表空间在线或离线无论数据库是否出于打开状态。SYSTEM表空间在数据库打开时总是在线,这是因为数据字典必须对Oracle服务器出于可用状态。

      表空间通常是在线的,则此时包含在该表空间中的数据文件对数据库用户可用。但,数据库管理员为了维护或备份与恢复的目的使一个表空间离线。

      使表空间离线

      当表空间离线了,Oracle不允许后续的SQL语句引用包含在表空间中的对象。对于活动事务已经完成了的语句,对连线表空间中数据的引用,对于该事务不会发生影响。Oracle把对应于这些完成语句的回滚数据存储在SYSTEM表空间的回滚段。当表空间被置回在线状态,如果需要的话Oracle应用回滚数据到表空间。

      当表空间从离线回到在线,则该行为记录在SYSTEM表空间的数据字典中。当数据库shutdown时,表空间出于离线状态的话,则在数据库再加载并重新打开时,该表空间将保持离线状态。

      你仅能把表空间在它所属的数据库中置为在线状态,因为必要的数据字典信息维护在该库的SYSTEM表空间中。一个离线的表空间,除了Oracle之外,不能使用任何工具读和编辑。这样,离线的表空间不能传送到别的数据库。

      当发生某个特定错误时,Oracle自动地把表空间从在线转为离线。例如,当数据库写进程,DBWn,在多次尝试写表空间的数据文件失败时,则Oracle把该表空间置为离线。用户尝试访问离线表空间中的表将收到错误。

      假如引起磁盘I/O失败的原因是介质失败,你必须在修复完问题后恢复表空间。

      对于特定过程的表空间的使用

      假如你为多种类型的数据创建不同的表空间,则你可以为了不同的处理把特定表空间置为离线。其它的表空间保持在线,在这些表空间中的信息依然保持可用。当然,当表空间离线,一些特殊情况会发生。例如,两个表空间分别用于数据和索引,以下情况会发生:

    • 假如包含索引的表空间是离线的,则查询依然能访问数据,因为查询可以不通过索引访问数据。
    • 假如包含数据的表空间是离线的,则该表不可访问,因为表需要访问数据。

      假如Oracle的在线表空间中的数据足以运行一条语句,则它将这么做。假如该语句需要离线表空间中的数据,则该语句将失败。

  10. 只读表空间

      只读表空间的首要目的是取消对一个数据库中很大,且静态的部分的的备份和恢复工作。Oracle决不更新只读表空间中的文件,因此文件可以驻留在只读介质上,如CD-ROMs或WORM。

      只读表空间不能修改。为了更新只读表空间,首先需要使该表空间可以读写。在更新表空间后,你能把它重置为只读状态。

      由于只读表空间不能修改,只要它曾经没有再次变为读/写状态,则它们不需要重复备份。这样,假如你需要恢复数据库,你不需要恢复任何只读表空间,因为它们没有被修改。

      注意:由于你仅能在表空间所创建的数据库中使其在线,只读的表空间并不能满足归档需求。

  11. 对于sort操作的临时表空间

      你能通过为sort操作分配专门的一个或多个临时表空间使该操作更有效。有效地分配可以减少sort空间的分配和释放等空间管理操作。单一的SQL操作可以为sort操作使用多个临时表空间。例如,你可以在很大的表上创建索引,在索引创建期间的sort操作能跨越多个表空间。

      使用sort的所有操作,包括joins、index创建、排序、聚集计算 (GROUP BY)和收集优化器的统计数据,都从临时表空间受益。在RAC配置下临时表空间对性能有着显著的影响。

      Sort段

      一个或多个临时表空间能仅用于Sort段。临时表空间与用户为临时段指定的表空间不完全相同,该表空间可以是对用户可用的任何表空间。没有任何持久性的schema对象可以驻留在临时表空间。

      Sort段在段被多个排序操作共享时使用。对于每个执行排序操作的实例都有一个排序段。

      临时表空间在你有多个排序以至于无法全部装在文件中时,有利于性能的提升。给定临时表空间的排序段在第一个排序操作时创建。排序段通过分配区不断地扩展,直到段尺寸大于等于实例中所有正运行的排序所需的尺寸。

      临时表空间的创建

      可通过CREATE TABLESPACE或CREATE TEMPORARY TABLESPACE语句创建临时表空间。

  12. 数据库之间的表空间传送

      表空间传送使你把一个Oracle数据库的子集从一个数据库移到另一个,即使跨越不同的平台。你能克隆表空间并插入到另一个数据库,在数据库之间拷贝表空间,或者你能把一个表空间从一个Oracle数据库取出来并把它插入到另一个Oracle数据库,从而在数据库之间移动表空间。

      通过在表空间之间传递数据能,该书局传输方式比export/import或 unload/load方式快若干个数量级,因为表空间传送,仅拷贝文件并集成表空间的元数据。当你传输表空间时,你也可以传输索引数据,这样你不必在加载完数据后重建索引。

      你能跨平台传输表空间(许多,但不是全部,平台都支持跨平台表空间传输)。这可以用于以下情况:

    • 提供一种更容易更有效的方式发布结构化数据,并把它发布给在不同平台上运行Oracle的客户
    • 简化了从数据仓库环境到数据集市(常运行在更小的平台)的数据发布
    • 使不同的集群间共享只读表空间
    • 允许数据库从一个平台迁移到另一个平台

      表空间仓库

      表空间仓库是一个表空间集合。表空间仓库建立文件组仓库商,但标空间仓库仅包含在数据库间进行表空间移动和拷贝的文件。不同表空间集合可以存储在一个表空间仓库,并且特定表空间集合的不同版本也可以存在一个表空间仓库中。表空间集合的一个版本由以下文件组成:

    • Data Pump从表空间集合中导出的文件
    • Data Pump对于导出的日志文件
    • 组成表空间集合的数据文件

      如何把表空间移动和拷贝到另一个数据库

      为了移动和复制一个表空间集合,你必须使表空间只读,拷贝这些表空间的数据文件,使用export/import移动数据字典中的数据库信息 (元数据)。数据文件和元数据export文件必须被复制到目的数据库。这些文件的传递可以使用任何拷贝平文件的工具进行,例如操作系统拷贝工具、FTP和CD。

      在拷贝数据文件和导出元数据后,你能(可选)把表空间置于读/写模式。

      在COMPATIBLE 初始化参数设为10或更高时,当Oracle第一次打开表空间数据文件时,每个文件标明它所属的平台。这些文件的文件头块的磁盘格式完全相同。只读或离线文件在它们被置为读/写或在线之后将得到更高版本的兼容性。这暗示着Oracle Database 10g 之前的只读表空间在用于跨平台传输特性时,至少必须处于读/写状态一次。

      注意:对于使用本地管理的SYSTEM表空间的数据库,不能创建字典表空间。但可以通过传输特性插入字典表空间,但该表空间不能是读写的。

数据文件

  Oracle数据库的表空间由一或多个物理数据文件组成。一个数据文件只能属于一个表空间和一个数据库。

  Oracle通过分配指定数量的磁盘空间加上文件头所需的额外空间,实现给表空间创建数据文件。当数据文件创建了,Oracle所运行的操作系统在把该文件分配给Oracle前,负责清理该文件上的老信息和授权。假如是一个大文件,则该处理将花可观的时间。在任何数据库中的第一个表空间总是SYSTEM表空间,则Oracle在数据库创建时,自动为SYSTEM表空间分配数据文件。

  数据文件内容

  当数据文件第一次创建后,分配的表空间属于已格式化的但未包含任何用户数据。当然,Oracle把这些空间以独占的方式保留下来,以用于表空间将来保存数据。当表空间中的数据增长了,Oracle使用相应数据文件的自由空间,以区的形式分配给段。

  与表空间的schema对象相关的数据,物理存储在表空间的一个或多个数据文件中。注意,一个schema对象并不对应到一个特定的数据文件;进一步讲,一个数据文件是特定表空间内schema对象数据的仓库。Oracle把与schema对象相关的数据分配在表空间中的一个或多个数据文件。因此,一个schema对象能跨越多个数据文件。除非使用了表条带化(striping)(在该情况下数据跨越了一个磁盘),数据库管理员和中端用户不能控制那个数据文件存储那个schema对象。

  数据文件的尺寸

  你可以在数据文件创建后修改数据文件的尺寸,或者你可以指定当表空间中的schema对象增长时,数据文件应当可以动态增长。这个功能使每个表空间拥有更少的数据文件,并能简化数据文件管理。

  注意:你在操作系统中需要更充足的磁盘空间以用于扩展。

  离线数据文件

  除了SYSTEM表空间,你可以在任何时间使表空间离线。当你在使表空间离线或在线时,所有的数据文件作为一个集合离线或在线。

  你可以把数据文件独立离线。当然,这一般在数据库恢复过程中进行。

  临时数据文件

  本地管理的临时表空间有临时数据文件(tempfiles),它与常规的数据文件非常接近,以下除外:

  • 临时文件总是处于NOLOGGING模式
  • 你不能使临时文件只读
  • 你不能用ALTER DATABASE语句创建临时文件
  • 介质恢复不重建临时文件:
    • BACKUP CONTROLFILE对于临时文件不产生任何信息
    • CREATE CONTROLFILE对于临时文件不指定任何信息
  • 当你创建或重组临时文件,它们并不总是保证分配制定尺寸的磁盘空间的分配。在某些的文件系统(例如,UNIX),磁盘块在创建或重置大小时并不真正分配,而是在访问前分配
  • 在字典视图DBA_TEMP_FILES 中和动态性能视图V$TEMPFILE中,而不是DBA_DATA_FILES或V$DATAFILE视图中显示的临时文件信息。

控制文件

  数据库控制文件是一个很小的二进制文件,对于数据库的启动和成功操作是必要的。在数据库使用中,控制文件是被持续更新的,则在数据库打开期间,它必须可写。假如,由于某种原因,控制文件不可访问,则该功能不能正常。

  每个控制文件仅与一个Oracle数据库相关联。

  控制文件的内容

  一个控制文件,包含着实例访问需要的数据库相关信息,这些信息在启动和正常操作时都需要。控制文件中的信息只能通过Oracle修改,任何数据库管理员和用户都不要编辑控制文件。

  控制文件包含的信息大约如下:

  • 数据库名称
  • 数据库创建的时间戳
  • 与数据文件和redo日志文件相关的文件名和地址
  • 表空间信息
  • 数据文件离线范围
  • 日志历史
  • 归档日志信息
  • 备份集合和备份片(piece)信息
  • 备份数据文件和redo日志信息
  • 数据文件拷贝信息
  • 当前的日志序列号
  • 检查点信息

  数据库名称和时间戳来源于数据库的创建。数据库名称即可以来源于DB_NAME初始化参数,也可以来源于CREATE DATABASE语句中所用的名称。

  每次,一个数据文件或一个redo日志文件添加、改名或从数据库删除,控制文件将更新以反映这个物理结构变化。这些变化被记录以便:

  • 在数据库启动时,Oracle能标识哪些数据文件和redo文件打开
  • Oracle能标识在数据库恢复时哪些文件需要,哪些可用

  因此,一旦你进行数据库物理结构的改变,(使用ALTER DATABASE语句),则你应当立即对你的控制文件进行备份。

  控制文件也记录了checkpoint信息。每三秒,checkpoint进程(CKPT)把redo日志中的checkpoint位置记录到控制文件中。该信息在进行数据库恢复时使用,告诉Oracle在redo日志组中这个点之前的信息不必进行恢复,它们已经在数据文件中了。

  控制文件的多路化

  就像redo日志文件,Oracle能够把多路相同的控制文件同时打开和写操作。通过把单一数据库的多个控制文件存储到不同的磁盘上,你能防止对控制文件的单一失败点。当保存控制文件的单一磁盘崩溃了,则在Oracle尝试访问损坏的控制文件时,当前的实例将失败。

  当然,在当前的控制文件的其它拷贝在不同的磁盘上可用时,数据库实例在不需要恢复的情况下即可重新启动。

  假如在操作中,某个数据库的所有控制文件丢失,则该实例将中断,需要介质恢复。假如由于当前的控制文件不可用,而必须使用一个老的控制文件备份,介质恢复并不是那么顺利地。强烈建议参照如下的规则:

  • 对于每个数据库使用多路控制文件
  • 在不同的物理磁盘上存储每个拷贝
  • 使用操作系统镜像
  • 监控备份

参考目录: Oracle 10g Concepts

抱歉!评论已关闭.