oracle的block其实是和os的扇区相对应!

oracle的block其实是和os的扇区相对应![@more@]
之所以要说明oracle的block和os的扇区相对应,是因为oracle的doc上提到oracle的block是os的block的整数倍(DB_BLOCK_SIZE specifies (in bytes) the size of Oracle database blocks. Typical values are 4096 and 8192. The value of this parameter must be a multiple of the physical block size at the device level.),那么oracle中提到的os的block到底是指os的什么需要明确。
oracle的block其实是和os的扇区相对应,和簇应该没有任何关系!os的扇区是os的最小io单位
为什么这样说:
1、理由1
NTFS下default的簇是4k,fat32下default的是16k,当然通过format格式化的时候可以设定,参数/A:size就是用来设定簇的大小,扇区的大小是否可以修改不知道。os分配空间的单位应该是簇,对应的应该象oracle中的extent,我们可以创建一个txt文件,里面写上2个字符,点击文件的右键发现它的大小是2个byte,但是占用空间是4k,说明os给这个文件分配了4k的空间。
C:>fsutil fsinfo ntfsinfo c:
NTFS 卷序列号 : 0xf65059f25059b9d7
版本 : 3.1
区数量 : 0x0000000002710010
簇总数 : 0x00000000004e2002
可用簇 : 0x000000000014aa53
保留总数 : 0x0000000000000060
每个扇区字节数 : 512
每个簇字节数 : 4096
每个 FileRecord 段的字节数 : 1024
每个 FileRecord 段的簇数 : 0
Mft 有效数据长度 : 0x000000000a01c000
Mft 起始 Lcn : 0x00000000000c4dfe
Mft2 起始 Lcn : 0x000000000008019c
Mft 区域起始 : 0x00000000002a5aa0
Mft 区域结尾 : 0x00000000002a5c00
--===========================================
C:>format /?
格式化磁盘以供 Windows XP 使用。

FORMAT volume [/FS:file-system] [/V:label] [/Q] [/A:size] [/C] [/X]
FORMAT volume [/V:label] [/Q] [/F:size]
FORMAT volume [/V:label] [/Q] [/T:tracks /N:sectors]
FORMAT volume [/V:label] [/Q]
FORMAT volume [/Q]

volume 指定驱动器(后面跟一个冒号)、装入点
或卷名。
/FS:filesystem 指定文件系统类型(FAT、FAT32 或 NTFS)。
/V:label 指定卷标。
/Q 执行快速格式化。
/C 仅适于 NTFS: 默认情况下,将压缩在该新建卷上
创建的文件。
/X 如果必要,先强制卸下卷。那时,该卷所有
已打开的句柄不再有效。
/A:size 替代默认配置单位大小。极力建议您在一般状况下使用
默认设置。
NTFS 支持 512、1024、2048、4096、8192、16K、32K、
64K。
FAT 支持 512、1024、2048、4096、8192、16K、32K、
64k,(128k、256k 用于大于 512 字节的扇区) 。
FAT32 支持 512、1024、2048、4096、8192、16k、32k、
64k,(128k 、256k 用于大于 512 字节的扇区)。

注意 FAT 及 FAT32 文件系统对卷上的群集数量有以下限制:

FAT: 群集数量 <= 65526
FAT32: 65526 < 群集数量 < 4177918

如果判定使用指定的群集大小无法满足以上需求,格式
化将立即停止。

NTFS 压缩不支持大于 4096 的分配单元。

/F:size 指定要格式化的软盘大小(1.44)
/T:tracks 为磁盘指定每面磁道数。
/N:sectors 指定每条磁道的扇区数。

C:>
2、理由2
如果说oracle中的block对应的不是扇区而是簇,那么NTFS下簇是4k,但是在oracle中可以创建db_block_size=2k的库该如何解释?
3、理由3
log_buffer的大小和os 的block有关,这里其实提到的os block也是指扇区的大小,绝对不是指簇
If the value of the log_buffer is not an exact multiple of the
OS block size, Oracle will complain with this error. If the OS
block size is 512, a value of 10*512 or 5120 will be valid.
Rounding off to 5100 would generate the error
可以简单的测试一下,不论如何修改log_buffer的大小,它始终会取512的倍数,因为os的扇区大小是512
SQL> select 2899456/512 from dual;

2899456/512
-----------
5663

SQL> alter system set log_buffer=1234567 scope=spfile;

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 125830500 bytes
Database Buffers 37748736 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter log_buffer

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 2899456
SQL> alter system set log_buffer=67891233 scope=spfile;

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247516 bytes
Variable Size 54527716 bytes
Database Buffers 41943040 bytes
Redo Buffers 70053888 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter log_buffer

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 67100672
SQL> select 67100672/512 from dual;

67100672/512
------------
131056

SQL>
4、理由4
redo logfile的大小也是以os block为单位的,可以通过查看archived log获得:
SQL> select distinct block_size from v$archived_log;

BLOCK_SIZE
----------
512

SQL>
5、理由5
参数LOG_CHECKPOINT_INTERVAL尽管有些过时,不过从它的解释提到的operating system blocks再结合理由4我们不难发现oracle中提到的operating system blocks都是对应到了os的扇区上而决不是簇,簇可以理解成os的逻辑感念。
LOG_CHECKPOINT_INTERVAL specifies the frequency of checkpoints in terms of the number of redo log file blocks that can exist between an incremental checkpoint and the last block written to the redo log. This number refers to physical operating system blocks, not database blocks.

综上所述,oracle中提到的operating system blocks都是指os的扇区,也就是os的最小io单位,和簇没有关系!那么oracle一个block所包含的os block是否是连续的无证可查,但是一个簇所包含的扇区都是相邻的,就像oracle的extent是由连续的block组成的一样。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19602/viewspace-1007524/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/19602/viewspace-1007524/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值