ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 认识Oracle控制文件(10g) - final

认识Oracle控制文件(10g) - final

原创 Linux操作系统 作者:tolywang 时间:2011-05-18 14:30:52 0 删除 编辑


一,dump控制文件

dump控制文件常用两种方式:

1. 通过event可以dump出控制文件的内容 。
SQL> alter session set events 'immediate trace name controlf level 12' ; 


2. 通过oradebug 导出控制文件的内容。 

C:\>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 5月 17 11:18:13 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining Scoring Engine options

SQL> oradebug setmypid ;
已处理的语句
SQL> oradebug dump controlf 12;
已处理的语句
SQL>

 

 

二,控制文件的内容

以下是从测试数据库dump出来的控制文件中的内容。我们详细来看一看。 


控制文件由两大部份组成:可重用的部份(reusable record)和不可重用
的部分。可重用的部分的大小可用CONTROL_FILE_RECORD_KEEP_TIME参数来
控制,该参数的默认值为7天,即可重用的部份的内容保留7天,一周之后
这部份的内容可能被覆盖。可重用的部份是供恢复管理器(RMAN)来使用的,
这部份的内容可以自动扩展。   如果可重用部分的空间不足,但是所有的
record都还没有达到7天,那么record section就会扩展。 如果这个参数设
置为0,可重用部分就不会扩展,只要需要records就被重用。 重用部分 如
归档日志文件,各种备份记录等。

 


0. 控制文件头
1. DATABASE ENTRY    数据库项  
2. CHECKPOINT PROGRESS RECORDS   检查点进度记录  
3. EXTENDED DATABASE ENTRY     扩展的数据库项 (Oracle9i才引入)
4. REDO THREAD RECORDS         重做线程项
5. LOG FILE RECORDS      日志文件记录   
6. DATA FILE RECORDS     数据文件记录 
7. TEMP FILE RECORDS     临时文件记录 (Oracle9i才引入) 
8. TABLESPACE RECORDS    表空间记录 
9. RMAN CONFIGURATION RECORDS      RMAN配置记录 (Oracle9i才引入)   
10. FLASHBACK LOGFILE RECORDS       闪回日志文件记录
11. THREAD INSTANCE MAPPING RECORDS   线程实例mapping记录 
12. MTTR RECORDS               Mean-Time-To-Recover (MTTR)记录 
13. STANDBY DATABASE MAP RECORDS   Standby数据库map记录 
14. RESTORE POINT RECORDS          还原点记录 


15. LOG FILE HISTORY RECORDS  日志文件历史记录 
16. OFFLINE RANGE RECORDS    脱机范围记录
17. ARCHIVED LOG RECORDS     归档日志记录
18. BACKUP SET RECORDS       使用RMAN备份数据库的备份集记录  
19. BACKUP PIECE RECORDS     使用RMAN备份数据库的备份片记录 
20. BACKUP DATAFILE RECORDS  使用RMAN备份数据库的备份数据文件记录 
21. BACKUP LOG RECORDS          使用RMAN备份数据库的备份归档日志记录
22. DATAFILE COPY RECORDS       使用RMAN备份数据库的数据文件拷贝记录 
23. BACKUP DATAFILE CORRUPTION RECORDS    使用RMAN备份数据库的备份数据文件损坏记录 
24. DATAFILE COPY CORRUPTION RECORDS      使用RMAN备份数据库的数据文件拷贝损坏记录
25. DELETION RECORDS          使用RMAN备份数据库的删除记录 
26. PROXY COPY RECORDS        使用RMAN备份数据库的代理拷贝记录 
27. INCARNATION RECORDS         (Oracle9i才引入)   
28. RMAN STATUS RECORDS        RMAN状态记录
29. DATAFILE HISTORY RECORDS          数据文件历史记录 
30. NORMAL RESTORE POINT RECORDS      正常还原点记录  


按照定义,以上0~14部分是不可重用的部分,15~30是归档日志记录,各种备份记录等可重用部分。

 

 


---------------
具体例子: 
---------------

Dump file d:\oracle\product\10.2.0\admin\test01\udump\test01_ora_3108.trc
Tue May 17 11:09:57 2011
ORACLE V10.2.0.1.0 - Production vsnsta=0
vsnsql=14 vsnxtr=3
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining Scoring Engine options
Windows Server 2003 Version V5.2 Service Pack 1
CPU                 : 2 - type 586, 1 Physical Cores
Process Affinity    : 0x00000000
Memory (Avail/Total): Ph:1068M/2037M, Ph+PgF:2274M/3889M, VA:1268M/2047M
Instance name: test01

Redo thread mounted by this instance: 1

Oracle process number: 21

Windows thread id: 3108, image: ORACLE.EXE (SHAD)


*** 2011-05-17 11:09:57.343
*** SERVICE NAME:(SYS$USERS) 2011-05-17 11:09:57.312
*** SESSION ID:(143.641) 2011-05-17 11:09:57.312
DUMP OF CONTROL FILES, Seq # 924 = 0x39c
 V10 STYLE. FILE HEADER:
 Compatibility Vsn = 169869568=0xa200100
 Db ID=3556425887=0xd3fac09f, Db Name='TEST01'
 Activation ID=0=0x0
 Control Seq=924=0x39c, File size=450=0x1c2
 File Number=0, Blksiz=16384, File Type=1 CONTROL

-- 以上内容说明dbid及dbname, Control Seq=924表示控制文件的序列号,表示
控制文件的更新次数,后面是对应的十六进制,File size=450 表示控制文件的
大小,是block数量,这里的block_size=16K, 所以控制文件大小是7200K, 和查
询到的控制文件大小一致。

 

***************************************************************************
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)
-- size表示这个section的大小. extent=1表示没有扩展. blkno=1表示控制文件块号。
 04/28/2011 11:29:06
 DB Name "TEST01"
 Database flags = 0x00404001 0x00001000
 Controlfile Creation Timestamp  04/28/2011 11:29:07
 -- 控制文件创建时间 
 Incmplt recovery scn: 0x0000.00000000
 -- 不完全恢复scn 
 Resetlogs scn: 0x0000.000dc98f Resetlogs Timestamp  04/27/2011 12:51:15
 -- 启用Resetlogs时的scn值和时间戳 
 Prior resetlogs scn: 0x0000.000d18da Prior resetlogs Timestamp  04/26/2011 13:35:12
 -- 启用Resetlogs之前的scn值和时间戳 
 Redo Version: compatible=0xa200100
 -- redo 版本兼容 10.2.0.1
 #Data files = 4, #Online files = 4
 -- 共有4个数据文件,文件全部处在联机(online)状态
 Database checkpoint: Thread=1 scn: 0x0000.00111793
 -- 数据库检查点SCN, 0x0000.00111793是十六进制,转化为10进制就是1120147,
    与 select checkpoint_change#  from v$database; 查询结果一致. 
 Threads: #Enabled=1, #Open=1, Head=1, Tail=1
 -- 当前启用了一个线程,也仅仅打开了这一个线程
 enabled  threads:  01000000 00000000 00000000 00000000 00000000 00000000
 ..... 
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000
 Max log members = 3, Max data members = 1
  -- 数据库允许每个日志组最多有3个log member;
  -- 目前还不支持数据文件的多路复用,因此Max data members的值为1,是为以后升级预留的。
 Arch list: Head=3, Tail=3, Force scn: 0x0000.000fecccscn: 0x0000.001115f2
  -- 归档列表,凡是开始scn (low scn)小于Force scn的redo log都被归档。强制scn
  -- 是所有重做都被归档的scn。
 Activation ID: 3557025609
 Controlfile Checkpointed at scn:  0x0000.001118f8 05/17/2011 07:43:57
  -- 当前控制文件的检查点SCN 
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
 ... 
 


***************************************************************************
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:51
-- 线程信息,有51个dirty block
low cache rba:(0xa.36aa.0) on disk rba:(0xa.379e.0)
-- low cache rba表示恢复的起点, on disk rba表示恢复时的终点。
-- 类似0xa.36aa.0表示重做日志序列.数据块号.偏移量  
on disk scn: 0x0000.00113a4d 05/17/2011 11:09:37
resetlogs scn: 0x0000.000dc98f 04/27/2011 12:51:15
heartbeat: 751355397 mount id: 3558756934
--  heartbeat :  ckpt每隔3秒会更新控制文件中的检查点部分

..... 

这一项从Oracle8开始引入在控制文件当中。这里主要是记录了我们增量检查点的状态,因为
我们都知道自从checkpoint queue引入了Oracle后,每一个脏数据块都会被移动到检查点队列,
按照Low RBA的顺序来排列,那么在写出的时候也是按照Low RBA的顺序写出,对块一级所做的
任何修改并不影响这个块在checkpoint queue中的low rba位置顺序。CKPT进程,按照每3秒的
heartbeat来更新我们的控制文件,更新的就是这一块区域。每3秒都是把最低的RBA,也就是
我们low rba的信息写入我们的控制文件中的checkpoint progress records.

 

***************************************************************************
EXTENDED DATABASE ENTRY
***************************************************************************
 (size = 276, compat size = 276, section max = 1, section in-use = 1,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 147, numrecs = 1)
Control AutoBackup date(dd/mm/yyyy)=28/ 4/2011
Next AutoBackup sequence= 0
Database recovery target inc#:1, Last open inc#:1
flg:0x0, flag:0x0
Change tracking state=0, file index=0, checkpoint count=0
-- Block change tracking 设置为disable, 如果是enable, 那么应该不是0 .
Flashback log count=0, block count=0
-- 闪回日志量
Oldest guarantee restore point=0
 
 


***************************************************************************
REDO THREAD RECORDS      redo检查点信息 
***************************************************************************
 (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:0xf thread links forward:0 back:0
 #logs:3 first:1 last:3 current:3 last used seq#:0xa
-- 有3个日志文件组,第一个是1, 最后一个是3,当前log seq#是10 .
 enabled at scn: 0x0000.000dc98f 04/27/2011 12:51:15
-- 启用线程1时的scn值
 disabled at scn: 0x0000.00000000 01/01/1988 00:00:00
-- 禁用线程1时的scn值,因该线程目前处于打开状态,所以该值为无穷大
 opened at 05/17/2011 07:38:56 by instance test01
-- 打开线程时间戳,及被哪个实例打开
Checkpointed at scn:  0x0000.00111793 05/17/2011 07:38:56
 thread:1 rba:(0xa.23a.10)
 ---  rba:(0xa.23a.10)  表示日志序列.数据块号.偏移量  
 enabled  threads:  01000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  .... 
  00000000 00000000 00000000 00000000 00000000 00000000
 log history: 6
 
 
 
 
***************************************************************************
LOG FILE RECORDS      redo log file信息 
***************************************************************************
 (size = 72, compat size = 72, section max = 16, section in-use = 3,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 10, numrecs = 16)
LOG FILE #1:
  (name #3) D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\REDO01.LOG
 Thread 1 redo log links: forward: 2 backward: 0
-- LOG FILE #1写满后,会切换到forward: 2,即切换到LOG FILE #2,这一点
可以通过LOG FILE #1的Next scn: 0x0000.00107564等于LOG FILE #2的
Low scn: 0x0000.00107564 看出。 

 siz: 0x19000 seq: 0x00000008 hws: 0xa bsz: 512 nab: 0x4ac1 flg: 0x1 dup: 1
 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.000f340f
 Low scn: 0x0000.000feccc 05/12/2011 07:55:39
 Next scn: 0x0000.00107564 05/13/2011 07:48:16

-- 在一个事务提交后,会在redo log中存在一条redo记录,同时,系统为其
提供一个最新的SCN,记录在该条记录中。如果该条记录是在redo log被清空
(日志满做切换时或发生checkpoint时,所有变化日志已经被写入数据文件中),
则其SCN被记录为redo log的low SCN。以后在日志再次被清空前写入的redo记
录中SCN则成为Next SCN。

LOG FILE #2:
  (name #2) D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\REDO02.LOG
 Thread 1 redo log links: forward: 3 backward: 1
 siz: 0x19000 seq: 0x00000009 hws: 0x6 bsz: 512 nab: 0x6636 flg: 0x1 dup: 1
 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.000feccc
 Low scn: 0x0000.00107564 05/13/2011 07:48:16
 Next scn: 0x0000.001115f2 05/16/2011 07:37:21
LOG FILE #3:
  (name #1) D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\REDO03.LOG
 Thread 1 redo log links: forward: 0 backward: 2
 siz: 0x19000 seq: 0x0000000a hws: 0x5 bsz: 512 nab: 0xffffffff flg: 0x8 dup: 1
--  nab是日志文件中LGWR可用的下一个数据块的地址,如果这个值是无穷大,说明
    这个日志文件是当前(LGWR正在写入)的日志文件
 Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.00107564
 Low scn: 0x0000.001115f2 05/16/2011 07:37:21
 Next scn: 0xffff.ffffffff 01/01/1988 00:00:00 

--  可以注意到,在current redo中,next scn是无穷大(redo 3是current). 
--  日志发生切换时会分配一个低scn和一个高scn,低scn就是上一个日志的
高scn的值,而高scn则设置为无穷大,直到切换到下一个日志文件时,再将当
前日志的高scn设置为下一个日志文件的低scn,将下一个日志文件的高scn设置
为无穷大。
 
日志发生切换后,高scn就从无穷大改为Next scn(下一个scn)的值,该值将
作为切换后的日志文件的低scn

 


***************************************************************************
DATA FILE RECORDS
***************************************************************************
 (size = 428, compat size = 428, section max = 100, section in-use = 4,
  last-recid= 0, old-recno = 0, last-recno = 0)
 (extent = 1, blkno = 11, numrecs = 100)
DATA FILE #1:
  (name #7) D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\SYSTEM01.DBF
creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1
 tablespace 0, index=1 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:128 scn: 0x0000.00111793 05/17/2011 07:38:56
-- 对该文件执行检查点次数为 128,
 Stop scn: 0xffff.ffffffff 05/16/2011 07:39:49
-- 结束scn(Stop scn)是数据文件的最后一个scn(数据库正常关闭时会设置这个值),
数据库正常打开的状态,该值为无穷大。 数据库恢复时要求恢复到Stop scn。

 Creation Checkpointed at scn:  0x0000.00000009 08/30/2005 13:50:22
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  ...... 
  00000000 00000000 00000000 00000000 00000000 00000000
 Offline scn: 0x0000.00000000 prev_range: 0
--  文件联机时的检查点scn作为联机scn保存在控制文件中,由于系统表空间的
数据文件永远不能脱机,所以系统数据文件的脱机scn应该为0x0000.00000000

 Online Checkpointed at scn:  0x0000.00000000
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  ......
  00000000 00000000 00000000 00000000 00000000 00000000
 Hot Backup end marker scn: 0x0000.00000000
-- 热备份end 记录scn 

 aux_file is NOT DEFINED
DATA FILE #2:
  (name #6) D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\UNDOTBS01.DBF
creation size=0 block size=8192 status=0xe head=6 tail=6 dup=1
 tablespace 1, index=2 krfil=2 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:91 scn: 0x0000.00111793 05/17/2011 07:38:56
 Stop scn: 0xffff.ffffffff 05/16/2011 07:39:49
 Creation Checkpointed at scn:  0x0000.00081f74 08/30/2005 17:25:44
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
 ......
  00000000 00000000 00000000 00000000 00000000 00000000
 Offline scn: 0x0000.00000000 prev_range: 0
 Online Checkpointed at scn:  0x0000.00000000
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  ......
  00000000 00000000 00000000 00000000 00000000 00000000
 Hot Backup end marker scn: 0x0000.00000000
 aux_file is NOT DEFINED
DATA FILE #3:
  (name #5) D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\SYSAUX01.DBF
creation size=0 block size=8192 status=0xe head=5 tail=5 dup=1
 tablespace 2, index=3 krfil=3 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:128 scn: 0x0000.00111793 05/17/2011 07:38:56
 Stop scn: 0xffff.ffffffff 05/16/2011 07:39:49
 Creation Checkpointed at scn:  0x0000.000017d4 08/30/2005 13:50:49
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
  .....  
  00000000 00000000 00000000 00000000 00000000 00000000
 Offline scn: 0x0000.00000000 prev_range: 0
 Online Checkpointed at scn:  0x0000.00000000
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
  .....
  00000000 00000000 00000000 00000000 00000000 00000000
 Hot Backup end marker scn: 0x0000.00000000
 aux_file is NOT DEFINED
DATA FILE #4:
  (name #4) D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\USERS01.DBF
creation size=0 block size=8192 status=0xe head=4 tail=4 dup=1
 tablespace 4, index=4 krfil=4 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:127 scn: 0x0000.00111793 05/17/2011 07:38:56
 Stop scn: 0xffff.ffffffff 05/16/2011 07:39:49
 Creation Checkpointed at scn:  0x0000.00002629 08/30/2005 13:51:05
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
  ......
  00000000 00000000 00000000 00000000 00000000 00000000
 Offline scn: 0x0000.00000000 prev_range: 0
 Online Checkpointed at scn:  0x0000.00000000
 thread:0 rba:(0x0.0.0)
 enabled  threads:  00000000 00000000 00000000 00000000 00000000 00000000
  ....... 
  00000000 00000000 00000000 00000000 00000000 00000000
 Hot Backup end marker scn: 0x0000.00000000
 aux_file is NOT DEFINED
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-695669/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13506305