作者:李向辉 擅长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
磁盘故障后抽取其中的数据来说已经足够
了。
