人生就是如此
===========================================================
如何让oracle从raw device的offset 0开始使用
===========================================================
在有些平台下,raw device的第一个block是control block,记录了一些系统信息,这会使得oracle不能使用这个block,一方面在dd文件的时候我们需要知道这个block多大从而skip这个block,另一方面这可能给oracle带来一定的产生坏快的可能。

比如AIX下control  block 为4k,则当我们在LVM中做了stripe ,假定为64k,而oracle的block我们假定使用8k,则oracle实际使用的raw device从 offset 4k开始,也就是说,在条带化的第一个磁盘的64k中只能容纳7*8+4 个block(64k -  4k = 60k),这样将有一个oracle block 跨越在两块磁盘之间。由于control  block的存在,使得oracle在每一个stripe  size 的磁盘单元上都会有一个 1/2  oracle block。这样一方面固然对性能有一些影响,另一方面更重要的是oracle block在io的时候跨越在多个磁盘上,这时如果掉电,就可能使得正在写入的这种oracle  block不一致(一块磁盘完成另一块没完成)。 如果恰好是system 表空间的重要block,则数据库将无法启动。

由此看来,若 control  block 小于oracle  block,或者不是oracle block的整数倍,再结合有些大小的stripe  size ,则可能造成这个问题。在AIX  lvm 中,创建vg若是 big  vg,则可以通过 -T O 参数在其中创建LV,这样在lv头部就不存在control  block。从而避免这个问题。

参考如下:

mkvg     -B  -s 32M  -y dbvg01  hdisk10 hdisk11 hdisk12 ...

mklv -y ocn_128m_01 -T O  -S 64k  -C 4  -t raw   dbvg01  4
mklv -y ocn_128m_03  -S 64k  -C 4  -t raw   dbvg01  4

我们在两个raw device上都创建spfile:

 create  pfile='/opt/oracle/oradata/ocndb/test10'   from  spfile='/dev/rocn_128m_01';

 create  spfile='/dev/rocn_128m_03'  from    pfile='/opt/oracle/oradata/ocndb/test10' ;

我们通过dd来看前面4k的内容

下面是没有使用  -T O (注意这个大写的O而不是数字0),这样前面4k记录了control  block 信息

dd if=/dev/rocn_128m_03  bs=4096 count=1|more
AIX LVCBraw00c07fec00004c0000000103ocn_128m_03Thu May  5 14:15:18 2005
Thu May  5 14:15:18 2005
07FEC4C00nxms^P^P^ANone^P^Q82c666fc.114
+Standard input: END0 records in.
1+0 records out.

下面是使用了 -T O 创建的lv,前面4k就已经是记录了 spfile信息,没有control  block信息。

dd if=/dev/rocn_128m_01 bs=4096 count=1|more
^E^B^B^Ci!:a,*.background_dump_dest='/opt/oracle/admin/ocndb/bdump'
*.compatible='9.2.0.0.0'
*.control_files='/opt/oracle/oradata/ocndb/control01.ctl','/opt/oracle/oradata/ocndb/control02.ctl'
*.core_dump_dest='/opt/oracle/admin/ocndb/cdump'
*.db_block_size=8192
*.db_cache_size=8589934592
*.db_domain='db.alibaba.com'
*.db_file_multiblock_read_count=16
*.db_name='ocndb'
*.fast_start_mttr_target=300
*.hash_join_enabled=TRUE
*.instance_name='ocndb'
*.java_pool_size=20971520
*.large_pool_size=52428800
*.open_cursors=300
*.pga_aggregate_target=4395630592
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_pool_size=524288000
*.sort_area_size=524288
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/opt/oracle/admin/ocndb/udump'

+Standard input: END0 records in.
1+0 records out.

bitirainy 发表于:2005.05.05 17:14 ::分类: ( Oracle is anything ) ::阅读:(1169次) :: 评论 (2)
[回复]

biti,

Rejoice999的大作《在UNIX裸设备和文件系统之间移动ORACLE》中提到的:
UNIXOS Reserved Size

HP-UX0

可是除了spfile,象dbf,ctl,redo日志oracle分配了control block,见metalink:146384.1

因为经常可以看到您的“钻研”结果,所以不知道能否解释一下这个问题应该如何理解(同是raw的情况下,spfile为什么不同于其他)

samson 评论于: 2005.05.08 16:13
[回复]

oracle file first block 是给os预留的,用于平台识别用的。在10g中跨平台迁移,其中一个重要部分就是修改这个block。 spfile的问题,我想是因为仅仅因为其是一个普通的文本文件而已,oracle认为没必要区别平台。

因为不同平台文件 高低位字节顺序可能不一样,而spfile很容易重新建立,这也许也是一个原因?

biti_rainy 评论于: 2005.05.09 00:20

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)




切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
Blog信息
网站链接...