第8章 控制文件管理
控制文件是Oracle数据库中一种非常重要的文件。在Oracle数据库中主要包括:数据文件、控制文件和重做日志文件。在数据文件中存储数据库中的数据,包括各种数据库对象及其数据。在重做日志文件中存放用户执行DML及DDL命令的记录。在控制文件中存放数据库的结构信息。具体来说,在控制文件中包含以下重要信息:
·数据库的名称。
·数据文件和重做日志文件的位置和名称。
·当前日志序列号。
·检查点信息。
·表空间的名称。
·RMAN的备份与恢复信息。
控制文件是一个二进制文件,用户不能修改与查看这个文件的内容。数据库服务器在启动时需要读取这个文件的内容,以便打开数据库。为了使大家理解控制文件的重要性,首先介绍数据库服务器的启动过程。这个过程分为以下三个阶段。
第一个阶段,启动到NOMOUNT状态,数据库服务器根据参数文件的内容在内存中建立SGA,并启动DBWR、LGWR等后台进程。在这一阶段,实例将被启动;
第二阶段,启动到MOUNT状态。数据库服务器根据参数文件中记录的控制文件信息,打开控制文件;
第三阶段,启动到OPEN状态,数据库服务器根据控制文件中记录的信息,打开数据文件和重做日志文件,这时数据库服务器可正常运行并处理用户的请求。
由此可见,控制文件是实例和数据库之间的枢纽,如果控制文件丢失或损坏,数据库服务器将无法正常启动。正因为控制文件具有特殊的重要性,在创建数据库之后,或者在对数据库的结构进行修改之后,都应该及时备份控制文件。
8.1 控制文件的规划
因为控制文件具有特殊的重要性,所以对控制文件的数目和存放位置必须进行详细的规划。控制文件的数目和位置在创建数据库时就已经确定,在数据库服务器运行的过程中也可以根据需要进行修改。
8.1.1 控制文件的镜像
在一个数据库中至少需要一个控制文件。如果控制文件丢失或损坏,将导致数据库服务器无法启动。为了防止这种情况,在数据库中需要创建多个控制文件,这些控制文件互为镜像,内容完全相同。
控制文件的镜像是通过初始化参数control_files实现的。例如,通过这个参数指定三个控制文件:
control_files=("/u01/app/base/oradata/orcl/control01.ctl",
"/u01/app/base/oradata/orcl/control02.ctl",
"/u01/app/base/oradata/orcl/control03.ctl")
当数据库服务器启动时,只需要读取第一个控制文件的内容,而当数据库的结构发生变化时,被修改的信息必须同时写入所有的控制文件。如果其中一个控制文件不可用,那么数据库服务器将无法正常运行。在这种情况下,数据库管理员需要修改初始化参数control_files的值,删除其中不可用的控制文件,然后重新启动数据库服务器。假设控制文件control01.ctl损坏或丢失,初始化参数control_files可修改为:
control_files=("/u01/app/base/oradata/orcl/control02.ctl",
"/u01/app/base/oradata/orcl/control03.ctl")