Phone:18180207355 提供专业Oracle&MySQL数据恢复、性能优化、迁移升级、紧急救援等服务

今天有朋友问11g中asm 的au size不为1m的情况下,datafile的au 分布是怎么样的?通过10g的方式去kfed read,
发现不对了,原帖地址:~~【高手请进】在oracle11g中通过kfed找到ASM AU空间分布信息?

下午花了一点时间研究了一下,其中还有些没有明白,不过基本上搞清楚了,下面是简单的实验过程:

开始我也没明白其中的关系,首先尝试用strace 去跟踪amdu的过程,我们知道amdu是可以直接抽取datafile的,开始
我是这样想的:既然amdu在读取asm disk的时候,可以直接将文件读取出来,那么也就比如需要现在知道该datafile的
au 分布情况,于是我使用strace 进行跟踪,完全没有搞明白,如下:
命令如下:strace -o amdu.log amdu -dis ‘/dev/sdb’ -extract data2.256
其中产生的部分log信息如下:

首先来看看statfs部分:

纠结了一段时间,上面的东西,看的眼睛都花了,也没有搞清楚是怎么一个具体的关系,无奈又回到老方法上去。

使用kfed 读取disk au信息:

很多人不明白,11g里面,让au size不是1m的情况下,通过去看aun=2,发现对于的au分布是不对的,其实很简单。
我们这里要注意上面的kfdatb10.auinfo[0].link.next: 8 ; 0x008: 0x0008
开始我也不清楚这里是什么意思,我猜测11g应该是在10g的基础上进行扩展,那么也就是说整体结构应该不会变化。
换句话说,也就是这个link.next 也就是下一个对于的AU,我们应该到这个AU里面去找对应的分布。

由于我们前面的test datafile的asm number是256,所以我们直接看第256个即可,这里需要注意一点的是,
对于我这里4m的au size,每个au是可以容纳1024个block的,跟以前1m的情况是不同的。

下面我们再来看看au size为8m和16m的情况。

创建test表空间;

我们可以看到对于这两个磁盘组,datafile对应的asm file number都是从256开始的。

首先我们来看data2 磁盘组上的test表空间datafile的au 分布,如下:

这里有点奇怪的是,我们从au 8去定位,发现报错,知道是不是oracle这里有些问题。如下:

或许是因为我开始也使用了这些AU,然后将其drop,又重建表空间,且分配的空间是一样大。
但是我能够在next的au 里面找到对应的datafile 的au分布情况,如下:

接着我们再来看看data3 磁盘组上的,test1 表空间datafile的分布情况:

下面我们来查下x$表,看au的分布查询对否:

可以看到,我们前面kfed的操作是正常的,test 表空间占据13,14,15 一共3个AU,每个au为8m。
test1表空间一个占据2个AU,每个au大小是16m。

这里要说明一下:asm这里都是以au分配为单位,也就是说最小分配都是一个AU,换句话说也就是AU的整数倍,
我前面的datafile都是20m,所以针对8m和16m的AU SIZE来讲,分配需要分配3个和2个。

下面我们将test 表空间的datafileresize一下,来看一个有趣的事情:

我们可以看到,这里oracle仅仅是增加了一个AU,开始我们是20m,au为8m,所以oracle应该分配3个,
或许有人会说,这里又增加了10m,那么oracle应该再分配2个au才对啊。 你可以看到oracle这里并不
是这样的,可见其是多么的聪明!

    分享到:
  • Dexter Ren Jl

    我等只能仰望了~

  • Dong_2

    过了多久就能超老盖了

  • Mfkqwyc86

    爱研究的人,牛

18180207355
加Q咨询