宁愿做一朵篱下的野花,不愿做一朵受恩惠的蔷薇。与其逢迎献媚,偷取别人的欢心,毋宁被众人所鄙弃!---------《莎士比亚》
今朝有心,他朝有路,今日有情,明日有邻!掌握大脑,赢取人生。Oracle控制文件,管理数据库的状态及描述数据库的物理结构,是实现异步通信的重要手段之一,对保证Oracle实例的正常工作具有重要的作用。
一、oracle控制文件内容
控制文件至少包含以下信息:
-
数据库名
-
数据库标识符(DBID)
-
数据库创建时间戳
-
数据库字符集
-
数据文件信息
-
临时文件信息
-
在线重做日志信息
-
近期的归档日志信息
-
表空间信息
-
RMAN备份文件信息
-
检查点信息
-
损坏的数据块注册表
-
还原点信息
-
重设日志SCN
-
脏数据块的数量
二、转储控制文件内容
控制文件是一个二进制文件,为了查看其内容,我们可以通过oracle命令转储出来进行查看(以下命令来自oracle 11g):
SQL> alter session set events 'immediate trace name controlf level 8';
Session altered.
SQL> select value from v$diag_info where name='Default Trace File';
VALUE
---------------------------
/oracle/app/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_ora_8575.trc
也可以如下命令进行:
SQL> oradebug setmypid
Statement processed.
SQL> alter session set events 'immediate trace name controlf level 8';
Session altered.
SQL> oradebug tracefile_name;
/oracle/app/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_ora_7340.trc
SQL>
打开跟踪日志文件,查看转储内容:
2.1,查看到数据库ID、名称等内容
2.2,数据库条目的详细信息
其中包括数据库文件及日志文件数量、检查点等信息:
2.3,检查点计数条目
2.4,补充数据库条目
2.5,redo进程条目
2.6,redo文件条目
2.7,数据文件条目
2.8,其他
由于内容太多,有兴趣的朋友可以自己转储控制文件进行查看,转储内容后续还有临时文件条目、表空间条目、rman配置条目、闪回日志文件条目、进程实例映射条目等多个记录信息。
三、控制文件操作
3.1,视图信息
有3种途径查看控制文件信息:
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/oracle/app/data/ORCL/control01.ctl
/oracle/app/oracle/flash_recovery_area/ORCL/control02.ctl
SQL>
SQL> show parameter control_file;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /oracle/app/data/ORCL/control0
1.ctl, /oracle/app/oracle/flas
h_recovery_area/ORCL/control02
.ctl
SQL>
SQL> select name,value from v$parameter where name='control_files';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
control_files
/oracle/app/data/ORCL/control01.ctl, /oracle/app/oracle/flash_recovery_area/ORCL
/control02.ctl
SQL>
3.2,控制文件记录内容
3.3,普通查看控制文件内容
a,通过strings查看
[oracle@oracle11g ORCL]$ strings control01.ctl | more
}|{z
QORCL
TAG20150521T193139
~"fn
x44x
u4ORCL
u4ORCL
ORCL
ORCL
/oracle/app/data/ORCL/redo01.log
/oracle/app/data/ORCL/redo03.log
/oracle/app/data/ORCL/redo02.log
/oracle/app/data/ORCL/DT_TPC_DAT.DBF
/oracle/app/data/ORCL/users01.dbf
/oracle/app/data/ORCL/undotbs01.dbf
/oracle/app/data/ORCL/sysaux01.dbf
/oracle/app/data/ORCL/system01.dbf
/oracle/app/data/ORCL/temp01.dbf
/oracle/app/data/ORCL/DT_CAT_DAT.DBF
/oracle/app/data/ORCL/DT_TEST_DAT.DBF
/oracle/app/data/ORCL/redo01.log
/oracle/app/data/ORCL/redo03.log
/oracle/app/data/ORCL/redo02.log
/oracle/app/data/ORCL/DT_TPC_DAT.DBF
/oracle/app/data/ORCL/users01.dbf
/oracle/app/data/ORCL/undotbs01.dbf
/oracle/app/data/ORCL/sysaux01.dbf
/oracle/app/data/ORCL/system01.dbf
/oracle/app/data/ORCL/temp01.dbf
/oracle/app/data/ORCL/DT_CAT_DAT.DBF
/oracle/app/data/ORCL/DT_TEST_DAT.DBF
SYSTEM
SYSAUX
UNDOTBS1
USERS
DT_TPC_DAT
TEMP
DT_CAT_DAT
DT_TEST_DAT
DT_TEST_DAT
SYSTEM
SYSAUX
UNDOTBS1
USERS
DT_TPC_DAT
TEMP
DT_CAT_DAT
DT_TEST_DAT
DT_TEST_DAT
DEVICE TYPE
DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET
CONTROLFILE AUTOBACKUP
DEVICE TYPE
DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET
<v43x
^~4v
<v43x
^~4v
oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2015_05_19/o1_mf_1_131_boqzh8yg_.arc
oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2015_05_19/o1_mf_1_132_boqzh95f_.arc
b,备份出来查看
SQL> alter database backup controlfile to trace as '/oracle/app/control180116.ora';
Database altered.
SQL>
[oracle@oracle11g app]$ more control180116.ora
-- The following are current System-scope REDO Log Archival related
-- parameters and can be included in the database initialization file.
--
-- LOG_ARCHIVE_DEST=''
-- LOG_ARCHIVE_DUPLEX_DEST=''
--
-- LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
--
-- DB_UNIQUE_NAME="ORCL"
--
-- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'
-- LOG_ARCHIVE_MAX_PROCESSES=4
-- STANDBY_FILE_MANAGEMENT=MANUAL
-- STANDBY_ARCHIVE_DEST=?/dbs/arch
-- FAL_CLIENT=''
-- FAL_SERVER=''
--
-- LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'
-- LOG_ARCHIVE_DEST_1='MANDATORY NOREOPEN NODELAY'
-- LOG_ARCHIVE_DEST_1='ARCH NOAFFIRM EXPEDITE NOVERIFY SYNC'
-- LOG_ARCHIVE_DEST_1='NOREGISTER NOALTERNATE NODEPENDENCY'
-- LOG_ARCHIVE_DEST_1='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'
-- LOG_ARCHIVE_DEST_1='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'
-- LOG_ARCHIVE_DEST_STATE_1=ENABLE
--
-- Below are two sets of SQL statements, each of which creates a new
-- control file and uses it to open the database. The first set opens
-- the database with the NORESETLOGS option and should be used only if
-- the current versions of all online logs are available. The second
-- set opens the database with the RESETLOGS option and should be used
-- if online logs are unavailable.
-- The appropriate set of statements can be copied from the trace into
-- a script file, edited as necessary, and executed when there is a
-- need to re-create the control file.
--
-- Set #1. NORESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- Additional logs may be required for media recovery of offline
-- Use this only if the current versions of all online logs are
-- available.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 300
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oracle/app/data/ORCL/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/oracle/app/data/ORCL/redo02.log' SIZE 50M BLOCKSIZE 512,
3.4,控制文件个数修改
a,减少控制文件(spfile)
SQL>startup
SQL>alter system set control_files='/opt/oracle/data/orcl/control01.ctl';
SQL>shutdown immediate
SQL>startup
b,增加控制文件个数
SQL>alter system set control_files='/opt/oracle/data/orcl/control01.ctl','/opt/oracle/data/orcl/contorl02.ctl' scope=spfile
如果出现control file版本不一致的情况,那么把版本高的拷贝给版本低的
再执行:
SQL>alter database mount;
SQL>alter database open;
3.5,控制文件备份
alter database backup controlfile to '/opt/oracle/data/orcl/control2013.bak';(归档模式下才有用)
alter databae backup controlfile to trace as '';(任何模式下)
rman备份:
backup current controlfile;
backup database include current controlfile;
四,控制文件问题
4.1,控制文件丢失,尚存在部分控制文件
SQL> show parameter control_files;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /oracle/app/data/ORCL/control0
1.ctl, /oracle/app/oracle/flas
h_recovery_area/ORCL/control02
.ctl
SQL>
根据参数显示的控制文件个数,拷贝尚存在的控制文件到不存在的控制文件
4.2,控制文全部丢失
a,非归档模式下
先全备,然后建立新的控制文件即可
建立控制文件过程:
- (1),确认数据文件个数和路径
- (2),确认重做日志文件个数和路径
- (3),查看alert_sid.log日志信息,查看数据库信息(做过控制文件信息转出)
- (4),创建控制文件
SQL>create controlfile reuse database orcl noarchivelog noresetlogs
maxlogfiles 16
maxinstances 8
maxlogmembers 3
maxloghistory 1
datafile
'/u01/oracle/oradata/orcl/example01.dbf',
'/uo1/oracle/oradata/orcl/system01.dbf',
'/u01/oracle/oradata/orcl/sysaux01.dbf',
'u01/oracle/oradata/orcl/undotbs01.dbf'
logfile
group 1 '/u01/oracle/oradata/orcl/redo01.log' size 50M,
group 2 '/u01/oracle/oradata/orcl/redo02.log' size 50M,
group 3 '/u01/oracle/oradata/orcl/redo02.log' size 50M
character set ZHS16GBK
SQL>alter database open;
ERROR at line 1:
ORA-01113:file 1 needs media recovery
ORA-01110:data file 1: 'u01/oracle/oradata/orcl/system01.dbf'
SQL>recover database;
media recovery complete.
SQL>alter database open;
database altered
注意:如果数据库不能打开,只能通过加隐藏参数来进行数据库打开
重做控制文件,redo日志文件必须存在
建立脚本时,需加入noarchivelog,noresetlog
b,归档模式下,控制文件的恢复
SQL>alter database backup controlfile to '/u01/oracle/oradata/ctlbak.ctl';
控制文件丢失
恢复之前,先做一起全备
SQL> ho cp /u01/oracle/oradata/ctlbak.ctl /u01/oracle/oradata/orcl/control01.ctl
SQL> ho cp /u01/oracle/oradata/ctlbak.ctl /u01/oracle/oradata/orcl/control02.ctl
SQL> ho cp /u01/oracle/oradata/ctlbak.ctl /u01/oracle/oradata/orcl/control03.ctl
SQL>alter database mount;
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL>alter database recover database using backup controlfile;
ORA-00279:change 1071696 generated at 09/10/2009 10:09:55 needed for thread 1
ORA-00289:suggestion: ..............
ORA-00280:change 1071696 for thread 1 is in sequence
SQL>alter database recover database using backup controlfile until change 1071696
ORA-00279:change 1071696 generated at 09/10/2009 10:09:55 needed for thread 1
ORA-00289:suggestion: ..............
ORA-00280:change 1071696 for thread 1 is in sequence
不存在备份,数据库不一致,存在问题
SQL>alter database open resetlogs;
加入隐藏参数进行问题的解决
SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;
SQL>startup force
SQL>alter database open resetlogs;
如果存在备份
SQL>alter database open resetlogs;
SQL>recover database;
SQL>recover database using backup controlfile
ORA-00279:change 1092015 generated at 09/10/2009 10:30:34 needed for thread 1
ORA-00289:suggestion:
/u01/oracle/flash_recovery_area/ORCL/archivelog/...........
ORA-00280
Specify log:
/u01/oracle/oradata/orcl/redo01.log
Log applied.
Media recovery complete.
SQL>alter database open resetlogs;
五,概述
oracle控制文件记录了大量的数据库核心信息,是数据库运行不可缺少的一部分。为保障数据的稳定和安全,学习和了解数据库控制文件的作用及核心极有必要,对于上述内容,如若存在错误和问题,还望指正,谢谢!