Skip to content

3.理解redo log file header,redo block header and redo record header

昨天有人问我redo log file header,redo block header, redo record header的区别,这三个确实容易混淆,简单聊聊这三个概念,This is importance.
以16进制格式来分析.偶尔会穿插点10进制的dump格式.
一.redo log file header

redo log file header即为重做日志文件头,文件头的内容部分其实包含2个,一个为file header block,一个为redo log header block.可能这么说还有点含糊,那么看下面这张图:

3

如上图所示,一个redo log文件的头部有2个块,第一个块为file header block,第二个块为redo log header block.下面大致的分析下每个块的存储内容.
截取第一个块的内容如下(我用UE打开格式):

log1

10进制的dump格式:

DUMP OF REDO FROM FILE '/oradata/ora10g/lu10g/redo03.log'
 Opcodes *.*
 RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
 SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
 Times: creation thru eternity
 FILE HEADER:
	Compatibility Vsn = 169870080=0xa200300
	Db ID=2561616225=0x98af2961, Db Name='LU10G'
	Activation ID=2561579617=0x98ae9a61
	Control Seq=564=0x234, File size=102400=0x19000
	File Number=3, Blksiz=512, File Type=2 LOG
 descrip:"Thread 0001, Seq# 0000000009, SCN 0x00000099c24d-0x0000009a40c4"
 thread: 1 nab: 0x16910 seq: 0x00000009 hws: 0x4 eot: 0 dis: 0
 resetlogs count: 0x31bca923 scn: 0x0000.000716f7 (464631)
 resetlogs terminal rcv count: 0x0 scn: 0x0000.00000000
 prev resetlogs count: 0x268ea86b scn: 0x0000.00000001 (1)
 prev resetlogs terminal rcv count: 0x0 scn: 0x0000.00000000
 Low  scn: 0x0000.0099c24d (10076749) 04/15/2014 12:08:04
 Next scn: 0x0000.009a40c4 (10109124) 04/16/2014 06:56:19
 Enabled scn: 0x0000.000716f7 (464631) 12/17/2013 23:00:51
 Thread closed scn: 0x0000.0099c24d (10076749) 04/15/2014 12:08:04
 Disk cksum: 0xeb7d Calc cksum: 0xeb7d
 Terminal recovery stop scn: 0x0000.00000000
 Terminal recovery  01/01/1988 00:00:00
 Most recent redo scn: 0x0000.00000000
 Largest LWN: 2134 blocks
 End-of-redo stream : No
 Unprotected mode
 Miscellaneous flags: 0x0
 Thread internal enable indicator: thr: 0, seq: 0 scn: 0x0000.00000000

在ue打开的16进制中每行是16bytes,一共32行,这为第一个块file header block.这个block包含的信息有限,逐一分析:
从第一个字节开始到第二个字节为0x22,这2个字节通常为oracle 文件类型的标识,像数据文件的开头这里就为0xA2,这里的0x22就代表redo log file.接着下来第一行就没有有意义的东西了其中的0xFFC0应该和scn中的base部分有关.再看看第二行的16个字节,可以发现在第21和22字节0x0200换算成10进制格式则为512,这里即代表block size.从第25到28字节0x00019000换算成10进制后为102400,而0x00019000代表redo block的数量,这里即为代表这个file的blocks或者理解为这个file的size.而在后续跟着的0x7a7b7c7d为文件标识符,为oracle快速识别文件的一种标识.到这之后第一个块的信息就没啦!

接下来分析第二个块redo log header block,第二个块的信息是在文件中的第33行开始,具体如下:
log2

后续再更新吧,有点耗时间.

2 thoughts on “3.理解redo log file header,redo block header and redo record header

  1. jedy says:

    请问File size=102400怎么换算成blocks??

    • luda says:

      @jedy

      102400为blocks的数量啦,整个文件是102400+1个block,文章中写错了,已经更正

Comments are closed.