Oracle 控制文件存储解析

控制文件块内容分布

`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

其它

控制文件存储内容就不一一进行解析了,希望以上介绍会对解析Oracle 控制文件成为一个好的开始。
Oracle 控制文件存储解析_第1张图片

你可能感兴趣的:(数据库,oracle)