宁愿做一朵篱下的野花,不愿做一朵受恩惠的蔷薇。与其逢迎献媚,偷取别人的欢心,毋宁被众人所鄙弃!---------《莎士比亚》
一、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
打开跟踪日志文件,查看转储内容:
2.1,查看到数据库ID、名称等内容:
*** 2018-01-16 00:06:31.492
V10 STYLE FILE HEADER:
Compatibility Vsn = 186646528=0xb200000
Db ID=1359212177=0x5103ee91, Db Name='ORCL'
Activation ID=0=0x0
File Number=0, Blksiz=16384, File Type=1 CONTROL
2.2,数据库条目的详细信息,其中包括数据库文件及日志文件数量、检查点等信息:
DATABASE ENTRY
***************************************************************************
(size = 316, compat size = 316, section max = 1, section in-use = 1,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 1, numrecs = 1)
05/19/2015 20:09:17
DB Name "ORCL"
Controlfile Creation Timestamp 05/19/2015 20:09:18
Incmplt recovery scn: 0x0000.00000000
Resetlogs scn: 0x0000.00127834 Resetlogs Timestamp 05/21/2015 19:48:06
Prior resetlogs scn: 0x0000.00000001 Prior resetlogs Timestamp 11/14/2013 01:10:41
Redo Version: compatible=0xb200000
#Data files = 7, #Online files = 7
Database checkpoint: Thread=1 scn: 0x0000.001ff6b1
Threads: #Enabled=1, #Open=1, Head=1, Tail=1
。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。
Max log members = 3, Max data members = 1
Arch list: Head=2, Tail=2, Force scn: 0x0000.001f09d2scn: 0x0000.001ff6b0
Controlfile Checkpointed at scn: 0x0000.001ff75e 01/16/2018 00:06:18
thread:0 rba:(0x0.0.0)
2.3,接下来是检查点计数条目:
CHECKPOINT PROGRESS RECORDS
***************************************************************************
(size = 8180, compat size = 8180, section max = 11, section in-use = 0,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 2, numrecs = 11)
THREAD #1 - status:0x2 flags:0x0 dirty:63
low cache rba:(0x35.3.0) on disk rba:(0x35.b2.0)
on disk scn: 0x0000.001ff798 01/16/2018 00:06:29
heartbeat: 965487596 mount id: 1493283675
Flashback log tail log# 1 thread# 1 seq 32 block 102 byte 0
。。。。。。。。。。。。。。。。。。。。。。。。。。
2.4,补充数据库条目
EXTENDED DATABASE ENTRY
***************************************************************************
(size = 900, compat size = 900, section max = 1, section in-use = 1,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 236, numrecs = 1)
Control AutoBackup date(dd/mm/yyyy)=16/11/2016
Next AutoBackup sequence= 1
Database recovery target inc#:2, Last open inc#:2
flg:0x0, flag:0x1
。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。
2.5,重做线程条目
REDO THREAD RECORDS
***************************************************************************
(size = 256, compat size = 256, section max = 8, section in-use = 1,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 9, numrecs = 8)
THREAD #1 - status:0xbf thread links forward:0 back:0
#logs:3 first:1 last:3 current:2 last used seq#:0x35
opened at 01/16/2018 00:06:06 by instance ORCL
Checkpointed at scn: 0x0000.001ff6b1 01/16/2018 00:06:06
。。。。。。。。。。。。。。。。。。。。。。。。。。。
2.6,日志文件条目
LOG FILE RECORDS
***************************************************************************
(size = 72, compat size = 72, section max = 16, section in-use = 16,
last-recid= 3, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 10, numrecs = 16)
LOG FILE #1:
name #1: /oracle/app/data/ORCL/redo01.log
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2.7,数据文件条目
DATA FILE RECORDS
***************************************************************************
(size = 520, compat size = 520, section max = 300, section in-use = 7,
last-recid= 11, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 11, numrecs = 300)
DATA FILE #1:
name #8: /oracle/app/data/ORCL/system01.dbf
creation size=0 block size=8192 status=0xe head=8 tail=8 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2.8其他
由于内容太多,有兴趣的朋友可以自己转储控制文件进行查看,转储内容后续还有临时文件条目、表空间条目、rman配置条目、闪回日志文件条目、进程实例映射条目等多个记录信息。
三、控制文件操作
3.1,视图信息
有3种途径查看控制文件信息:
SQL> select name from v$controlfile
SQL>show parameter controfiles;
SQL>select name,value from v$parameter where name='control_files';
3.2,控制文件记录内容
SQL>select * from v$controlfile_record_section;
3.3,普通查看控制文件内容
a,通过strings查看
[oracle@oracle11g ~]$ strings /oracle/app/data/ORCL/control01.ctlmore
}{z
QORCL
TAG20150521T193139
x44x
u4ORCL
u4ORCL
ORCL
ORCL
/oracle/app/data/ORCL/redo01.log
/oracle/app/data/ORCL/redo03.log
。。。。。。。。。。。。。。。。。。。。。。
b,备份出来查看
SQL> alter database backup controlfile to trace as '/oracle/app/control180116.ora';
Database altered.
[root@oracle11g ~]# more /oracle/app/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=''
。。。。。。。。。。。。。。。。。。。。
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;
根据参数显示的控制文件个数,拷贝尚存在的控制文件到不存在的控制文件
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控制文件记录了大量的数据库核心信息,是数据库运行不可缺少的一部分。为保障数据的稳定和安全,学习和了解数据库控制文件的作用及核心极有必要,对于上述内容,如若存在错误和问题,还望指正,谢谢!
领取专属 10元无门槛券
私享最新 技术干货