控制文件用于记录和维护数据库的物理结构,当启动例程并打开数据库时,oracle会根据初始化参数control files在例程和数据库之间建立关联.装载数据库(MOUNT状态)时,ORACLE会安装初始化参数control_files定位并打开控制文件和重做日志.
控制文件时oracle数据库最重要的物理文件.控制文件不仅记载了数据库的物理结构(数据文件的名称和位置,重做日志的名称和位置).装载和打开数据库时也需要这些文件,而且它们还记载了日志序列好,检查点和日志历史信息.同步和恢复数据库时需要这些信息.
控制文件主要记载了以下信息
数据库名称
数据文件名称和位置
重做日志名称和位置
表空间名称
当前日志序列好
检查点信息
日志历史信息
RMAN信息
控制文件主要是由永久参数和RMAN信息组成.
永久参数包括
MAXINSTANCES:用于指定可以同时访问数据库的最大例程个数
MAXDATAFILES:用于指定oracle数据库的最大数据文件个数
MAXLOGFILES:用于指定oracle数据库的最大日志组个数
MAXLOGMEMBERS:用于指定每个日志组的最大日志成员个数.
MAXLOGHISTORY:用于指定控制文件可记载日志历史的最大个数.
使用RMAN执行备份操作时,RMAN备份信息会被记载到控制文件中.初始化参数control_file_record_keep_time指定了RMAN备份信息在控制文件中的保留时间,默认值为7.
多元化控制文件
使用PFILE多元化控制文件
如果在启动例程时使用了pfile,在多元化控制文件时需要手工编辑文本参数文件,并修改初始化参数control_files.具体步骤如下:
1,手工修改初始化参数control_files
Control_files=d:democontrol01.ctl,e:democontrol02.ctl
此时e:democontrol02.ctl文件还不存在.
2,关闭数据库,
3,复制控制文件
4,启动数据库.
因为例程使用PFILE,所以启动时应该指定PFILE全名
STARTUP PFILE=%oracle_home%databaseinitdemo.ora
使用spfile多元化控制文件
如果启动例程使用spfile,在多元化控制文件时需要执行ALTER SYSTEM命令修改初始化参数control_files
1,修改初始化参数
C:sqlplus sys/oracle@demo as sysdba
Sql>ALTER SYSTEM SET control_files=
2‘d:democontrol01.ctl’,’e:democontrol02.ctl’
3SCOPE=SPFILE;
此时e:democontrol02.ctl还不存在.
2,关闭数据库,
3,复制控制文件
4,启动数据库.
处理意外丢失的控制文件
多元化控制文件以后,如果某个控制文件丢失或损坏,数据库将无法装载,在启动例程并装载数据库时,会报告如下错误;
ORA-00205:error in identifying controlfile,check alert log for more info
出现如上错误时,应修改初始化参数control_files,去掉损坏或丢失的控制文件,然后重新启动数据库.
重建控制文件.
以建立demo数据库的控制文件为例,说明重新建立控制文件的方法
1,修改初始化参数CONTROL_FILES,改变控制文件的位置.
如果控制文件所在的磁盘出现损坏,那么必须使用ALTER SYSTEM命令改变控制文件的存放位置.当例程处于NOMOUNT状态时,执行以下命令可以改变控制文件位置.
Alter system set control_files=’c:democontrol01.ctl’,’d:democontrol02.ctl’ scope=spfile;
2,关闭例程
3.启动例程(startup nomunt)
建立控制文件时,要求例程必须处于NOMOUNT状态.正确地设置了初始化参数CONTROL_FILES后,玉女国国重新启动例程,并应检查初始化参数CONTROL_FILES的设置是否正确.
Startup nomount
Select value FROM v$parameter where name=’control_files’;
4,建立控制文件.
CREATE CONTROLFILE DATABASE demo NORESETLOGS
LOGFILE
GROUP 1 ‘D:DEMOREDO01.LOG’ SIZE 10M,
GROUP 2 ‘D:DEMOREDO02.LOG’ SIZE 10M
DATAFILE
‘D:DEMOSYSTEM01.DBF’,
‘D:DEMOUNDOTBS01.DBF’,
‘D:DEMOSYSAUX01.DBF’
CHARACTER SET ZHS16GBK;
其中,DATABASE用于指定数据库名,该名称必须和初始化参数db_name完全一致;
NORESETLOGS用于指定仍然使用原有重做日志,如果不希望使用原有重做日志,可以指定RESETLOGS选项;
LOGFILE用于指定数据库原有重做日志大组号,尺寸已经对应的日志成员;
DATAFILE用于指定数据库原有的数据文件
CHAARACETR SET用于指定数据库字符集.
5,打开数据库
Alter database open;
如果建立控制文件时指定了RESETLOGS选项,那么在打开数据库时必须带有该选项(格式为ALTER DATABASE OPEN RESETLOGS).
6,增加临时文件.
打开数据库后,客户应用可以执行各种数据库访问操作,如果执行排序操作,可能会显示错误信息.为了顺利执行排序操作,必须重新建立临时文件.
Alter tablespace temp add tempfile ‘d:demotemp.dbf’ size 10485760
Reuse autoextend off;
修改永久参数
当某个DBA执行CREATE DATABASE ADD LOGFILE MEMBER为某日志组增加日志成员时,oracle显示如下错误信息:
ALTER DATABASE ADD LOGFILE MEMBER
*
ERROR at line 1:
ORA-00357:too many members specified for log file,the maximum is 2
出现如上错误时,表示日志组成员个数超出了永久参数MAXLOGMEMBERS的设置.
在这种情况下,为了给日志组增加多个日志成员,必须修改永久参数MAXLOGMEMBERS.
然后才可以增加多个日志成员.下面以限制DEMO数据库最多10个日志组,每个日志组最多4个日志成员为例,说明修改永久参数的方法.
1,启动例程STARTUP NOMOUNT
2,建立控制文件.
建立控制文件时必须提供正确的数据文件和重做日志清单.因为原有控制文件仍然存在,所有必须指定REUSE选项覆盖控制文件.
CREATE CONTROLFILE REUSE DATABASE “DEMO” NORESETLOGS
MAXLOGFILES 10
MAXLOGMEMBERS 4
LOGFILE
GROUP 1 ‘D:DEMOREDO01.LOG’ SIZE 10M,
GROUP 2 ‘D:DEMOREDO02.LOG’ SIZE 10M
DATAFILE
‘D:DEMOSYSTEM01.DBF’,
‘D:DEMOUNDOTBS01.DBF’,
‘D:DEMOSYSAUX01.DBF’
CHARACTER SET ZHS16GBK;
3.打开数据库
Alter database open;
如果建立控制文件时指定了RESETLOGS选项,那么在打开数据库时必须带有该选项(格式为ALTER DATABASE OPEN RESETLOGS).
4增加临时文件.
打开数据库后,客户应用可以执行各种数据库访问操作,如果执行排序操作,可能会显示错误信息.为了顺利执行排序操作,必须重新建立临时文件.
Alter tablespace temp add tempfile ‘d:demotemp.dbf’ size 10485760
Reuse autoextend off;
修改数据库名称
使用CREATE CONTROLFILE命令冲击建立控制文件.
使用工具DBNEWID改变数据库名.
下面以DEMO数据库名称修改为EXAMPLE为例,说明通过建立控制文件修改数据库名称的方法.
1,初始化参数DB_NAME
因为oracle数据库名称是通过初始化参数db_name来标识的,所有在建立控制文件之前,必须正确的设置该参数.需要注意,因为初始化参数DB_NAME不能使用ALTER SYSTEM命令进行修改,所以必须建立PFILE,然后修改参数DB_NAME.最后使用该PFILE重新建立SPFILE
建立PFILE文件:SQL>CREATE PFILE FROM SPFILE;
编辑PFILE文件initdemo.ora,修改参数DB_NAME:db_name=example
建立临时的SPFILE文件.
因为当前例程使用的SPFILE文件不能覆盖,所有执行CREATE SPFILE是应该指定一个临时的SPFILE文件.示例如下:
CREATE SPFILE=’ORACLE_HOME%databasespfiletemp.ora’ from
PFILE=’%ORACLE_HOME%databaseinitdemo.ora’;
2,关闭oracle数据库.
关闭oracle数据库后,为了使用新的spfile文件,应该使用OS命令删除原来的SPFILE文件,然后将临时spfile文件修改为spfiledemo.ora
3,启动例程.
建立控制文件必须在nomount状态下进行,所以必须启动例程.启动例程后还应该初始化参数DB_NAME设置是否正确
STARTUP NOMOUNT
SELECT value FROM v$parameter WHERE name=’db_name’;
4,建立控制文件.
因为要修改数据库名称,所有建立控制文件时必须指定SET DATABASE选项和RESETLOGS选项.因为原有控制文件仍然存在,所有必须指定REUSE选项覆盖控制文件
CREATE CONTROLFILE REUSE SET DATABASE “EXAMPLE” RESETLOGS
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 ‘D:DEMOREDO01.LOG’ SIZE 10M,
GROUP 2 ‘D:DEMOREDO02.LOG’ SIZE 10M
DATAFILE
‘D:DEMOSYSTEM01.DBF’,
‘D:DEMOUNDOTBS01.DBF’,
‘D:DEMOSYSAUX01.DBF’
CHARACTER SET ZHS16GBK;
5,打开数据库
Alter database open;
如果建立控制文件时指定了RESETLOGS选项,那么在打开数据库时必须带有该选项(格式为ALTER DATABASE OPEN RESETLOGS).
6,增加临时文件.
打开数据库后,客户应用可以执行各种数据库访问操作,如果执行排序操作,可能会显示错误信息.为了顺利执行排序操作,必须重新建立临时文件.
Alter tablespace temp add tempfile ‘d:demotemp.dbf’ size 10485760
Reuse autoextend off;
删除控制文件
使用ALTER SYSTEM命令修改初始化参数
Alter system set control_files=’d:democontrol01.ctl’ scope=spfile;然后重新启动数据库
查看控制文件的信息
1,显示控制文件名称.
Select * from v$controlfile;
2,显示初始化参数control_files
Select value from v$parameter where name=’control_files’;
3,获得控制文件不同部分的信息.
Col type format a20
Select type,record_size,records_total,records_used from v$controlfile_record_section;
其中,type用于标识特定记录类型,record_size用于标识每条记录所占用的字节数,
RECORDS_TOTAL用于标识记录的最大条数,RECORDS_USED用于标识已占用记录条数.