作者:dbtan |【转载时请以超链接形式标明文章出处作者信息】


日志的块大小:

初始化参数LOG_BUFFER决定了Redo Log Buffer的大小,虽然LOG_BUFFER中的Redo Entries的大小是以bytes为单位但是LGWR仍然以Block为单位把Redo写入磁盘Redo Block Size是Oracle源代码中固定的,与操作系统相关

通常的操作系统都是以512bytes为单位,如Solaris、AIX、Windows NT/2000、Linux等。这个Log Size可以从Oracle的内部视图中获得:

sys@TQGZS> select max(lebsz) from x$kccle;
MAX(LEBSZ)
----------
       512

也可以从v$sysstat中的统计信息中通过计算粗略得到,如Redo Size(Redo信息的大小)、Redo Wastage(浪费的Redo的大小)、Redo Blocks Written(LGWR写出的Redo Block的数量)等额外的信息,每个Redo Block Header需要占用16 Bytes,由此可以粗略地计算Redo Block Size如下:

sys@TQGZS> select name,value from v$sysstat                                
  2  where name in ('redo size','redo wastage','redo blocks written');
NAME                                            VALUE
---------------------------------------- ------------
redo size                                    13253016
redo wastage                                   225776
redo blocks written                             27416
sys@TQGZS> select ceil(16+(13253016+225776)/27416) rbsize from dual;
    RBSIZE
----------
       508

在Linux/UNIX下,Oracle还提供另外一个命令行工具可以用于检查文件的Block Size大小:

[oracle@tqgzs: ~/oradata/tqgzs]$dbfsize redo01.log
Database file: redo01.log
Database file type: file system
Database file size: 102400 512 byte blocks
[oracle@tqgzs: ~/oradata/tqgzs]$dbfsize system01.dbf
Database file: system01.dbf
Database file type: file system
Database file size: 89600 8192 byte blocks
[oracle@tqgzs: ~/oradata/tqgzs]$which dbfsize
~/product/10.2.0/db_1/bin/dbfsize

从以上的输出中可以看到,日志文件的Block Size是512 Bytes,而数据文件的Block Size为8192 Bytes。当然,也可以通过转储日志文件的方式来获取日志文件块大小,转储日志文件头可以通过如下命名实现:

alter session set events 'immediate trace name redohdr level 10';

查看跟踪文件可以得到类似如下信息,输出中的bsz就是指Redo Block Size为512Bytes:

LOG FILE #1:   
  (name #3) /u01/oracle/oradata/tqgzs/redo01.log
Thread 1 redo log links: forward: 2 backward: 0
siz: 0x19000 seq: 0x00000077 hws: 0x4 bsz: 512 nab: 0x2 flg: 0x1 dup: 1
Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.005f5e8e
Low scn: 0x0000.005f5e90 12/13/2009 23:33:58
Next scn: 0x0000.005f5e92 12/13/2009 23:34:03

有时候当数据库出现归档错误时,也会给出提示信息,告知blocksize=512

ORA-19502: write error on file "/data1/oraarc/PTL017151.arc", blockno 169985 (blocksize=512)
  ORA-27072: skgfdisp: I/O error

- The End -

相关日志