作者:李向辉 擅长oracle数据库性能分析、诊断、优化及故障处理 /**!!!!转载请注明出处
qq:654268465 tel:18092015108
本文讲述FST元数据简介及损坏后的影响及对应修复方法
FST 简介:
FST和ASM磁盘头块一样属于ASM的物理元数据信息,FST(Free Space Table)信息存储在ASM磁盘头块的后一个块中,也就是AU0 blk1中。我们都知道ASM磁盘头损坏后会导致asm磁盘组无法mount,数据库实例也就无法正常启动,关于磁盘头的修复网上参考的信息也很多(11g针对磁盘头块的修复也提供了自动修复命令)。那么对于FST这部分信息损坏后会有什么样的结果,以及如何修复这部分,下面进行一步步的模拟损坏、损坏后的结果及修复过程。
FST 损坏模拟及损坏结果:
模拟之前我们首先检查下我们的磁盘组及磁盘信息,可以看出磁盘组 DATA 状态是 OK 的。
如果某个 ASM 磁盘损坏了前 8k , 那么除了磁盘头损坏外 FST 也随之损坏了, 实验我们
将 ASM 实例关闭后通过 dd 命令只将 ASM 磁盘 /dev/asm-diskd 的 FST 信息清空, 然后启动
ASM 实例和数据库
随后 ASM 实例和数据库均正常启动没有报错,但当在数据库实例执行数据文件 resize
操作后发现 DATA 磁盘组立即被 dismount
FST 损坏修复思路:
我们修复方法采用将同一个磁盘组中的另一个磁盘 /dev/asm-diske 的 FST 信息复制一份
并修改相应位置的信息,然后 dd 到 /dev/asm-diskd 的 FST 位置
FST 损坏修复方法:
首先将 /dev/asm-diske 的 FST 信息 dd 出来, 然后使用 bbed 进行修改
bbed 将 offset 8 的 01 改成 00 表示是这个磁盘组的第 1 个磁盘
将修改后的文件 dd 回 /dev/asm-diskd 的 fst 位置 ,mount DATA 磁盘组并启动数据库
启动数据库再次 resize 发现报错,此时我们根据错误信息再次修改 diske_fst.out 文件的
相应信息 ( 把 2187368565 修改为 2187368564) , 并写入到 /dev/asm-diskd 的 FST 位置并再次
mount DATA 磁盘组
再次启动数据库,再次执行数据文件的 resize 操作发现不再报错,磁盘组也没有 dismount
掉, 说明修复成功。
总结:
实际这个修复过程并不完美,因为 FST 中还包括 AT 块的条目信息,同一个磁盘组中的
不同磁盘的 AT 块条目信息还是有一些区别的,不过这个 AT 块条目信息的修复要结合 AT 块
中的实际信息来修复,实际处理起来也非常耗时,实际意义不大。 我们这个模拟修复过程主
要是防止 ASM 磁盘因数据文件自动扩展和数据库一些与数据文件空间相关的递归 sql 操作而
导致磁盘组 dismount 掉,这个修复过程对于 asm 磁盘故障后抽取其中的数据来说已经足够
了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16807927/viewspace-2215799/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16807927/viewspace-2215799/