Oracle控制文件解析

宁愿做一朵篱下的野花,不愿做一朵受恩惠的蔷薇。与其逢迎献媚,偷取别人的欢心,毋宁被众人所鄙弃!---------《莎士比亚》


今朝有心,他朝有路,今日有情,明日有邻!掌握大脑,赢取人生。Oracle控制文件,管理数据库的状态及描述数据库的物理结构,是实现异步通信的重要手段之一,对保证Oracle实例的正常工作具有重要的作用。

一、oracle控制文件内容

控制文件至少包含以下信息:

  1. 数据库名

  2. 数据库标识符(DBID)

  3. 数据库创建时间戳

  4. 数据库字符集

  5. 数据文件信息

  6. 临时文件信息

  7. 在线重做日志信息

  8. 近期的归档日志信息

  9. 表空间信息

  10. RMAN备份文件信息

  11. 检查点信息

  12. 损坏的数据块注册表

  13. 还原点信息

  14. 重设日志SCN

  15. 脏数据块的数量

二、转储控制文件内容

控制文件是一个二进制文件,为了查看其内容,我们可以通过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

DUMP OF CONTROL FILES, Seq # 13625 = 0x3539

 V10 STYLE FILE HEADER:

        Compatibility Vsn = 186646528=0xb200000

        Db ID=1359212177=0x5103ee91, Db Name='ORCL'

        Activation ID=0=0x0

        Control Seq=13625=0x3539, File size=786=0x312

        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"

 Database flags = 0x00404001 0x00001200

 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

 Activation ID: 1408067569

 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

resetlogs scn: 0x0000.00127834 05/21/2015 19:48:06

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

 enabled at scn: 0x0000.00127834 05/21/2015 19:48:06

 disabled at scn: 0x0000.00000000 01/01/1988 00:00:00

 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

 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00

。。。。。。。。。。。。。。。。。。。。。。。。。。。。

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.ctl|more

}|{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控制文件记录了大量的数据库核心信息,是数据库运行不可缺少的一部分。为保障数据的稳定和安全,学习和了解数据库控制文件的作用及核心极有必要,对于上述内容,如若存在错误和问题,还望指正,谢谢!


喜欢的朋友可以扫描以下二维码进行关注,公众号将每天更新文章:




  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值