http://blog.csdn.net/flysyq/article/details/3978016
Oracle 概念(Oracle 10.2)
3、表空间、数据文件和控制文件
这一章描述了Oracle数据库的主要逻辑数据库结构---表空间以及其对应的数据文件。
本章包含下列内容:
u 表空间、数据文件和控制文件介绍
u 表空间概述
u 数据文件概述
u 控制文件概述
表空间、数据文件和控制文件概述
Oracle数据库逻辑上在表空间保存数据,物理上在表空间对应的数据文件保存数据。图3-1描述了其中的关系。
图3-1 数据文件和表空间
数据库、表空间和数据文件紧密关联,但是它们还是有重要的区别:
u 一个Oracle由一个或多个逻辑存储单位组成,这些单位叫做表空间,表空间负责保存数据库所有的数据。
u Oracle数据库的每个表空间由一个或多个叫做数据文件的文件组成,数据文件是Oracle所运行的操作系统上的文件。
u 一个数据库的数据存储在构成数据库中表空间的数据文件上。例如,一个最简单的数据库可能只有一个表空间和一个数据文件。另一个数据库可能拥有三个表空间,每个有两个数据文件(整体上就是六个数据文件)。
Oracle管理文件
Oracle管理文件减少了DBA直接管理组成Oracle数据库的操作系统文件的必要性。你可以基于数据库对象而不是文件名称来指定操作。Oracle内部使用标准的操作系统接口来创建和删除下列数据库构件需要的文件:
u 表空间
u 重做日志文件
u 控制文件
通过初始化参数,你可以指定特定类型文件使用的文件系统目录。Oracle就可以在创建和删除不需要的文件时确定唯一的一个Oracle管理的文件。
为数据库分配更多的空间
表空间的大小就是组成表空间的数据文件的大小之和。数据库的大小是组成数据库的表空间的大小总和。
你可以用三种方式扩充数据库:
u 为表空间增加数据文件
u 增加新的表空间
u 增加数据文件的大小
当你增加了一个数据文件到一个现存的表空间中,你就增加了分配给对应表空间的磁盘空间大小。图3-2说明了这类型的空间增长。
图3-2 通过给表空间增加数据文件的方式扩充数据库
同样,你可以创建一个新的表空间(包含至少一个数据文件)来提高数据库的大小。图3-3说明了这种情况。
图3-3 通过增加表空间扩充数据库
扩充数据库的第三种办法就是修改数据文件的大小或者使允许现存表空间的数据文件在有足够空间的情况下根据需要动态增长。可以通过调整现在文件大小或者为文件增加自动扩展属性来达到上述目的。图3-4说明了这种情况。
图3-4 通过动态扩充数据文件来扩充数据库
表空间概述
一个数据库由一个或多个叫做表空间的逻辑存储单位组成。表空间有过个叫做段的逻辑存储单位组成,段由多个区段组成。区段由一系列连续的块组成。
这一部分包含表空间的下列话题:
u 大文件表空间
u SYSTEM表空间
u SYSAUX表空间
u Undo表空间
u 默认临时表空间
u 使用多种表空间
u 表空间空间管理
u 多个块大小
u 在线和离线表空间
u 只读表空间
u 临时表空间的排序操作
u 数据库之间的表空间传送
大文件表空间
Oracle允许你创建大文件表空间。这允许Oracle数据库包含由一个大文件而不是多个小文件组成的表空间。这使得Oracle可以利用64位系统的优势来创建和管理超大文件。这样的结果是Oracle数据库可以扩大至8EB(1EB = 1,073,741,824 (1024**3)GB)。
在Oracle管理文件的情况下,大文件表空间使得数据文件对用户来说完全透明。换句话说,你可以在表空间上执行操作,而不是在底层的数据文件上操作。大文件表空间使得表空间成为磁盘空间管理、备份、恢复等等的主要单位。大文件表空间还简化了Oracle管理文件和自动存储管理的文件管理,因为它降低了增加新文件和处理多个文件的必要性。
系统默认是创建一个小文件表空间,这也是Oracle表空间的传统格式。SYSTEM和SYSAUX表空间总是创建为系统默认类型。
大文件表空间只支持使用自动段空间管理的本地管理表空间的情况。不过也有两个例外:本地管理的undo表空间和临时表空间即使在段空间手动管理的情况下也可以是用大文件表空间。
一个Oracle数据库可以同时包含大文件和小文件表空间。表空间的不同类型对于执行没有明确指定数据文件的SQL语句来说是没有多大区别。
你可以创建一个临时表空间组,这样一个用户就可以从多个表空间获得临时空间了。表空间组也可以指定为数据库的默认临时表空间。这对于大文件表空间很有用,这里你可能需要大量的临时表空间来进行排序。
大文件表空间的优点
u 大文件表空间可以有效的提高一个Oracle数据库的存储容量。小文件表空间能够包含1024个数据文件,但是大文件表空间可以只包含一个1024倍小文件表空间大小的文件。小文件表空间和大文件表空间总容量是相同的。虽然如此,由于存在一个数据库数据文件数不能超过64K的限制,一个包含大文件表空间的数据库可以1024倍小文件表空间的数据库,所以大文件表空间提升了整个数据库容量达3个数量级。换句话说,当文件表空间使用最大块大小(32K)时,Oracle数据库的最大尺寸是8EB。
u 超大规模的数据库中使用大文件表空间可以简化数据文件的管理,因为它降低了需要数据文件的数目。你也可以调整参数来减少数据文件信息需要的SGA空间和控制文件的大小。
u 通过数据文件透明来简化了数据库管理。
使用大文件表空间应该注意
u 大文件表空间倾向于在自动存储管理或者其他的支持自动扩展的逻辑卷和条带化的逻辑卷管理或者RAID的情况下使用。
u 避免在不支持条带化的系统上创建大文件数据库。因为它不支持并发执行和并发RMAN备份。
u 避免在下列情况下使用大文件表空间:磁盘组中没有足够的空闲空间,只能通过在另外一个磁盘组中增加数据文件的方式扩展表空间。
u 不推荐在不支持大文件尺寸的平台上使用大文件数据库,因为这会限制表空间容量。参考你的操作系统规格文档来获得支持的最大的文件大小的信息。
u 在大文件表空间上而不是在传统表空间上保存数据,可以提高数据库打开、检查点和DBWR进程的性能。虽然如此,提高数据文件大小可能会增加创建一个新数据文件或者恢复一个被破坏的数据文件所需的时间。
SYSTEM表空间
每个Oracle数据库创建时都会自动创建一个SYSTEM表空间。SYSTEM表空间在数据库打开时总是在线。
为利用本地管理表空间的优势,你可以创建本地管理SYSTEM表空间,或者你可以将现存的字典管理的SYSTEM表空间迁移为本地管理格式。
在包含本地管理SYSTEM表空间的数据库中,无法创建字典管理表空间。虽然可以使用表传送功能来附加一个字典管理的表空间,但是它也是不能写入的。
数据字典
SYSTEM表空间包含着整个数据库的所有数据字典表。数据字典表保存在编号为1的数据文件上。
PL/SQL程序单位描述
PL/SQL程序单位(如过程、函数、包和触发器)的所有数据在保存在SYSTEM表空间上。如果数据库包含这些程序单位,数据库管理员必须在SYSTEM表空间中提供这些单位需要的空间。
SYSAUX表空间
SYSAUX表空间是SYSTEM表空间的辅助。许多数据库组件使用SYSAUX表空间作为它们的默认位置来保存数据。因为在数据库创建或者升级时总会创建SYSAUX表空间。
SYSAUX表空间集中存储不包含在SYSTEM表空间中的数据库元数据。它降低了默认需要创建的表空间数量,不论在标准数据库还是用户自定义的数据库中都是如此。
在通常的数据库操作中,Oracle数据库服务器不允许删除或重命名SYSAUX表空间。也不支持SYSAUX的表空间传送。
Undo表空间
Undo表空间是用来存储undo信息的特定表空间。你不能在undo表空间上创建任何其他段类型(如表或者索引)。每个数据库包含0个或多个undo表空间。在自动undo管理模式下,每个Oracle实例会分配一个(只有一个)undo表空间。Undo数据在undo表空间的undo中管理,undo段由Oracle自动创建和管理。
当事务中的第一个DML操作运行时,事务会在当前undo表空间中绑定(分配)一个undo段(或者说事务表)。极少情况下,如果实例没有分配一个指定的重做表空间,事务会绑定到system undo段上。
每个undo表空间有一系列undo文件组成,采取本地管理方式。和其他类型的表空间一样,undo块组成区段,区段的状态在位图中展现。在任何时间点上,一个区段或者空闲,或者分配给一个事务表。
你可以创建大文件undo表空间。
创建undo表空间
数据库管理员可以使用CREATE UNDO TABLESPACE语句来创建undo表空间。它也可以使用CREATE DATABASE创建数据库时创建。新创建的undo表空间会包含一系列的文件。和通常的表空间一样,可以通过ALTER TABLESPACE和DROP TABLESPACE来调整和删除表空间。
Undo表空间的分配
你可以通过两种方式给一个实例分配一个undo表空间:
u 实例启动,你可以在初始化文件中指定undo表空间或者让系统选择一个可用的undo表空间。
u 当实例运行时,使用ALTER SYSTEM SET UNDO_TABLESPACE来用另外一个undo表空间来代替活动的undo表空间。这种方式很少采用。
你可以使用ALTER TABLESPACE命令来给undo表空间增加更多的数据文件来扩展undo表空间的空间。
你可以拥有多个undo表空间,在它们中间来切换。使用数据库资源管理器来构建每个用户undo表空间的限额。你可以指定undo信息的持续周期。
默认临时表空间
当SYSTEM表空间采取本地管理方式时,你必须在创建数据库时指定至少一个默认临时表空间。本地管理的SYSTEM表空间不能作为默认临时存储使用。
如果SYSTEM是字典管理模式,你在创建数据库时可以不指定默认临时表空间,然后SYSTEM作为默认临时存储使用。即使如此,你会在ALERT.LOG中收到一个警告,推荐使用一个默认的临时表空间,而且在将来的版本中是必须的。
如何指定默认临时表空间
在创建数据库的语句CREATE DATABASE的字句DEFAULT TEMPORARY TABLESPACE字句来指定默认临时表空间。
使用多个表空间
一个非常小的数据库可能只需要一个SYSTEM表空间;虽然如此,Oracle推荐你至少创建一个额外的表空间来单独保存用户数据,这样用户数据和数据字典信息是分离的。这样让你在管理不同的数据库操作时有更多的灵活性,并且降低了保存在同一个数据文件上字典对象和模式对象的争用。
你可以使用多个表空间来执行下列任务:
u 对数据库数据控制磁盘空间分配
u 针对数据库用户分配指定的空间限额
u 通过将单个表空间离线或者在线控制数据的可见性
u 执行部分数据库的备份和恢复操作
u 跨设备存储数据来提高性能
数据库管理员可以对表空间做如下操作:
u 创建新的表空间
u 为表空间增加新数据文件
u 为表空间的段设定或者修改默认段存储设定
u 设定表空间只读或者可读写
u 设定表空间临时或者持久
u 重命名表空间
u 删除表空间
在表空间中管理空间
表空间以区段为单位来分配空间。表空间可以使用两种不同的方式来跟踪他们的空闲和已用空间:
u 本地管理表空间:表空间管理区段
u 字典管理表空间:数据字典管理区段
当你创建表空间时,你可以选择这两个空间管理方式的一个。创建之后,你也可以使用DBMS_SPACE_ADMIN这个PL/SQL包来修改管理方式。
本地管理表空间
表空间在它的每个数据文件中维护一个位图来跟踪那个数据文件的块的空闲或者已用状态,进而来管理它的区段。位图中的每个位都对应一个块或者一组块。当一个区段被分配或者被释放可以重新使用时,Oracle会修改位图值来显示块的新的状态。这些改变不会产生回滚信息,因为它并没有更新数据字典的表(特定情况如表空间限额信息例外)。
本地管理表空间比字典管理表空间有如下优势:
u 区段的本地管理会自动跟踪临近的空闲空间,降低了区段合并的可能
u 区段的本地管理避免了递归的空间管理操作。如果在一个区段内使用或者释放空间引起另外一个操作在数据字典表或者回滚段中使用或者释放表空间的话,字典管理表空间中会产生这种递归操作。
本地管理下的区段尺寸可以自动由系统指定,当然,本地管理的表空间的所有区段也可以都是同样的尺寸,这样会覆盖对象的存储选项。
CREATE TABLESPACE和CREATE TEMPORARY TABLESPACE语句的LOCAL子句会分别指定创建本地管理的持久或者临时表空间。
本地管理表空间的段空间管理
当你使用CREATE TABLESPACE语句创建本地管理的表空间时,SEGMENT SPACE MANAGEMENT字句可以让你指定如何管理一个段内空闲和使用空间。可以有如下选择:
u AUTO
这个关键字告诉Oracle你打算使用位图来管理段内的空闲空间。这种情况下,一个位图是描述段内每一个数据块的关于插入数据库有多大的可用空间这个状态。随着块中有增加或者减少可用空间,位图中会刷新它的状态。位图可以让Oracle更自动的管理空闲空间;因为这种空间管理方式叫做自动段空间管理(automatic segment-space management)。
无论是传统的小文件表空间还是大文件表空间,本地管理的情况下都可以使用字段段空间管理。AUTO也是默认值。
u MANUAL
这个关键字告诉Oracle你打算使用空闲列表(free lists)来管理段内的空闲空间。空闲列表包含的是拥有可用空间可以插入的数据块列表。
字典管理表空间
如果你在早期Oracle版本上创建你的数据库,然后你可以使用字典管理表空间。这样的表空间使用数据字典来管理它的区段。无论区段被分配还是回收重新使用时,Oracle都会更新数据字典的适当的表。Oracle还保存数据字典表每个更新的回滚信息。因为数据字典表和回滚段是数据库的一部分,它们占用的空间和其他数据一样使用相同的空间管理方式。
多个块大小
Oracle支持一个数据库中多个块大小。SYSTEM表空间使用标准的块大小。这个值在Oracle创建时设定,可以使用任何有效值。你可以通过初始化参数DB_BLOCK_SIZE来指定标准的块大小。取值区间是2K到32K。
在初始化参数文件或者服务器参数中,你可以定义针对每个块大小的子Cache。子Cache可以在实例运行时定义。您可以创建使用任一这些块大小的表空间。SYSTEM表空间和其他大多数表空间采用标准的块大小。
多个块大小在从一个OLTP数据库到一个企业数据仓库中传输表空间比较有用。它降低了在不同块大小数据库之间传输数据的困难性。
在线和离线表空间
在数据库打开状态时,数据库管理员随时可以将除SYSTEM表空间之外的表空间在线(online,可访问)和离线(offline,不可访问)。Oracle打开状态时SYSTEM表空间必须一直在线,因为数据文件必须可以访问。
一个表空间通常是在线的,所以其中的数据对于数据库用户是可用的。虽然如此,数据库管理员可以将一个表空间离线,这样就可以维护或者备份以及恢复。
将表空间离线
当一个表空间离线时,Oracle不允许任何指向这个表空间上的对象的SQL运行。指向这个表空间数据的活动事务的完成的SQL语句在事务级别是不受影响的。Oracle保存这些完成的语句回滚数据到SYSTEM表空间的延期回滚段上。当表空间重新在线时,如果需要的话,Oracle会在表空间上应用这个回滚数据。
当一个表空间离线或者恢复在线,这些会在SYSTEM表空间的数据字典中记录。如果你离线表空间之后关闭数据库,那么数据库随后装载和重新打开时表空间仍然保持离线。
Oracle会在遇到某些错误时自动将一个表空间从在线转为离线。例如,当遇到数据库写进程DBWn在多次写入表空间的数据文件失败之后,Oracle会切换表空间为离线。用户试图访问离线表空间的数据表会得到一个错误。如果错误是媒体失败导致的磁盘I/O问题,解决问题之后,你必须恢复表空间。
表空间在特殊程序下的使用
如果你创建了多个表空间来分离不同类型的数据,你针对特定目录指定表空间离线。其他的表空间保持在线,这样他们的信息仍然可用。虽然如此,表空间离线可能会发生特殊情况。例如,如果两个表空间分别存储表数据和相应的索引数据,遵守下列情况:
u 如果包含索引的表空间离线,查询仍然可以访问表数据,因为访问表数据索引不是必需的。
u 如果包含表数据的表空间离线,然后数据库的表数据就不可访问,因为访问数据是需要表的。
如果Oracle从在线表空间上拥有运行语句足够的信息,它就会运行。如果需要离线表空间的数据,这样语句会失败。
只读表空间
只读表空间的主要目的是降低备份和恢复数据库的较大的静态部分的工作量。Oracle从不更新只读表空间的数据文件,因而这些数据文件可以在只读媒体上如CDROM和WORM驱动器。
只读表空间不能修改。要想更新一个只读表空间,首先必须使表空间可以读写。更新表空间之后,你可以重新设置它为只读。
因为只读表空间不能被修改,而且在任何时间点都不会被读写,所以它们不需要重复备份。而且,如果你需要恢复你的数据库,你不需要恢复任何只读表空间,因为它们从来没有改变过。(recover,restore是有区别的,前者是恢复,后者是覆盖,恢复数据库需要先覆盖,然后再恢复,所以才说不需要恢复只读表空间)。
临时表空间的排序操作
你可以通过指定一个或多个专门用来的排序的临时表空间来更好的有效的管理排序操作。这样会有效的降低包括排序空间的分配和释放的串行化空间的管理。单一的SQL操作可以使用多个临时表空间来排序。例如,你可以在很大的表上创建索引,索引创建时的排序操作可以分布在多个表空间上。
使用排序的操作都从临时表空间中受益。排序操作包含连接、索引创建、排序、聚集计算(GROUP BY)和收集优化统计等等。在真正应用集群中这种性能提高会体现的更充分。
排序段
一个或多个临时表空间只能用于排序段。一个临时表空间不同于用户指定临时段的表空间,任何这些表空间对用户来说都是可用的。临时表空间不能包含任何持久模式对象。
排序段在一个段被平行排序操作共享时使用。每个实例的一个排序段都在指定的表空间执行排序操作。
临时表空间在你执行内存无法容纳的多个排序时能够提高性能。给定临时表空间的排序段在第一个排序操作执行时创建。排序段会自动扩展区段,直到大于或者等于那个实例所有活动排序的需要的存储为止。
临时表空间的创建
使用CREATE TABLESPACE和CREATE TEMPORARY TABLESPACE语句来创建临时表空间。
数据库之间表空间传输
表空间传输允许你传输数据库的一部分到另一个数据库,甚至可以跨平台。你可以克隆一个表空间,然后插入另一个数据库中,在数据库之间拷贝表空间,或者从一个Oracle数据库抽出表空间插入另一个Oracle数据库中,或者在两个数据库中移动表空间。
通过表空间移动数据比导入导出和卸载装载同样的数据的速度高出一个数量级,因为传输表空间只包括拷贝数据文件和集成表空间元数据。当你传输表空间时,你也可以移动索引数据,所以你不需要像导入或装载表数据时那样重建索引。
你可以跨平台传送表空间。(大部分但不是全部平台支持跨平台表空间传送)。这个可以在以下方面使用:
u 提供一个更简单高效的方式为用户在不同平台上运行的Oracle发布和散发结构化数据。
u 简化从数据仓库环境到运行在小型平台上的数据集市分配数据的过程
u 通过异构集群共享只读表空间
u 允许数据库从一个平台到另一平台的迁移
表空间档案库
一个表空间档案库是一系列表空间的合集。表空间档案库构建在文件组档案库上,但是表空间档案库只包含数据库之间需要移动或者拷贝的表空间。不同的表空间集合可能保存在一个表空间档案库中,不同版本的特定表空间集合也可能保存在一起。表空间档案库中某一版本的表空间集合由以下部分组成:
u 对于表空间集合数据泵导出的dump文件
u 导出的数据泵的日志文件
u 组成表空间集合的数据文件
如何移动或拷贝一个表空间到另一个数据库
为移动或者拷贝一系列表空间,你必须先使表空间只读,拷贝这些表空间的数据文件,然后使用export/import来移动保存在数据字典中的信息(元数据)。元数据导出文件和数据文件都要拷贝到目标数据库所在机器上。传输这些文件可以使用任何拷贝平面文件的工具,如操作系统拷贝工具、FTP或者用CD分发。
在拷贝数据文件和导入元数据之后,你可以将表空间设置为读/写模式。
首先Oracle数据库将COMPATIBLE初始化参数设为10或者更高来打开表空间的数据文件,每个文件支持它所属的平台。这些文件在文件头的块的磁盘格式都是一致的,这些文件头的块是用来对文件进行标识和校验的。只读或者离线文件在它们被设为读/写或者在线模式后会获得更高的兼容性。这暗示着Oracle 10g数据库之前只读表空间在他们使用跨平台传输特性之前至少要启用读/写一次。
数据文件概述
Oracle数据库的一个表空间由一个或者多个物理数据文件组成。一个数据文件只能属于一个表空间和一个数据库。
Oracle通过指定特定大小的磁盘空间来为表空间创建数据文件,数据文件的大小还要加上文件头需要的空间。当数据文件创建时,Oracle所运行的操作系统会从文件上清除旧信息和认证信息,然后才分配给Oracle使用。如果文件很大,这个步骤可能花费大量的使间。数据库中的第一个表空间总是SYSTEM表空间,所以任何Oracle数据库创建时都要自动将数据库的第一个数据文件分配给SYSTEM表空间。
数据文件目录
当数据文件第一次创建时,分配的磁盘空间被格式化但没有包含任何用户数据。虽然如此,Oracle保留了空间来为关联的表空间(它是Oracle专用的文件)容纳将来的段的数据。随着表空间数据的增长,Oracle使用关联数据文件的空闲空间来为段分配区段。
表空间中模式对象的数据物理的保存在构成表空间的一个或多个数据文件中。注意一个模式对象并不对应特定的数据文件;相反一个数据文件是指定表空间内的任何模式对象数据的档案库。Oracle在表空间上一个或者多个数据文件为模式对象的数据分配空间。因此一个模式对象可以跨越一个或者多个数据文件。除非启用表条带化(这里数据是跨多个磁盘存储的),数据库管理员和最终用户无法控制模式对象保存在哪个数据文件上。
数据文件大小
你可以创建数据文件后修改数据文件的大小,或者你可以指定数据文件可以随着表空间内的模式对象的增长而增长。这个功能使得每个表空间拥有更少的数据文件和更简化数据文件管理。
离线数据文件
你任何时候都可以让表空间离线或者在线,当然SYSTEM表空间不可以。在你让表空间离线或者在线时,表空间的所有数据文件作为一个整体离线或者在线。
你也可以使单独的数据文件离线。虽然如此,这通常仅在某些数据库恢复过程中使用。
临时数据文件
本地管理的临时表空间拥有临时数据文件(tempfiles),它和通常的数据文件类似,但也有如下例外:
u 临时文件总是设置为NOLOGGING模式
u 你不能使一个临时文件只读
u 你不能使用ALTER DATABASE语句来创建临时文件
u 媒体恢复并不识别临时文件:
² BACKUP CONTROLFILE不会产生任何临时文件的信息
² CREATE CONTROLFILE不指定临时文件的任何信息
u 当你创建和改变临时文件的大小,并不保证分配指定文件大小的磁盘空间。在特定的文件系统上(例如,UNIX)磁盘块在文件创建和改变大小时并不分配,只在块访问前创建。
u 临时文件的信息在数据字典视图DBA_TEMP_FILES和动态性能视图V$TEMPFILE中显示,但不在DBA_DATA_FILES和V$DATAFILE视图中显示。
控制文件概述
数据库控制文件是数据库成功启动和操作必须的一个小二进制文件。控制文件在Oracle数据库使用的过程中持续更新,所以它在数据库打开时必须保持可用。如果因为某些原因控制文件不可访问,然后数据库就不能正常工作了。
每个控制文件只能关联一个Oracle数据库。
控制文件条目
控制文件包含相关数据库的信息,实例启动或者正常操作时都需要访问。控制文件的信息只能被Oracle修改;数据库管理员和用户都不能编辑控制文件。
在其他方面,控制文件包含如下信息:
u 数据库名称
u 数据库创建的时间戳
u 相关数据文件和重做日志文件的名称和位置
u 表空间信息
u 数据文件离线范围
u 日志历史
u 归档日志信息
u 备份集和备份组件信息
u 数据文件和重做日志的备份信息
u 数据文件拷贝信息
u 当前日志序列号
u 检查点信息
数据库名称和时间戳来源于数据库创建时。数据库名称来源于初始化参数DB_NAME或者CREATE DATABASE语句使用的名字。
每次数据文件或者重做日志文件被增加、重命名或者从数据库中删除,控制文件都会更新来反映物理结构的修改。记录这些改变是为了:
u Oracle可以在数据库启动过程中标识出数据文件和重做日志文件
u Oracle可以在数据库恢复时标识出需要的或可用的文件
因而,如果你修改了你的数据库的物理结构(使用ALTER DATABASE语句),然后你应该立刻对你的控制文件做一个备份。
控制文件还记录检查点信息。每3秒钟,检查点进程(CKPT)在控制文件中记录重做日志中的检查点位置信息。在数据库恢复过程中,这些信息告诉Oracle在重做日志组中的这个点之前的所有重做条目不需要进行恢复;它们已经写入到数据文件了。
多路复用控制文件
和重做日志文件一样,Oracle可以在同一个数据库中使用多个同样的控制文件来并行打开和写入。通过在多个磁盘中多路复用控制文件,你可以避免控制文件的单点失败问题。如果包含控制文件的一个磁盘崩溃,然后当前实例在Oracle视图访问损坏的控制文件时会失败。虽然如此,当其他磁盘上的当前控制文件可用时,一个实例可以重新启动而不需要进行数据库恢复。
如果一个数据库的所有数据文件在操作时都丢失了,然后实例会中断,需要进行媒体恢复。如果当前的控制文件拷贝不可用,需要使用旧的控制文件备份的话,媒体恢复是个很复杂的过程。所以强烈建议你遵循如下建议:
u 每个数据库都使用多路复用
u 在不同的物理盘上保存一个拷贝
u 使用操作系统镜像
u 监控备份