控制文件的内容
控制文件是数据库中最小而又最重要的文件,是一个二进制文件,含有数据库的结构信息,包括数据文件和日志文件的信息。可以将控制文件理解为物理数据库的一个元数据存库。控制文件在数据库创建时被自动创建,并在数据库发生物理变化时更新。控制文件不断更新,并且在任何时候都要保证控制文件是可用的。只有Oracel进程才能更新控制文件的内容,所以,任何时候都不要试图编辑控制文件。
控制文件主要包括的内容有:数据库名称;数据库建立时的邮戳;数据文件的名称、位置及联机/脱机;重做日志文件的名称、位置;重做日志归档信息;表空间名称;当前日志序列号LSN,他是一个在联机重做日志文件被切换时得到的递增和记录的唯一性标识;最新的检查点信息;恢复管理信息;撤销段的开始与结束。
控制文档更新
当想数据库添加数据文件或重新设置文件时,会有一个Oracle服务器进程立即将这些信息写入到控制文件中。所以,在任何结构性修改数据库后,都已更改对控制文件进行备份。日志写入器进程LGWR会用当前的日志序列号更新控制文件。检查点进程CKPT会用最近的检查点信息更新控制文件。如果数据库运行在归档模式下ARCHIVELOG,则存档进程会更新控制文件中的归档日志名称和日志序列号等信息。
控制文件的多路复用
控制文件对于数据库的运行至关重要,Oracle建议应用拥有控制文件的至少三个副本。通过使用Oracle的多路复用特性,将控制文件副本创建到不同的磁盘控制器上,这样,即使某个磁盘发生介质故障,Oracle仍然能够迅速被恢复。通过复制控制文件到多个位置并修改初始化参数文件init.ora中的CONTROL_FILES参数,使之包含所有控制文件的名称,就启用了控制文件的多路复用特性:
CONTROL_FILES=('/ora01/oradata/orc1ctrlORCL01.ctl','/ora02/oradata/orc1ctrlORCL02.ctl','/ora03/oradata/orc1ctrlORCL03.ctl')
需要注意的是,当多路复用控制文件时,Oracle会同时更新所有的控制文件,但是仅对CONTROL_FILES中所列举的第一个控制文件进行读取操作。
使用二进制SPFILE进行多路复用类似于使用init.ora参数文件进行多路复用,主要区别是修改CONTROL_FILES参数的方法,可按照如下步骤:
--修改SPFILE-- SQL>ALTER SYSTEM SET CONTROL_FILES='/ora01/oradata/orc1ctrlORCL01.ctl','/ora02/oradata/orc1ctrlORCL02.ctl','/ora03/oradata/orc1ctrlORCL03.ctl' SCOPE=SPFILE; --关闭数据库-- SQL>SHUTDOWN IMMEDIATE; --使用操作系统命令将文件复制到新的位置-- $cp /ora01/oradata/orc1ctrlORCL01.ctl /ora03/oradata/orc1ctrlORCL03.ctl --重新启动实例-- SQL>STARTUP
要添加更多控制文件副本的步骤如下:关闭数据库;使用操作系统命令将控制文件复制到其他位置;修改init.ora参数文件,在CONTROL_FILES中添加副本的路径和名称;重启实例。
查询控制文件信息
可以从V$CONTROLFILE视图中查看控制文件的信息,包括控制文件名称和状态:
SQL> set linesize 120; SQL> col name for a60; SQL> select * from v$controlfile;
页可以从V$PARAMETER视图中查找控制文件的路径
SQL> col name for a30 SQL> col name for a501; SQL> set linesize 100 SQL> select * from v$controlfile; SQL> select name,value from v$parameter where nam='control_files';
控制文件的创建步骤
控制文件除了包含数据文件、日志文件信息外,还包含一些与实例密切相关的参数,如MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY,MAXDATAFILES,MAXINSTANCES等,如果在创建实例时,这些参数大小不合理,则可能会导致实例不可用,比如MAXDATAFILES标识实例中所有数据文件的总数,如果目前所创建的数据文件已经达到这个峰值,则不能再创建新的数据文件,这时,可以通过创建控制文件实现这些参数的修改。
准备工作:控制文件必须包括数据文件和日志文件的路径和文件名,所以,必须先查询数据文件(查看DBA_DATA_FILES数据字典)和日志文件(差V$LOGFILE数据字典)的详细信息
SELECT MEMBER FROM V$LOGFILE; SELECT NAME FROM V$DATAFILE; SELECT VALUE FROM V$PARAMETER WHERE NAME='control_files'
关闭数据库:
SQL>connect as sysdba; SQL>SHUTDOWN IMMEDIATE;
备份所有数据文件和重做日志文件:当数据库发生变化时,一般都要进行备份,建议采用操作系统的冷备份对所有数据文件,日志文件及控制文件进行备份
用NOMOUNT选项启动数据库: SQL> STARTUP NOMOUNT,在使用MOUNT启动数据库时,Oracle需要打开控制文件,但是不打开数据文件和日志文件
用CREATE CONTROLFILE建立控制文件:只有得到数据文件和日志文件的路径和文件名之后,才能用下面的命令来创建控制文件:
CREATE CONTROLFILE REUSE DATABASE "demo" NORESETLOGS NOARCHIVELOG MAXLOFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 32 MAXINSTANCE 1 MAXLOGHISTORY 449 LOGFILE GROUP 1'/path/Oracle/dbs/t_log1.f' SIZE 500K, GROUP2 '/path/Oracle/dbs/t_log2.f' SIZE 500K # STANDBY LOGFILE DATAFILE '/path/Oracle/dbs/t_db1.f', '/path/Oracle/dbs/dbu19i.dbf' ... CHARACTER SET WE/DEC
以脱机方式将新的控制文件复制到设备中
修改服务参数文件路径SPFILE:
SQL> ALTER SYSTEM SET control_files='C:\ORACLE\PRODUCTION\10.2.0\DB11g\CONTROL01.CTL','C:\ORACLE\PRODUCTION\10.2.0\DB11g\CONTROL02.CTL','C:\ORACLE\PRODUCTION\10.2.0\DB11g\CONTROL03.CTL'SCOPE=SPFILE;
如果丢失联机或者归档日志及数据文件,则恢复数据库,否则使用ALTER DATABASE OPEN命令打开数据库,ALTER DATABASE OPEN RESETLOGS;
关闭数据库并备份数据库。张孝祥java视频教程
维护控制文件
备份控制文件:
--将控制文件备份到二进制文件,即对控制文件进行复制-- ALTER DATABASE BACKUP CONTROLFILE TO '/Oracle/backup/control.bkp';
--先查看当前实例控制文件路径,然后将控制文件备份为sql脚本-- show parameter user_dump_dest ALTER DATABASE BACKUP CONTROLFILE TO TRACE
恢复控制文件:当参数CONTROL_FILES锁定的控制文件有一个已经损坏,但在数据字典中还能访问到控制问剑,则可采用下面的方法进行恢复。关闭数据库实例;用操作系统将好的控制文件覆盖掉坏的控制文件;重新启动数据库。
移动控制文件:由于性能与安全的原因,有时需要将某些控制文件从一个磁盘路径移动到另一个磁盘路径,建议按照下面的步骤。改变服务器参数文件SPFILE中的CONTROL_FILES参数
ALTER SYSTEM SET control_files='$HOME/ORADATA/u01/ctr101.ctl','$HOME/ORADATA/u02/ctr10.2.ctl' SCOPE=SPFILE;
关闭数据库,shutdown immediate;建立附加的控制文件 Cp $HOME/ORADATA/u01/ctr101.ctl $HOME/ORADATA/u02/ctrl102.ctl;
启动数据库STARTUP OPEN
给控制文件路径流出足够空间:控制文件除了存放数据库信息、数据文件和重做日志文件信息外,还存储了大量与管理相关的信息。比如,在Oracle 11g上配置了Recovery Mnager(RMAN)并使用RMAN时,控制文件会自动春初与备份相关的历史信息。Oracle 11g的控制文件会随着时间的推移不断增长。因此,在配置控制文件磁盘路径时,要确保操作系统有足够的磁盘空间供控制文件的增长使用,为了对控制文件的扩展进行限制,Oracle系统提供参数:CONTROL_FILE_RECORD_KEEP_TIME,其含义是控制文件在记录RMAN的历史信息时报刘的天数,当超过此天数时即覆盖掉原来记录的信息。该参数的默认值是7天。