Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2840530
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2012-03-30 09:59:26

在ORACLE公司参加的Asktom and Eygle的上海交流中,eygle提出:"ORACLE的Redo logfile文件最大能有多大”。
 
这个问题很少有人关注,由于redo logfile是循环使用的,完全没有必要配置的很大,只需要具有合适的日志组数和日志文件大小即可。
 
由于受到rowid的限制,ORACLE使用ROWID的22位来代表block号,因此一个数据文件最大具有power(2,22)=4194304个块。
因此:

   对于4K大小的块来说, 单个数据文件最大为power(2,22)*4k =16G。
   对于8K大小的块来说, 单个数据文件最大为power(2,22)*8k =32G。
   对于16K大小的块来说,单个数据文件最大为power(2,22)*8k =64G。
   对于32K大小的块来说,单个数据文件最大为power(2,22)*8k =128G。
 
ORACLE 引入的大文件表空间采用32位来代表BLOCK 号,单个数据文件大小最大能到128T。

那么redo logfile能有多大呢?
 
我们也可以采用同样的方法来推断:
 
在ORACLE中,用RBA来代表redo log file的物理位置。
 
在alert logfile中我们会经常看到如下RBA的信息:
 
Thread 1 advanced to log sequence 20 (LGWR switch)
  Current log# 10 seq# 20 mem# 0: /cpic/cpicredo_u01/cpic/redo10a.log
  Current log# 10 seq# 20 mem# 1: /cpic/cpicundo_u01/cpic/redo10b.log
Fri Mar 30 09:06:45 2012
Completed checkpoint up to RBA [0x14.2.10], SCN: 9064462393884
Fri Mar 30 09:21:36 2012
Incremental checkpoint up to RBA [0x14.1e5.0], current log tail at RBA [0x14.1f3.0]
 
 
RBA信息有3部分组成:
 
4个字节的日志文件序列号(Log sequence number)
4个字节的BLOCK号(Block number within log file)
2个字节的偏移量(Byte offset within block)

RBA的信息是用16进制表示的:RBA [0x14.1e5.0] 表示的位置为:日志序列号为20,块号为485,偏移量为0。

既然ORACLE用4个字节来代表redo log file中的块号,那么一个日志文件最大代表的块号为:power(2,32)=4294967296
 
日志文件的块大小可以通过如下方法来查询:
 
SQL> select distinct block_size from v$archived_log;
 
BLOCK_SIZE
----------
       512
或者
[oracle@sxffdb1 ~]$ dbfsize /cpic/cpicredo_u01/cpic/redo10a.log
 
Database file: /cpic/cpicredo_u01/cpic/redo10a.log
Database file type: file system
Database file size: 2097152 512 byte blocks

从上面可以看出单个日志文件最大为:4294967296*512/1024/1024/1024=2048(G) 也就是2T。
阅读(3151) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~