首页 > 代码库 > aix5.3系统安装oracle 10g使用裸设备--4k偏移量问题

aix5.3系统安装oracle 10g使用裸设备--4k偏移量问题

今天朋友在aix 5.3系统上安装oracle 10g 建库是用裸设备时候,dbca建库到2%报错退出,观察alert日志发现是temp表空间空间不足导致。查看该表空间数据文件所在的裸设备容量为512M,建库时候给出的数据文件大小也是512M。也许是因为aix系统以1000进制计算,而oracle数据库计算容量是以1024进制导致差距,随即将oracle数据文件大小改为500M,则正常通过。

但是,在alert日志中不断爆出warning提示:WARNING: You are creating datafile /dev/temp01. 
WARNING: Oracle recommends creating new datafiles on devices with zero offset. The command "/usr/sbin/mklv -y LVname -T O -w n -s n -r n VGname NumPPs" can be used. Please contact Oracle customer support for more details。通过查询资料以及朋友的帮助,终于找到了问题原因并得到解决方法。

AIX在创建vg时有3中vg类型可选,分别是 Original Volume Group,Big Volume Group和Scalable Volume Group 
对于普通的VG(Original Volume Group),不管你使用什么命令创建lv,都是普通的DS_LV类型的LV。 
对于Big VG,是唯一允许同时存在这两种LV类型的VG,如果我们指定-T O(注意,这里是大写的字母O),则创建DS_LVZ类型的LV,否则,创建普通类型的LV。如 
/usr/sbin/mklv -y LVname -T O -w n -s n -r n VGname NumPPs。 
对于Scalable-type VG类型的VG,不管你使用什么方式的命令创建lv,都是扩展的DS_LVZ类型的LV。 
由Oracle的警告日志可以看出,Oracle 使用raw设备时,建议设置不带4k的lv。

AIX将这4k偏移量称之为lvcb(logical volume control block),它将占用4k的前512个字节,它类似于Oracle数据文件头,保留有lv的创建时间,镜像拷贝信息,文件系统挂载点等。

从2个方面可以查看lv是否有4k偏移量 
1、主机层面 
没有4k偏移量: 

引用

#lslv jfkdb_2G_044 
LOGICAL VOLUME: jfkdb_2G_044 VOLUME GROUP: jfk_dbvg_01 
LV IDENTIFIER: 00c3dff400004c00000001217a9d839e.84 PERMISSION: read/write 
VG STATE: active/complete LV STATE: closed/syncd 
TYPE: raw WRITE VERIFY: off 
MAX LPs: 1024 PP SIZE: 32 megabyte(s) 
COPIES: 1 SCHED POLICY: parallel 
LPs: 64 PPs: 64 
STALE PPs: 0 BB POLICY: relocatable 
INTER-POLICY: maximum 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


有4k偏移量: 

引用

[root@jfk_p560q /]# lslv jfkdb_2G_044 
LOGICAL VOLUME: jfkdb_2G_044 VOLUME GROUP: jfk_db_vg01 
LV IDENTIFIER: 00ce76de00004c00000001134ee6bc51.84 PERMISSION: read/write 
VG STATE: active/complete LV STATE: opened/syncd 
TYPE: raw WRITE VERIFY: off 
MAX LPs: 1024 PP SIZE: 32 megabyte(s) 
COPIES: 1 SCHED POLICY: parallel 
LPs: 64 PPs: 64 
STALE PPs: 0 BB POLICY: relocatable 
INTER-POLICY: maximum RELOCATABLE: yes 
INTRA-POLICY: middle UPPER BOUND: 16 
MOUNT POINT: N/A LABEL: None 
MIRROR WRITE CONSISTENCY: on/ACTIVE 
EACH LP COPY ON A SEPARATE PV ?: yes 
Serialize IO ?: NO


(2)Oracle层面: 
Oracle提供了一小工具dbfsize(在$ORACLE_HOME/bin下)用于观察lv是否有4k偏移量 
无4k偏移量: 

引用

$ dbfsize /dev/rlvsysaux_1g 

Database file: /dev/rlvsysaux_1g 
Database file type: raw device without 4K starting offset 
Database file size: 40960 8192 byte blocks


有4k偏移量: 

引用

[oracle@jfk_p560q /dev]$ dbfsize /dev/rjfkdb_2G_054 

Database file: /dev/rjfkdb_2G_054 
Database file type: raw device 
Database file size: 262016 8192 byte blocks



如果数据库使用block size为16k,创建跨pv带有4k偏移的lv,条带块大小为64k。这样将导致第4个block横跨2个pv(条带化操作,把lvcb也计算进条带块中)。这样会导致 
条带块的第4个Oracle block跨磁盘,撇开性能方面考虑,如果系统异常宕机,或者存储异常宕机,极易引起数据库块损坏,引起ora-01578错误。(metalink ID 261460.1) 

引用

$ oerr ora 01578 
01578, 00000, "ORACLE data block corrupted (file # %s, block # %s)" 
// *Cause: The data block indicated was corrupted, mostly due to software 
// errors. 
// *Action: Try to restore the segment containing the block indicated. This 
// may involve dropping the segment and recreating it. If there 
// is a trace file, report the errors in it to your ORACLE 
// representative.

 

也就是说,使用Original Volume Group时候无法通过参数来取消4k offerset,唯一的办法就是将oracle数据库db_block_size设置为4k。(不推荐使用)

而使用big VG的时候,可以通过创建LV加入-T -O参数来实现创建DS_LVZ类型的LV,从而取消前面4K的偏移量。(但传说big vg有已知的bug,顾不推荐使用)。

而Scalable-type VG类型的VG,无论如何创建LV都是不带4K偏移量的,且支持的pp更多,支持单个文件容量最大。(强烈推荐使用)


本文出自 “文化流氓的DBA生活” 博客,转载请与作者联系!

aix5.3系统安装oracle 10g使用裸设备--4k偏移量问题