从ASM直接读取数据分为2种情况考虑
1.直接读取datafile文件
2.直接读取datafile中的objects
直接读取datafile文件的原理,目前MDATA和AMDU均实现了此功能
先从第一种从ASM中直接读取datafile的情况,这种case也是比较简单的。Datafile在文件系统中的单位是8k块为单位,在从数据字典中读取对象时候从对应的块地址可以直接读文件获取,因此文件系统中用mdata,dul等工具恢复对象的实现方式上虽然复杂,但是相比asm要简单不少,ASM也是一种文件系统,只是是封装的文件系统,普通的操作系统不能直接访问asm中的对象,必须通过asm,asm中构成asm文件的单位是au,因此datafile也是由多个au组成,而au是根据asm的条带大小和条带深度分部的,datafile只能存放于ASM 的DG中,不能跨DG,每个DG由1个或者多个disk组成,在DG中组成datafile的au是根据条带算法分部在dg里面的多个盘里的,因此需要从asm中恢复出datafile,需要知道au的分部情况,每个datafile包含au的地址范围。而ASM中dg的file directory(文件分配表)则可以读到此信息,因此只要找到对应文件的file dir就能找到对应asm file的au分布信息。有兴趣可以研究下asm的1号文件,每个文件在1号文件中都有4k的au 分布信息,1号文件至少为2个AU,海波写过一篇文章专门介绍过用c语言实现从asm中读取datafile,当然我看到的版本只处理30M au分布信息的file diretory(第一个AU),如果文件number超过256则需要在下一个au中读取相关文件的au分布信息。到这里恢复datafile已经不是什么大问题。
直接读取datafile中的objects的原理思路
这个会比较麻烦,用一句话提示吧,数据字典固定同时构建一份au分布信息表类似X$KFFXP。
拜读一下,哈哈