日志的块大小:
初始化参数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 -