love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

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

oracle asm剖析系列(7)–Active Change Directory

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: oracle asm剖析系列(7)–Active Change Directory

到这里为止,关于asm 的系列文章已经写了6篇,在这篇文章中将介绍Active Change Directory的结构。
何为ACD?大家如何把asm实例也看成一个微型的数据库实例的话,那么ACD信息,就好比是redo。换句话
将,ACD里面的信息,记录了asm的所有元数据block的操作记录。当然,有这个的好处是什么呢?

其实你可以想象,数据库实例中,如果实例crash掉,那么还可以借助redo去进行instance recover。
这里针对asm而已,ACD的功能有异曲同工之妙。

这里需要说明的是,每一个asm实例,都用有其自己的ACD目录,换句话讲,如果你是双节点的rac,那么就有84m的ACD 目录信息。
如下是来自的的vm 11gR2 rac环境信息:

我这是2个节点的rac,即有2个asm,所以这里file 3所占据的au extent为84个。

我们使用kfed来读取元数据,首先定位到active change directory 所在AU :

从上面信息可以看出,ACD元数据和数据应该包含在其中一个AU 149中,如下:

通常来讲,一个block是元数据,而后面的block就是实际数据了。继续读取Active change directory data:

其他ACD 所在的AU也是一样,所以这里我以上面kfed的数据为例,进行剖析。首先我们先来看ACD 元数据.
我们可以看到,active change directory元数据,就2个部分;

我们接着来分解ACD data的结构,其结构主要分为如下部分:

上面有部分信息,我目前也不清楚具体的含义,只能猜测个大概。从上面我们所了解的信息来看,当asm实例
在对元数据进行变更以后,会将更改前的信息写入到ACD 数据中,而ACD data中记录了哪些数据呢?
主要是记录了这样一些数据:线程号,block号,opcode,sequences,记录长度等信息。

这样,当你处于运行的asm实例,突然crash后,那么重启asm实例以后,asm可以根据ACD信息去进行”instance recover”,
从而保证能够正常启动asm实例。

到这里,大家或许有个疑问,既然asm 中也有类似数据库实例的redo机制?那么是否存在类似undo的机制呢?后面会描述。

最后我们通过strace asm相关进程,来观察下相关的操作,已验证前面的提到的内容:

通过strace lgwr进程,你可以看到lgwr进行会更新ACD信息,通过上面的offset转换,你可以发现4194304其实就是au 4,
这就是说,lgwr进程更新了au 4,blk 0里面的信息,即就是ACD metadata。

如下是au 4,bllock 0在我进行操作前后的对比,通过resize 一个datafile离开进行观察:

可以看到,其实变化的地方也就只有ckpt信息.(check等信息属于hash值,每隔3s都会更新一次)
在strace 进程的同时,我也跟踪了asm_dbw0进程,其trace信息如下:

通过offset 49291264,可以看出dbwr0进程是在更新au 47的前面2个block,这里通过kfed来观察一下。

从上面输出信息可以看出,asm_dbwr0进程会更新COD信息,这也将是我们下一篇内容的主题。

最后简单总结一下:

1. Active change dictectory,也就是asm元数据file 3,一共占据42个AU 大小,简称ACD. 每个asm实例对应一份ACD信息,
换句话讲,你是双节点asm rac,那么就有84M的ACD数据,以此类推.(事实上不管你AU是多大ACD的信息都是固定的大小)
2. asm中ACD就类似数据库实例中的redo,记录asm元数据操作记录,以便于asm crash后进行instance recover.
3. ACD信息所在AU,第一个block是其元数据,后面的block是data信息.
4. ACD data的数据,跟redo的结构有点类似,里面记录的也是thread,sequence,len,opcode等信息.
5. ACD 数据的变化是通过asm lgwr进程来完成的,该进程跟数据库实例的lgwr进程类似,也存在一个3s check的机制。

Leave a Reply

You must be logged in to post a comment.