oracle headerblock,创建ORACLE数据文件时需要注意的地方(OS Header Block)

创建ORACLE数据文件时需要注意的地方(OS Header Block)

今天在AIX上作有关ORACLE 4K偏移量的测试,发现在SCALABLE VG上的LV即使没有了前面的LVCB的数据块,但是依然不能将LV上的所有空间用于该数据文件:

1.检查VG是否SCALABLE VG# lsvg vg1

VOLUME GROUP:       vg1                      VG IDENTIFIER:  0003744f00004c00000001286c0d50ae

VG STATE:           active                   PP SIZE:        4 megabyte(s)

VG PERMISSION:      read/write               TOTAL PPs:      238 (952 megabytes)

MAX LVs:            256                      FREE PPs:       204 (816 megabytes)

LVs:                4                        USED PPs:       34 (136 megabytes)

OPEN LVs:           2                        QUORUM:         2 (Enabled)

TOTAL PVs:          1                        VG DESCRIPTORS: 2

STALE PVs:          0                        STALE PPs:      0

ACTIVE PVs:         1                        AUTO ON:        yes

MAX PPs per VG:     32768                    MAX PVs:        1024

LTG size (Dynamic): 256 kilobyte(s)          AUTO SYNC:      no

HOT SPARE:          no                       BB POLICY:      relocatable

由以上属性MAX PVS=1024可以知道,该VG是SCALABLE VG

2.显示LV的容量

# lslv test

LOGICAL VOLUME:     test                   VOLUME GROUP:   vg1

LV IDENTIFIER:      0003744f00004c00000001286c0d50ae.4 PERMISSION:     read/write

VG STATE:           active/complete        LV STATE:       opened/syncd

TYPE:               jfs2                   WRITE VERIFY:   off

MAX LPs:            512                    PP SIZE:        4 megabyte(s)

COPIES:             1                      SCHED POLICY:   parallel

LPs:                4                      PPs:            4

STALE PPs:          0                      BB POLICY:      relocatable

INTER-POLICY:       minimum                RELOCATABLE:    yes

INTRA-POLICY:       middle                 UPPER BOUND:    1024

MOUNT POINT:        N/A                    LABEL:          None

MIRROR WRITE CONSISTENCY: on/ACTIVE

EACH LP COPY ON A SEPARATE PV ?: yes

Serialize IO ?:     NO

DEVICESUBTYPE : DS_LVZ

由以上输出得知该LV=4×4=16M

3.在LV上创建16M的数据文件

SQL> create tablespace testtbs datafile '/dev/rtest' size 16M;

create tablespace testtbs datafile '/dev/rtest' size 16M

*

ERROR at line 1:

ORA-01119: error in creating database file '/dev/rtest'

ORA-27042: not enough space on raw partition to fullfill request

Additional information: 1

Additional information: 1

提示没还有足够的空间来创建16M的数据文件;明明是16M的,怎么说空间不足呢?

试试在FS下创建数据文件看看

4.在FS上创建1000K的数据文件

SQL> create tablespace ricky datafile '/oracle/oradata/myoracle/ricky01.dbf' size 1000k;

Tablespace created.

SQL> commit;

Commit complete.

检查该数据文件的大小

SQL> host ls -l /oracle/oradata/myoracle/ricky01.dbf

-rw-r-----    1 oracle   dba         1032192 May 09 15:01 /oracle/oradata/myoracle/ricky01.dbf

1032192/1024=1008K

我明明创建的是1000K的数据文件啊,怎么占用了我1008K的空间呢?

原来这是因为建立数据文件时,ORACLE会在文件头另加一个“Oracle OS Header Block”,用来保存有这个文件的逻辑块大小和文件块数等信息;而这个BLOCK就等于db_block_size

SQL> show parameter block

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_block_buffers                     integer     0

db_block_checking                    string      FALSE

db_block_checksum                    string      TRUE

db_block_size                        integer     8192

db_file_multiblock_read_count        integer     16

1008-8刚好等于1000K

那么,在RAW上创建的数据文件,是否也需要这额外的8K呢?答案是肯定的

刚才我创建16M不成功,我们尝试创建一个比16M少7K的数据文件试试

16M就是1024*16=16384k

比16M少7K即是=16377k

SQL> create tablespace testtbs datafile '/dev/rtest' size 16377k;

create tablespace testtbs datafile '/dev/rtest' size 16377k

*

ERROR at line 1:

ORA-01119: error in creating database file '/dev/rtest'

ORA-27042: not enough space on raw partition to fullfill request

Additional information: 1

Additional information: 1

依然提示空间不够

那么尝试创建比16M少8K的数据文件呢?

SQL> create tablespace testtbs datafile '/dev/rtest' size 16376k;

Tablespace created.

great!

结论

因在ORACLE上创建数据文件后,实际的DATAFILE大小将比创建命令中SIZE指定的大小要大一个db_block_size;所以尤其在RAW环境中,需要注意DATAFILE的SIZE要小于该LV的SIZE。

如果是普通vg,那么记得减去db_block_size和4K OFFSET后,才是您想要创建的DATAFILE大小;

如果是BIG VG(MKLV时使用了-T O参数使ORACLE从0开始读写的的情况下)和SCALABLE VG则无需计算这4K的偏移量,因为ORACLE不再SKIP 4K了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值