昨天有人问我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.可能这么说还有点含糊,那么看下面这张图:
如上图所示,一个redo log文件的头部有2个块,第一个块为file header block,第二个块为redo log header block.下面大致的分析下每个块的存储内容.
截取第一个块的内容如下(我用UE打开格式):
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行开始,具体如下:
后续再更新吧,有点耗时间.