oracle的controlfile_header


SYS@hyyk> select table_name from dict where table_name like '%CONTROL%';

TABLE_NAME
------------------------------
DBA_HIST_WR_CONTROL
DBA_REPRESOL_STATS_CONTROL
USER_REPRESOL_STATS_CONTROL
ALL_REPRESOL_STATS_CONTROL
V$BACKUP_CONTROLFILE_DETAILS
V$BACKUP_CONTROLFILE_SUMMARY
V$CONTROLFILE
V$CONTROLFILE_RECORD_SECTION
V$SESSION_FIX_CONTROL
V$SYSTEM_FIX_CONTROL
V$DLM_TRAFFIC_CONTROLLER
GV$CONTROLFILE
GV$CONTROLFILE_RECORD_SECTION
GV$DLM_TRAFFIC_CONTROLLER
V$DIAG_ADR_CONTROL


SYS@hyyk> select * from V$CONTROLFILE_RECORD_SECTION;

TYPE                 RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
DATABASE                 316         1          1          0      0        0
CKPT PROGRESS            8180        11          0         0      0        0
REDO THREAD              256         8          1          0      0        0
REDO LOG                  72        16          3          0      0        3
DATAFILE                 520       100          8          0      0       72
FILENAME                 524      2298         12          0      0        0
TABLESPACE                68       100          9          0      0        5
TEMPORARY FILENAME        56       100          1          0      0        1
RMAN CONFIGURATION      1108        50          0          0      0        0
LOG HISTORY               56       292         62          1     62       62
OFFLINE RANGE            200       163          2          1      2        2
ARCHIVED LOG             584        56         40          1     40       40
BACKUP SET                40       409          3          1      3        3
BACKUP PIECE             736       200          3          1      3        3
BACKUP DATAFILE          200       245          7          1      7        7
BACKUP REDOLOG            76       215          0          0      0        0
DATAFILE COPY            736       200          1          1      1        1
BACKUP CORRUPTION         44       371          0          0      0        0
COPY CORRUPTION           40       409          0          0      0        0
DELETED OBJECT            20       818          1          1      1        1
PROXY COPY               928       246          0          0      0        0
BACKUP SPFILE            124       131          2          1      2        2
DATABASE INCARNATION      56       292          2          1      2        2
FLASHBACK LOG             84      2048          0          0      0        0
RECOVERY DESTINATION      80         1          1          0      0        0
INSTANCE SPACE RESERVATION 28      1055          1          0      0        0
REMOVABLE RECOVERY FILES   32      1000          1          0      0        0
RMAN STATUS               116       141          7          1      7        7
THREAD INSTANCE NAME MAPPING 0        8          8          0      0        0
MTTR                      100         8          1          0      0        0
DATAFILE HISTORY          568        57          0          0      0        0
STANDBY DATABASE MATRIX   400        31         31          0      0        0
GUARANTEED RESTORE POINT  212      2048          0          0      0        0
RESTORE POINT             212      2083          0          0      0        0
DATABASE BLOCK CORRUPTION  80      8384          0          0      0        0
ACM OPERATION             104        64          6          0      0        0
FOREIGN ARCHIVED LOG      604      1002          0          0      0        0

record size,则表示该部分内容在controlfile 中所占据的大小,其单位是byte.

那我们通过controlfile dump来进行观察,如下:

dump controlfile header

SQL> oradebug setmypid
Statement processed.
SQL> ALTER SESSION SET EVENTS 'immediate trace name controlf level 1';

Session altered.

SQL> oradebug close_trace
Statement processed.
SQL> oradebug tracefile_name
/home/ora10g/admin/roger/udump/roger_ora_8303.trc

说明:level 1  --dump controlfile header
          level 2  --level 1+datafile 文件头信息
          level 3  --level 2+可重用信息
          level 10 --level 3+其他全部信息

***************************************************************************
LOG FILE RECORDS
***************************************************************************
(size = 72, compat size = 72, section max = 16, section in-use = 3,
  last-recid= 3, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 10, numrecs = 16)
可知redo log该部分内容在controlfile 中所占据72 byte.

*** 2018-02-22 13:21:25.972
DUMP OF CONTROL FILES, Seq # 4293 = 0x10c5
V10 STYLE FILE HEADER:
        Compatibility Vsn = 186646528=0xb200000
        Db ID=2117284640=0x7e333320, Db Name='HYYK'
        Activation ID=0=0x0
        Control Seq=4293=0x10c5, File size=596=0x254
        File Number=0, Blksiz=16384, File Type=1 CONTROL

Compatibility Vsn:     表示具体的版本号  0xb200000   转换后及表示100205
DB ID:                 表示数据库的db id号
Db Name:              表示数据库的数据库名
Activation:           这里没有什么实际意义
Control Seq:          表示control的sequence号。
File size:            表示文件大小,这里但是是block(conrolfile block)
File Number:           在oracle内部,定义controlfile的文件号为0.
Blksize:               表示controlfile block的大小.
File Type:             表示文件类型.

既然知道controlfile header的各个部分的含义后,那么在有些针对controlfile损坏的情况下,甚至可以手工修复controlfile来
解决问题。 除了dump controlfile之外,我们还可以利用操作系统命令dd+od来观察,如下:

[oracle@pc6 ~]$ dd if=/u01/app/oracle/oradata/hyyk/control01.ctl bs=16384 count=1 | od -x |head -20
记录了1+0 的读入
记录了1+0 的写出
16384字节(16 kB)已复制0000000 c200 0000 0000 ffc0 0000 0000 0000 0000
0000020 f832 0000 4000 0000 0254 0000 7c7d 7a7b
0000040 81a0 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0040000
,0.0256473 秒,639 kB/秒

这个dump是os block 的信息

[oracle@pc6 ~]$  dd if=/u01/app/oracle/oradata/hyyk/control01.ctl bs=16384 count=2 | od -x |head -500
0000000 c200 0000 0000 ffc0 0000 0000 0000 0000
0000020 fba4 0000 4000 0000 01c2 0000 7c7d 7a7b      --33184
0000040 81a0 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0040000 c215 0000 0001 0000 0000 0000 0000 0401
0040020 ee77 0000 0000 0000 0500 0a20 4d29 930a
0040040 4f52 4547 0052 0000 26f4 0000 01c2 0000
0040060 4000 0000 0000 0001 0000 0000 0000 0000
0040100 4154 3247 3130 3033 3032 5437 3230 3033
0040120 3835 0000 0000 0000 0000 0000 0000 0000
0040140 fb8d 95ed d25b 3008 733f 0069 0000 0000
0040160 6204 305b 0000 0000 0000 0000 0000 0000
0040200 0000 0000 0000 0000 0000 0000 0000 0000
*
0040400 0000 0000 0000 0000 0008 0000 0008 0000
0040420 0008 0000 0000 0000 0000 0000 0000 0000
0040440 0001 0000 0000 0000 0000 0000 0000 0000
0040460 0000 0000 0000 0000 0000 0000 0000 0000
*
0077760 0000 0000 0000 0000 0000 0000 1501 0000
0100000
下面针对上面dump 内容进行解析:
c2         表示type类型,转换后为194
4000       表示controlfile block size.(转换为10进制后为16384)
01c2       表示文件大小,单位是block,转换为10进制后为450.
7c7d 7a7b  表示操作系统平台的magic number号,每个操作系统对应的号码可能都不一样.

c215       是头部信息,这个不用关注
0001       表示file type.
0500 0a20  表示数据库版本号
4d29 930a  表示DB ID号
4f52 4547 0052  表示DB Name,如下:


网站栏目:oracle的controlfile_header
URL地址:http://myzitong.com/article/ghdscj.html