控制文件块内容分布
`SQL> SELECT TYPE,`
`1 RECORD_SIZE,`
`2 RECORDS_TOTAL,`
`3 RECORD_SIZE*RECORDS_TOTAL,`
`4 ceil(record_size*records_total/((8*1024)-24))`
`5 FROM v$controlfile_record_section;`
`TYPE RECORD_SIZE RECORDS_TOTAL SIZE BLOCK# BLOCKS`
`---------------------------- ----------- ------------- ------- ------- ---------`
`TITLE 1 1 1 1`
`DATABASE 316 1 316 2 1`
`CKPT PROGRESS 8180 11 89980 3 12`
`REDO THREAD 256 8 2048 15 1`
`REDO LOG 72 16 1152 16 1`
`DATAFILE 520 1024 532480 17 66`
`FILENAME 524 4146 2172504 83 266`
`TABLESPACE 180 1024 184320 349 23`
`TEMPORARY FILENAME 56 1024 57344 372 8`
`RMAN CONFIGURATION 1108 50 55400 380 7`
`LOG HISTORY 56 292 16352 387 3`
`OFFLINE RANGE 200 1063 212600 390 27`
`ARCHIVED LOG 584 28 16352 417 3`
`BACKUP SET 96 1022 98112 420 13`
`BACKUP PIECE 780 1006 784680 433 97`
`BACKUP DATAFILE 200 1063 212600 530 27`
`BACKUP REDOLOG 76 215 16340 557 3`
`DATAFILE COPY 736 1000 736000 560 91`
`BACKUP CORRUPTION 44 1115 49060 651 7`
`COPY CORRUPTION 40 1227 49080 658 7`
`DELETED OBJECT 20 818 16360 665 3`
`PROXY COPY 928 1004 931712 668 115`
`BACKUP SPFILE 124 131 16244 783 2`
`DATABASE INCARNATION 56 292 16352 785 3`
`FLASHBACK LOG 84 2048 172032 788 22`
`RECOVERY DESTINATION 180 1 180 810 1`
`INSTANCE SPACE RESERVATION 28 1055 29540 811 4`
`REMOVABLE RECOVERY FILES 32 1000 32000 815 4`
`RMAN STATUS 116 141 16356 819 3`
`THREAD INSTANCE NAME MAPPING 80 8 640 822 1`
`MTTR 100 8 800 823 1`
`DATAFILE HISTORY 568 57 32376 824 4`
`STANDBY DATABASE MATRIX 400 128 51200 828 7`
`GUARANTEED RESTORE POINT 256 2048 524288 835 65`
`RESTORE POINT 256 2108 539648 900 67`
`DATABASE BLOCK CORRUPTION 80 8384 670720 967 83`
`ACM OPERATION 104 64 6656 1050 1`
`FOREIGN ARCHIVED LOG 604 1002 605208 1051 75`
`PDB RECORD 780 10 7800 1126 1`
`AUXILIARY DATAFILE COPY 584 128 74752 1127 10`
`MULTI INSTANCE REDO APPLY 556 1 556 1137 1`
`PDBINC RECORD 144 113 16272 1139 2`
`TABLESPACE KEY HISTORY 108 151 16308 1141 2`
下面找几个块,进行解析,了解控制文件数据存储方式。
文件头块
`BBED> set filename '/oradata/ORCL/control01.ctl'`
`FILENAME /oradata/ORCL/control01.ctl`
`BBED> set block 0`
`BLOCK# 0`
`BBED> dump`
`File: /oradata/ORCL/control01.ctl (0)`
`Block: 0 Offsets: 0 to 511 Dba:0x00000000`
`00c20000 0000c0ff 00000000 00000004 10fa0000 00400000 76040000 7d7c7b7a`
`a0810000 00000000 00000000 00000000 00000000 00000000 00000000 00000000`
`00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000`
-
offset 1:c2,blocksize
- 82=4096
- a2=8192
- c2=16384
- e2=32768
- offset 6~7:c0ff
- offset 16~17:10fa,file related to growth(unit block)
- offset 20~21
- blocksize:0040–>4000(0100 0000 0000 0000)=16384,控制文件每个块的内容由两个8k块构成,其中一个为影子块
- offset 24~25:7604,块的数量
- offset 28~31:7d7c7b7a,magic number
- offset 32~33:a081
1 号块:文件头信息
BBED
`BBED> set block 1`
`BLOCK# 1`
`BBED> dump`
`File: /oradata/ORCL/control01.ctl (0)`
`Block: 1 Offsets: 0 to 511 Dba:0x00000000`
`15c20000 01000000 00000000 00000104 dc0c0000 00000000 00000013 56e1dd5c`
`4f52434c 00000000 1e100000 76040000 00400000 00000100 00000000 00000000`
`00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000`
`b05f355d d795683d bbe60b00 00800000 65cac03d 00000000 00000000 00000000`
`00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000`
DUMP
DUMP OF CONTROL FILES, Seq # 4126 = 0x101e
V10 STYLE FILE HEADER:
Compatibility Vsn = 318767104=0x13000000
Db ID=1558045014=0x5cdde156, Db Name=’ORCL’
Activation ID=0=0x0
Control Seq=4126=0x101e, File size=1142=0x476
File Number=0, Blksiz=16384, File Type=1 CONTROL
分析
- offset 0~0:15,表示mask
- offset 1~1:c2,表示blocksize
- offset 4~4:01,表示No.1 block
- offset 24~27:00000013(倒序),表示Version(13.0.0.0)
此处对应dump:Compatibility Vsn = 318767104=0x13000000 - offset 28~31:56e1dd5c(倒序),表示DBID
此处对应dump:Db ID=1558045014=0x5cdde156 - offset 32~39:4f52434c 00000000,表示DBNAME
此处对应dump:Db Name=’ORCL’
下面对比一下16进制转码和dump获取的值,即可得证
`SQL> select dump('ORCL') from dual;`
`DUMP('ORCL')`
`--------------------------------------------------`
`Typ=96 Len=4: 79,82,67,76`
`SQL> select to_number('4f','xx'),`
`2 to_number('52','xx'),`
`3 to_number('43','xx'),`
`4 to_number('4c','xx')`
`5 from dual;`
`TO_NUMBER('4F','XX') TO_NUMBER('52','XX') TO_NUMBER('43','XX') TO_NUMBER('4C','XX')`
`-------------------- -------------------- -------------------- --------------------`
`79 82 67 76`
- offset 40~41:1e10,表示sequence
此处对应dump:Control Seq=4126=0x101e - offset 44~45:7604(倒序),表示file size(block Number)
此处对应dump:File size=1142=0x476 - offset 49~50:0400(倒序),表示blocksize 16384
此处对应dump:Blksiz=16384 - offset 53~54:0000,表示fileNo
此处对应dump:File Number=0 - offset 55~56:0100,表示fileType
此处对应dump:File Type=1 CONTROL - offset 105~108:bbe60b00(倒序),表示控制文件SCN
Controlfile Checkpointed at scn: 0x00000000000be6bb
3 号块:CHECKPOINT PROGRESS RECORDS
BBED
`BBED> set block 3`
`BLOCK# 3`
`BBED> dump`
`File: /oradata/ORCL/control01.ctl (0)`
`Block: 3 Offsets: 0 to 511 Dba:0x00000000`
`15c20000 03000000 00000000 00000104 4abb0000 01000000 00000000 00000000`
`ffffffff ffffffff ffff0000 13000000 c8790000 00000000 39eb0b00 00000000`
`90cac03d d695683d 01000000 00000000 24a9c03d b05f355d 00000000 00000000`
`00000000 00000000 00000000 00000000 00000000 00000000 00000000 13000000`
`01000000 0000d7cc 00000000 00000000 00000000 00000000 00000000 00000000`
`00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000`
DUMP
`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:0x1 flags:0x0 dirty:0`
`low cache rba:(0xffffffff.ffffffff.ffff) on disk rba:(0x13.79c8.0)`
`on disk scn: 0x00000000000beb39 03/26/2020 06:15:44`
`resetlogs scn: 0x0000000000000001 01/21/2020 08:31:18`
`heartbeat: 1036034387 mount id: 1563778992`
分析
- offset 0~0:15,表示mask
- offset 1~1:c2,表示blocksize
- offset 4~4:033,表示No. 3 block
- offset 15~16:各版本不发生变化
-
offset 20~20:01,表示thread status
- 1 表示线程关闭
- 2 表示线程出于open状态
- offset 32~41:ffffffff ffffffff ffff,表示low cache rba
此处对应dump:low cache rba:(0xffffffff.ffffffff.ffff) - offset 42~51:0000 13000000 c8790000,表示on disk rba
此处对应dump:on disk rba:(0x13.79c8.0) - offset 56~59:39eb0b00,表示on disk scn
此处对应dump:on disk scn: 0x00000000000beb39 - offset 72~75:01000000,表示resetlogs scn
此处对应dump:resetlogs scn: 0x0000000000000001
其它