Oracle Database物理文件之控制文件
来源:互联网 发布:电动汽车专用单片机 编辑:程序博客网 时间:2024/06/13 08:50
一 控制文件简介
控制文件是一个很小的二进制文件(最多能增长到64MB左右),用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据库的物理结构改变的时候,Oracle会更新控制文件。用户不能编辑控制文件,控制文件的修改由Oracle完成。
数据库的启动和正常运行都离不开控制文件。启动数据库时,Oracle从初始化参数文件中获得控制文件的名字及位置,打开控制文件,然后从控制文件中读取数据文件和联机日志文件的信息,最后打开数据库。数据库运行时,Oracle会修改控制文件,所以,一旦控制文件损坏,数据库将不能正常运行。
控制文件的主要内容包括:
数据库名称(Database Name)
创建数据库的时间戳
数据文件的名字及位置
联机日志文件的名字及位置
表空间信息
日志历史记录(Log History)
归档日志的信息
备份信息
当前的日志序列号(Log Sequence Number)
检查点信息(Checkpoint)
控制文件的大小由下面的几个参数决定:
MAXLOGFILES
MAXLOGMEMBERS
MAXLOGHISTORY
MAXDATAFILES
MAXINSTANCES
当增加、重命名、删除一个数据文件或者一个联机日志文件时,Oracle服务器进程(Server Process)会立即更新控制文件以反映数据库结构的这种变化。所以,Oracle总是告诫我们,在数据库的结构发生变化后,要备份控制文件。日志写进程LGWR负责把当前日志序列号记录到控制文件中。校验点进程CKPT负责把校验点的信息记录到控制文件中。归档进程负责把归档日志的信息记录到控制文件中。
初始化参数CONTROL_FILES的值记录控制文件的位置。通常,DBA应该镜像控制文件,把每个控制文件分布到不同的物理磁盘,发生灾难时,即使其中一个控制文件损坏,数据不会丢失,也不会使整个数据库陷于瘫痪。
二 查看控制文件的相关信息
1.通过系统参数查看控制文件的相关信息
SQL> show parameter control_fNAME TYPE VALUE------------------------------------ -------------- -----------------------------------------------------------control_file_record_keep_time integer 7control_files string /u01/app/oracle/oradata/orcl/c ontrol01.ctl, /u01/app/oracle/ flash_recovery_area/orcl/control02.ctl
参数control_file_record_keep_time表示控制文件里可重复使用的记录所能保存的最小天数。如果新增加一条记录 到控制文件可以重复使用的部分,这时最老的记录尚没有超出最小保留天数,那么记录将控制文件的这一部分将扩展。如果将该参数设置为0,那么控制文件可以重复使用的部分将永远不会扩展。注意,这个参数只应用于控制文件中可循环利用的部分,如归档日志文件,各种备份记录。不应用于诸如数据文件,表空间,重做线程等,这些内容只有当其从对应的表空间中删除后才能重用。
参数control_files记录了当点数据库中控制文件的名字及文件路径信息。
2.通过动态视图查看控制文件的相关信息
V$CONTROLFILE --列出数据库中所有控制文件的名字及状态信息
V$CONTROLFILE_RECORD_SECTION --列出控制文件中记录的部分信息
V$PARAMETER --列出所有参数的位置及状态信息
sys@orcl > SELECT * FROM v$controlfile;
sys@orcl>SELECT * FROMv$controlfile_record_section;
sys@orcl>SELECT name, type, value FROMv$parameter WHERE name LIKE 'control_f%';
3.通过操作系统命令查看控制文件的具体内容
[oracle@db ~]$ strings$ORACLE_BASE/oradata/orcl/control01.ctl | more
4.查看控制文件当前的版本号
sys@orcl>SELECT controlfile_sequence#FROM v$database;
三 控制文件的管理
一个数据库可以包含多个控制文件,它们的文件内容是一致的。如果多个数据文件不一致,则数据库启动时会报错。控制文件应该通过硬件实现多路复用。控制文件的个数和位置可通过spfile或pfile进行修改。
1.通过spfile尽心修改的步骤如下:
(1)修改spfile中的参数control_files,alter systemset control_files=’file_path/control01.ctl’, ’file_path/control02.ctl’scope=spfile
(2)一致性关闭数据库
(3)使用操作系统命名增加或删除数据文件(cp/mv/rm)
(4)使用spfile启动数据库
(5)查看数据库是否正常启动
2.通过pfile进行修改的补助如下:
(1)通过操作系统命令(如vi)修改pfile中的参数*.control_files=’file_path/control01.ctl’,’file_path/control02.ctl’
(2)一致性关闭数据库
(3)使用操作系统命名增加或删除数据文件(cp/mv/rm)
(4)使用pfile启动数据库
(5)查看数据库是否正常启动
四 控制文件的备份
控制文件可以通过热备份或者RMAN备份的方式进行备份。
1.热备份
alter database backup controlfile to ‘<file>’; --热备控制文件
alter database backup controlfile to trace as ‘<file>’; --备份控制文件的建立脚本
例如:
-- 备份控制文件到文件系统,用于归档模式下的控制文件恢复sys@orcl>alter database backup controlfile to '$ORACLE_BASE/backup/control.bak.ctl';-- 备份控制文件的创建语句到文件系统sys@orcl>alter database backup controlfile to trace as '$ORACLE_BASE/backup/control.sql';
2.RMAN备份控制文件
backup current controlfile; --备份当前的控制文件
backup database include current controlfile; --备份当前数据库及控制文件
configure controlfile autobackup on; --设置自动备份控制文件
例如:
-- 启动RMAN[oracle@db ~]$ rmanRecovery Manager: Release 11.2.0.1.0 - Production on Sun Feb 23 09:41:52 2014Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.-- 连接到目标数据库RMAN> connect target /;connected to target database: ORCL (DBID=1364371964)-- 备份控制文件RMAN> backup current controlfile;Starting backup at 23-FEB-14using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=21 device type=DISKchannel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setincluding current control file in backup setchannel ORA_DISK_1: starting piece 1 at 23-FEB-14channel ORA_DISK_1: finished piece 1 at 23-FEB-14piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2014_02_23/o1_mf_ncnnf_TAG20140223T094340_9jlnlfnn_.bkp tag=TAG20140223T094340 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 23-FEB-14-- 备份数据库及控制文件,数据库需要处于archivelog模式下RMAN> backup database include current controlfile;Starting backup at 23-FEB-14using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=142 device type=DISKchannel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbfinput datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbfinput datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbfinput datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbfinput datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbfchannel ORA_DISK_1: starting piece 1 at 23-FEB-14channel ORA_DISK_1: finished piece 1 at 23-FEB-14piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2014_02_23/o1_mf_nnndf_TAG20140223T095613_9jlo9y7y_.bkp tag=TAG20140223T095613 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:01:45channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setincluding current control file in backup setincluding current SPFILE in backup setchannel ORA_DISK_1: starting piece 1 at 23-FEB-14channel ORA_DISK_1: finished piece 1 at 23-FEB-14piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2014_02_23/o1_mf_ncsnf_TAG20140223T095613_9jlof8l7_.bkp tag=TAG20140223T095613 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 23-FEB-14-- 查看当前的RMAN 参数设定RMAN> show all;RMAN configuration parameters for database with db_unique_name ORCL are:CONFIGURE RETENTION POLICY TO REDUNDANCY 1;CONFIGURE BACKUP OPTIMIZATION OFF;CONFIGURE DEFAULT DEVICE TYPE TO DISK;CONFIGURE CONTROLFILE AUTOBACKUP OFF; -- 默认自动备份控制文件为关闭状态CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F';CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;CONFIGURE MAXSETSIZE TO UNLIMITED;CONFIGURE ENCRYPTION FOR DATABASE OFF;CONFIGURE ENCRYPTION ALGORITHM 'AES128';CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.20.1/db_1/dbs/snapcf_orcl.f';-- 设置开启RMAN自动备份控制文件RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;old RMAN configuration parameters:CONFIGURE CONTROLFILE AUTOBACKUP OFF;new RMAN configuration parameters:CONFIGURE CONTROLFILE AUTOBACKUP ON;new RMAN configuration parameters are successfully stored
五 控制文件的缺失恢复
1.丢失多个控制文件中的一个或多个
缺失多个控制文件中的一个或多个,数据库启动时会报ORA-00205错误,导致数据库无法启动,如下:
idle>startupORACLE instance started.Total System Global Area 1050411008 bytesFixed Size 1341168 bytesVariable Size 641730832 bytesDatabase Buffers 402653184 bytesRedo Buffers 4685824 bytesORA-00205: error in identifying control file, check alert log for more info-- 查看警告日志的位置,一般在数据库参数background_dump_dest指定的目录下idle>show parameter dumpNAME TYPE VALUE------------------------------------ ----------- ------------------------------background_core_dump string partialbackground_dump_dest string /u01/app/oracle/diag/rdbms/orcl/orcl/tracecore_dump_dest string /u01/app/oracle/diag/rdbms/orc l/orcl/cdumpmax_dump_file_size string unlimitedshadow_core_dump string partialuser_dump_dest string /u01/app/oracle/diag/rdbms/orc l/orcl/trace-- 查看警告日志中的错误信息,找不到控制文件[oracle@db trace]$ tail -f alert_orcl.logSun Feb 23 10:08:13 2014ALTER DATABASE MOUNTORA-00210: cannot open the specified control fileORA-00202: control file: '/u01/app/oracle/flash_recovery_area/orcl/control02.ctl'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-205 signalled during: ALTER DATABASE MOUNT...Sun Feb 23 10:08:14 2014Checker run found 1 new persistent data failures
出现这种情况时,有两种简单的修复办法:
(1)拷贝存在的控制文件到丢失的控制文件,例如
-- 拷贝当前存在的控制文件到丢失的控制文件idle>host cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/flash_recovery_area/orcl/control02.ctl-- 挂载数据库idle>alter database mount;Database altered.-- 启动数据库idle>alter database open;Database altered.
(2)修改spfile中的参数control_files的值,去除丢失的参数文件的路径,例如:
idle>alter system set control_files = '/u01/app/oracle/oradata/orcl/control01.ctl' scope = spfile;idle>startup forceORACLE instance started.Total System Global Area 1050411008 bytesFixed Size 1341168 bytesVariable Size 641730832 bytesDatabase Buffers 402653184 bytesRedo Buffers 4685824 bytesDatabase mounted.Database opened.
2.控制文件的版本号不同
当数据中存在多个版本不同的控制文件时,数据库会报ORA-00214错误,可以通过用版本号高的控制文件覆盖版本号低的控制文件使问题得到解决,例如:
idle>startupORACLE instance started.Total System Global Area 1050411008 bytesFixed Size 1341168 bytesVariable Size 641730832 bytesDatabase Buffers 402653184 bytesRedo Buffers 4685824 bytesORA-00214: control file '/u01/app/oracle/oradata/orcl/control01.ctl' version 1173 inconsistent withfile '/u01/app/oracle/flash_recovery_area/orcl/control02.ctl' version 1169-- 用版本高的控制文件覆盖版本低的控制文件idle>ho cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/flash_recovery_area/orcl/control02.ctlidle>alter database mount;Database altered.idle>alter database open;Database altered.
3.丢失全部控制文件
(1)重建控制文件恢复数据文件
重建控制文件需要搞清楚如下问题:控制文件的参数设定,日志文件的大小和位置,数据文件的位置,数据库的字符编码集。搞清楚这些问题之后,可以通过重建控制文件语句创建控制文件。例如:
-- 缺失控制文件,启动数据库报ORA-00205错误,数据库处于nomount阶段idle>startupORACLE instance started.Total System Global Area 1050411008 bytesFixed Size 1341168 bytesVariable Size 641730832 bytesDatabase Buffers 402653184 bytesRedo Buffers 4685824 bytesORA-00205: error in identifying control file, check alert log for more info-- 查询控制文件的位置idle>show parameter control_filesNAME TYPE VALUE-------------------------- ----------- -----------------------------------------------------------------------------------------------------------control_files string /u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/flash_recovery_area/orcl/control02.ctl-- 验证控制文件是否存在idle>ho ls /u01/app/oracle/oradata/orcl/control01.ctlls: 无法访问/u01/app/oracle/oradata/orcl/control01.ctl: 没有那个文件或目录idle>ho ls /u01/app/oracle/flash_recovery_area/orcl/control02.ctlls: 无法访问/u01/app/oracle/flash_recovery_area/orcl/control02.ctl: 没有那个文件或目录-- 文件不存在,创建控制文件idle>CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292LOGFILE GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M BLOCKSIZE 512DATAFILE '/u01/app/oracle/oradata/orcl/system01.dbf', '/u01/app/oracle/oradata/orcl/sysaux01.dbf', '/u01/app/oracle/oradata/orcl/undotbs01.dbf', '/u01/app/oracle/oradata/orcl/users01.dbf', '/u01/app/oracle/oradata/orcl/example01.dbf'CHARACTER SET AL32UTF8;Control file created.-- 创建数据文件后,数据库自动进入到mount阶段,此时启动数据库会报错idle>alter database open;alter database open*ERROR at line 1:ORA-01113: file 1 needs media recoveryORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'-- 先恢复数据库idle>RECOVER DATABASE;Media recovery complete.-- 然后将数据库调整到open阶段idle>ALTER DATABASE OPEN;Database altered.-- 为临时表空间添加数据文件sys@orcl>ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
(2)利用备份的控制文件恢复
如果数据库有备份的控制文件,控制文件丢失前数据库处于归档模式下,且在线重做日志文件可用,则可通过以下方式恢复数据库:
-- 拷贝备份的控制文件到丢失的控制文件的位置并重命名idle>host cp /u01/app/oracle/backup/control.bak.ctl/u01/app/oracle/oradata/orcl/control01.ctlidle>host cp /u01/app/oracle/backup/control.bak.ctl/u01/app/oracle/flash_recovery_area/orcl/control02.ctl-- 挂载数据库idle>alter database mount;Database altered.-- 打开数据库idle>alter database open;alter database open*ERROR at line 1:ORA-01589: must use RESETLOGS or NORESETLOGS option for databaseopenidle>ALTER DATABASE OPEN NORESETLOGS;ALTER DATABASE OPEN NORESETLOGS*ERROR at line 1:ORA-01610: recovery using the BACKUP CONTROLFILE option must be done-- 使用备份的控制文件恢复数据库idle>RECOVER DATABASE USING BACKUPCONTROLFILEORA-00279: change 1073537 generated at 02/24/2014 21:19:19 neededfor thread 1ORA-00289: suggestion :/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2014_02_24/o1_mf_1_10_%u_.arcORA-00280: change 1073537 for thread 1 is in sequence #10-- 手动输入redo日志的文字,依次试验每个日志组Specify log: {<RET>=suggested | filename | AUTO | CANCEL}/u01/app/oracle/oradata/orcl/redo01.logLog applied.-- 数据库恢复完成Media recovery complete.-- 打开数据库,重置联机重做日志idle>ALTER DATABASE OPEN RESETLOGS;Database altered.
(3)利用隐藏参数打开数据库
如果有备份的控制文件,但是在线重做日志文件丢失,则可利用隐藏参数_allow_resetlogs_corruption取消一致性验证打开数据库,此时可能会丢失数据。
-- 设置隐藏参数,关闭一致性验证idle>alter system set "_allow_resetlogs_corruption" = true scope = spfile;System altered.-- 打开数据库,重置联机重做日志idle>ALTER DATABASE OPEN RESETLOGS;Database altered.-- 重置隐藏参数idle>alter system reset "_allow_resetlogs_corruption";System altered.
- Oracle Database物理文件之控制文件
- oracle物理体系结构--控制文件
- Database 物理文件
- oracle之物理数据库结构概述(数据文件、重做日志文件,控制文件等各种数据库文件)
- 转:Oracle物理文件
- Pro Oracle Database 11g Administration 学习笔记之第五章(管理控制文件和联机日志文件)
- Oracle 控制文件 之 内容
- 【翻译自mos文章】重新创建物理standby database 的 控制文件的方法
- oracle基本文件之控制文件
- database连接oracle映射文件
- Oracle学习笔记之三 控制文件
- oracle备份之rman_恢复控制文件
- oracle学习之:利用trace文件重建控制文件
- oracle之 利用 controlfile trace文件重建控制文件
- oracle学习笔记(3)——物理存储结构——控制文件
- 管理oracle控制文件
- 移动Oracle控制文件
- 恢复oracle控制文件
- 在csdn上的第一篇博客
- Android各版本系统源代码下载
- 【android学习】imageview通过getDrawingCache获取图像
- android 插件式开发,你知道多少?
- php的单例模式
- Oracle Database物理文件之控制文件
- iOS开发——多线程、NSThread、gcd、线程间通信
- 基础练习 数列特征
- 《UNIX环境高级编程》笔记--系统标识
- 工作日志
- Android的Handler总结
- java学习第5天
- Linux下python升级
- HDU 3874 树状数组 边查询边更新