章节内容:
l 什么是控制文件
l 控制文件指南
l 创建控制文件
l 创建控制文件后的疑难解答
l 备份控制文件
l 使用当前副本恢复控制文件
l 删除控制文件
l 控制文件数据字典视图
l 数据库名称
l 关联数据文件和重做日志文件的名称和位置
l 数据库创建的时间戳
l 当前日志序列号
l 检查点信息
l 当数据库打开时,Oracle数据库服务器对控制文件必须是可写的。没有控制文件,数据库将会无法挂载,并且恢复困难。
Oracle数据库的控制文件与数据库同时创建。默认情况下,在创建数据库期间至少会创建一个控制文件副本。在某些操作系统上,默认是创建多个副本。你应该在数据库创建过程中创建两个或多个控制文件副本。如果你丢失了控制文件或想要更改控制文件中的特定信息,也可以稍后创建控制文件。
本节介绍管理数据库控制文件的准则,其中包含以下主题:
l 指定控制文件的文件名
l 控制文件在不同磁盘上的多路复用
l 备份控制文件
l 管理控制文件的大小
你可以使用数据库初始化参数文件中的CONTROL_FILES初始化参数指定控制文件名。数据库实例在数据库启动过程中识别并打开CONTROL_FILES参数中列出的控制文件,并在数据库操作过程中写入和维护这些控制文件。
如果在创建数据之前未指定CONTROL_FILES的文件:
l 如果不使用OMF(Oracle Managed Files),则数据库将创建一个控制文件并使用默认文件名,默认名称和操作系统相关。
l 如果使用OMF(Oracle Managed Files),那么OMF的初始化参数将指定控制文件的名称和位置。
l 如果使用Oracle自动存储管理(Oracle ASM),则可以将部分Oracle ASM文件名配置在DB_CREATE_FILE_DEST和DB_RECOVERY_FILE_DEST初始化参数中。然后,Oracle ASM会在相应的位置自动创建控制文件。
每个Oracle数据库应至少有两个控制文件,每个控制文件存储在不同的物理磁盘上。如果控制文件由于磁盘故障而损坏,则关联的实例必须关闭。当磁盘修复完毕后,可以使用其他磁盘上的控制文件的完整副本来还原损坏的控制文件,然后可以重新启动实例。在这种情况下,不需要进行介质恢复。
在多路复用控制文件下,数据库进行如下操作:
l 数据库写入初始化参数CONTROL_FILES列出的所有控制文件名。
l 在数据库操作期间,数据库只读取CONTROL_FILES参数中列出的第一个文件。
l 如果任何控制文件在数据库操作期间变得不可用,则数据库实例将变得不可用,操作应该被中止。
注意:
Oracle强烈建议你的数据库至少有两个控制文件,并且它们位于独立的物理磁盘上。
如果重做日志是多路复用的,可以将控制文件副本放在重做日志组成员所在的每个磁盘上,实现对控制文件的多路复用。通过在这些位置存储控制文件,可以最大限度地减少在磁盘故障中丢失所有控制文件和所有重做日志组的风险。
备份控制文件非常重要,包括在数据库最初始状态和每次对数据库的物理结构进行变更的情况。结构性变化如下:
l 添加,删除或重命名数据文件
l 添加或删除表空间,或更改表空间的读/写状态
l 添加或删除重做日志文件或重做日志组
备份控制文件的方法在“备份控制文件”中进行了说明。
在使用CREATE DATABASE语句创建数据库时,控制文件大小由MAXDATAFILES,MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY和MAXINSTANCES等参数的值决定。增加这些参数的值会增加相关数据库的控制文件的大小。
本章节描述创建控制文件的方法,包括如下主题:
l 创建初始化控制文件
l 添加额外副本,重命名和移动控制文件
l 创建新的控制文件
当你执行CREATE DATABSE语句时,数据库会自动创建初始化控制文件。控制文件的名字通过参数文件中的CONTROL_FILES参数指定,在CONTROL_FILES参数中需要指定控制文件名为全路径,具体到操作系统。以下是CONTROL_FILES初始化参数的例子:
如果你在创建数据库过程中,指定的控制文件名已存在,那必须在CREATE DATABASE语句中使用CONTROLFILE REUSE子句,否则会提示错误。同时,如果旧控制文件和参数中指定的控制文件大小不一致,那么不能使用REUSE子句。
在不同Oracle数据库发行版之间,控制文件大小和数量会有所不同。通过配置MAXDATAFILES,MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY和MAXINSTANCES等参数可以影响控制文件的大小。
你可以后续再修改CONTROL_FILES 参数值,以添加控制文件,修改控制文件名或者移动已有控制文件的位置。
你可以通过拷贝一个已有的控制文件到新的路径下然后修改CONTROL_FILES参数的方式添加控制文件备份。类似的,你也可以通过修改控制文件名或者将控制文件移动到其他路径的方式对控制文件重命名。在上述两种情况下,为了保证控制文件的一致性,请在拷贝控制文件前将数据库关闭。
添加一个控制文件备份或者重命名一个控制文件的方法:
1.关闭数据库
2.使用操作系统命令将已有控制文件拷贝至一个新的路径下
3.编辑初始化参数文件中的CONTROL_FILES 参数值,添加一个新的控制文件名或者修改已有控制文件名。
4.重启数据库
本节讨论何时以及如何创建新的控制文件。
在下列这些情况下,你需要创建新的控制文件:
l 在没有控制文件备份的情况下,数据库的所有控制文件都永久损坏
l 你想要修改数据库名
比如,在分布式环境中,你想修改一个和其他数据库名称冲突的数据库名。
注意:
你可以使用DBNEWID应用程序更改数据库名称和DBID(数据库内部标识符)。
l 当兼容性级别设置为早于10.2.0的值,你必须对数据库配置的一个区域进行更改,且该配置与CREATE DATABASE或CREATE CONTROLFILE命令中下列任一参数相关:MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY 和MAXINSTANCES。如果兼容性为10.2.0或更高版本,则在进行此更改时不必创建新的控制文件; 如果需要,控制文件会自动扩展,以适应新的配置信息。
例如,假设创建数据库或重新创建控制文件时,将MAXLOGFILES设置为3。假设现在要使用ALTER DATABASE命令将第四个重做日志文件组添加到数据库。如果兼容性设置为10.2.0或更高版本,你可以这样做并且控制文件会自动扩展以适应新的日志文件信息。但是,如果兼容性设置早于10.2.0,你的ALTER DATABASE命令将生成错误,你必须先创建新的控制文件。
你可以使用CREATE CONTROLFILE语句为数据库创建一个新的控制文件。下列语句为prod