控制文件包括以下重要信息:
控制文件是一个二进制文件,用户不能修改与查看这个文件的内容。数据库服务器启动时需要读取这个文件的内容,以便打开数据库。
数据库服务器启动的过程
控制文件时实例与数据库之间的枢纽。
控制文件的规划
在一个数据库中至少需要一个控制文件。如果控制文件损坏或丢失,数据库服务器将无法启动。需要创建镜像文件。
控制文件的镜像是通过初始化参数control_files实现的,当数据库服务器启动时,只需要读取第一个控制文件的内容,而当数据库的结构发生变化时,被修改的信息必须同时写入所有的控制文件。如果其中一个控制文件不可用,那么数据库服务器将无法正常运行。这种情况下,DBA需要修改初始化参数CONTROL_FILES的值,删除其中不可用的控制文件,然后重新启动数据库服务器。
控制文件应该分别存放在不同的磁盘上。
控制文件的存储位置
如果要改变控制文件的名称或位置,首先应该关闭数据库服务器,然后再操作系统中将控制文件复制到指定的位置,如果必要可同时修改文件名。然后修改初始化参数CONTROL_FILES的值,使其指向修改后控制文件,最后重新启动数据库服务器。
控制文件的重建
无论是增加新的控制文件、删除某个参数文件,还是修改控制文件的名称和位置,都需要修改初始化参数control_files的值。尽管可以通过ALTER SYSTEM修改这个参数,吧修改结果写入服务器参数文件,但是回容易使服务器参数文件的格式出现错误。
一个可行的办法是,通过服务器参数文件创建一个文本参数文件,在文本参数文件中修改这个初始化参数,然后通过文本参数文件启动实例,最后根据文本参数文件重新创建服务器参数文件。
重新创建控制文件的时机有以下几种情况:
控制文件全部不可用的情况
数据库服务器将无法正常启动,因而就不可能通过数据字典视图查询数据文件和重做日志文件的信息。唯一的办法是在磁盘上查找这些文件,并了解他们的大小。
创建控制文件的命令是CREATE CONTROLFILE。一般情况下创建控制文件的任务由SYS用户完成。
创建控制文件时,需要首先启动实例,将数据库服务器启动到NOMOUNT状态。控制文件名是不需要指定的,因为在启动实例时,将读取参数文件的内容,根据初始化参数CONTROL_FILES的值指定了控制文件的位置和名称。
例如:
CREATE CONTROLFILE REUSE DATABASE PRCL NORESETLOGS
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCE 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ' ****.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 '****.LOG' SIZE 500M BLOCKSIZE 512,
GROUP 3 '****.LOG' SIZE 500M BLOCKSIZE 512
DATAFILE
'D:/DATA1.DBF' ,
'D:/DATA2.DBF',
'D:/DATA3.DBF'
CHARACTER SET WE8MSWIN1252;
REUSE:指定位置存在同名的控制文件,则用新的控制文件覆盖它
RESETLOGS:清空重做日志文件中的信息。如果不希望清空重做日志,则使用NORESETLOGS;
DATABASE:指定数据库的名称,这个名称必须与初始化参数DB_NAME的值相同。
LOGFILE:指定所有重做日志文件的名称和大小。
DATAFILE:指定所有数据文件的名称和大小
CHARACTER SET:指定字符集的名称。
控制文件被创建后,数据库服务器就打开了控制文件,进入了MOUNT状态。然后切换数据库到OPEN 状态。
如果创建控制文件使用了RESETLOGS子句,则在打开数据库时,也必须使用这个子句。
修改数据库名称的情况
数据库的名称是由初始化参数DB_NAME指定,实例的名称通过初始化参数INSTANCE_NAME指定。
在修改数据库的名称时,需要修改初始化参数DB_NAME的值,数据库的名称还必须记录在控制文件中,因此柏旭重新创建控制文件,才能使新的数据库名称起作用。
在这种情况下,数据库服务器是可以正常运行,我们在创建控制文件之前,查询数据字典,了解数据文件和重做日志文件的信息
SELECT NAME FROM V$DATAFILE;
SELECT GROUP#,MEMBER FROM V$LOGFILE ORDER BY GROUP#;
在创建控制文件还需要指定字符集的名称。这可以查询V$NLS_PARAMETERS;
SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'
现在就可以创建控制文件了,首先用心的参数文件将数据库服务器的状态转入NOMOUNT状态,然后执行CREATE CONTROLFILE 命令,
CREATE CONTROLFILE REUSE SET DATABASE ORCL1 RESETLOGS。。。。
控制文件创建成功后,将数据库服务器启动到OPEN状态。
修改永久性参数的情况
与初始化参数不同的是,永久性参数不是记录在参数文件中,二是记录在控制文件中,如果要修改永久性参数的值,就需要重新创建控制文件。
与前面两种情况相同,NOMOUNT-->CREATE CONTROLFILE --->OPEN
控制文件的备份与删除
备份控制文件可在操作系统中,也可以在数据库中
在操作系统中,首先要停止数据库服务器的运行,然后将控制文件复制到备份设备上,最后重新启动数据库服务器上
在数据库中,ALTER DATABASE BACKUP CONTROLFILE TO 'D:/CONTROL.BAK'
如果控制文件丢失或损坏,需要关闭数%E �库服务器,将备份复制到控制文件所在的各个目录,并将他的����x�V)"��E^��=k("*"V �J"�x�V(������E(�@@�sdh���j� P��<⨩�Pl�Hۇ��Hۇ�0启动数据库服务器
将控制文件备份到跟踪文件中,利用这种备份,在跟踪文件中将生产CREATE CONTROLFILE 语句。 跟踪文件在 admin/<sid>/udump中。初始化参数 USER_DUMP_DEST指定
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
删除控制文件,首先要关闭数据库服务器,然后修改初始化参数CONTROL_FILES,去掉将被删除的控制文件,在操作系统中删除那些控制文件,最后重新启动数据库服务器。
控制文件信息的查询
从动态性能视图V$CONTROLFILE获得控制文件的位置和名称信息。也可以通过初始化参数CONTROL_FILES
查询控制文件中记录的信息
控制文件的信息是以记录(record)的形式组织的,每条记录所占的存储空间代销、控制文件能存储的这种记录的数目,以及存储的这种记录数等信息,都可以从动态性能视图V$CONTROLFILE_RECORD_SECTION中查询。其中TYPE是记录的类型,record_size 是该类型的每条记录所占用的字节数,record_total是控制文件能存储的该类型记录的数目。RECORDS_USED该记录已经存在的数目。