深入内核:从Oracle ASM自动备份头块到ASMFD

张乐奕

云和恩墨副总经理 Oracle ACE 总监

ITPUB Oracle数据库管理版版主、Oracle高可用版版主、ACOUG联合创始人

在 Oracle 10.2.0.5 之前,ASM 磁盘的头块并没有自己的备份,因此一旦头块损坏,如果没有以前 kfed read 备份出来的信息,也就没有办法使用 kfed merge来作头块恢复,特别是如果一个磁盘组中所有的磁盘头块都出现问题(比如被人为地创建了 PV ),恢复 ASM 磁盘头块的操作就会非常麻烦。

但是从 Oracle 10.2.0.5 之后,ASM 磁盘的头块会自动备份在另外一个块中,这实际上是 Oracle 11g 出现的功能,不过经过测试,在 Oracle 10.2.0.5 版本中,这个备份也是存在的

正是因为存在这个备份,所以 Oracle 10.2.0.5 之后的 kfed 程序才有了新的 repair 命令,该命令将备份块直接覆盖到磁盘头块,完成修复工作。

在 Oracle 10.2.0.4 中,如果尝试执行 kfed repair ,则会报错说命令行参数不正确,此报错说明并不存在 repair 命令:

但是在 Oracle 10.2.0.5 中,执行 kfed repair ,则会说无法打开文件空,而这正说明 repair 命令是存在的,报错是因为还需要明确指定要修复哪块磁盘:

那么这个备份块具体存在哪里呢?在 Solaris 下的测试,我们使用truss来进行跟踪。

在 trace 文件中,找到下面这段,可以明确地看到 kfed 程序从第 510 个块中读出 4096 字节,然后再写回到第 0 个块中。

同样如果是在 Linux 下用裸设备作为 ASM 磁盘,并且用 strace 进行 repair 命令的跟踪,也可以得到类似结果。

那么通过 kfed 命令再来验证一下这两个块是否都标志为头块。验证结果表示块类型都为 DISKHEAD 。

那么下一个疑问是,在 11gR2 以后,ASM 磁盘组的 AU Size 可以指定不同的大小,是不是不同的 AU Size 下的磁盘头块备份都是在第 510个 块呢?还是用 truss 来跟踪一下,这里的 vdisk3 属于一个 AU Size=8M 的磁盘组,此时repair命令需要明确指定 aus,否则会报 KFED-00320 错误。

在 trace 文件中,可以发现已经不再是去读第 510 个块,而是改为读第 4094 个块。

用 kfed 验证第 4094 个块,确实标志为 DISKHEAD。

那么也就是 AU 1M 的磁盘组头块备份在第 510 个块上,而 AU 8M 的磁盘组头块备份在第 4094 个块上,备份块的存储位置有规律吗?有的,始终保存在第 2个AU 的倒数第 2 个块上。下面来验证这个观点。

对于默认的磁盘组, AU Size=1M ,每个 AU 中可以存储 256 个块,块号为 0-255 。第 1 个 AU 存储 256 个块,第 2 个 AU 最后 1 个块号为 255,倒数第 2 个块号是 254,也就是整体的第 510 个块(从第 1 个 AU 的第 1 个块往后算起)。

对于 AU Size=8M 的磁盘组,每个 AU 可以存储 2048 个块,块号为 0-2047 。第 1 个 AU 存储 2048 个块,第 2 个 AU 最后 1 个块号为 2047 ,倒数第 2 个块号是 2046 ,也就是整体的第 4094 个块(从第 1 个 AU 的第 1 个块往后算起)。

对于其它 AU Size 磁盘组的验证,看到文章的朋友有兴趣可以自己做一下。

结论

从 Oracle 10.2.0.5 开始, ASM 磁盘已经开始自动将头块进行备份,备份块的位置在第 2 个 AU 的倒数第 2 个块上(对于默认 1M 的 AU 来说,是第 510 个块),如果头块损坏,可以用 kfed repair 命令来修复。因此对于选用 ASM 存储作为生产环境的用户来说,尽快升级到 10.2.0.5 是明智的选择。

在 Oracle 12c 中,Oracle更是推出了 ASMFD 新特性,防止ASM磁盘收到意外的伤害.

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-03-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

IP地址的分类——a,b,c 类是如何划分的【转】

IP地址,一共分成了5类,范围分别如下: A类IP:从0.0.0.0 – 127.255.255.255,共有16777216个IP B类IP:从128.0...

1164
来自专栏架构师之路

高并发的常见应对方案

一、关于并发 我们说的高并发是什么? 在互联网时代,高并发,通常是指,在某个时间点,有很多个访问同时到来。 高并发,通常关心的系统指标与业务指标? QPS:每秒...

5747
来自专栏Java架构沉思录

深入浅出Unix IO模型

在介绍Unix IO模型之前,我们先来说说什么是IO。根据维基百科的定义,IO的指的是输入输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出...

1042
来自专栏深度学习计算机视觉

Performance Testing as aService for Web Applications

1、成员组成 (1)组长:张俊怡 (2)组员:孟令军 2、文献基本情况介绍 (1)文献名称:Performance Testing as aService f...

3105
来自专栏Ksher

Kubernetes服务网格(第10部分):服务网格API

翻译人:Ksher,该成员来自云+社区翻译社

20310
来自专栏云计算教程系列

如何在CVM上安装R

R是一种开源编程语言,专门用于统计计算和图形绘制。R在统计的基础下,被广泛用于开发统计软件和数据分析。R是一种日益流行且可扩展的语言,拥有活跃的社区,为特定的研...

1894
来自专栏杨海春的专栏

常用机器性能评估工具

软件系统跑在机器上,处理能力受硬件制约,所以,单机处理能力会有上限。评估机器处理能力的上限,检查程序的瓶颈在哪,有助于程序性能分析。主要的几大硬件:CPU、内存...

5940
来自专栏Debian社区

Debian升级内核开启TCP_BBR 实现网络单边加速

自从锐速发布以来,这款牛逼的单边加速神器的确为一些线路不太优秀的服务器带来了更优秀的体验。但是呢,过高的价格和不再低端售卖。导致了我们并无法实现一个免费好用的单...

1842
来自专栏漫漫全栈路

ASP.NET MVC学习笔记01初始

技术栈跳来跳去,最后还是选择回归最初。从Asp.Net的WebFrom到PHP到Python的Django,最后还时回到了最熟悉的.net平台。三层之前只做过...

3546
来自专栏ATYUN订阅号

RNN示例项目从开发到部署(三):在AWS上部署深度学习模型

虽然我很喜欢为自己建立数据科学和编程项目,但我同样乐于与世界上的任何人在线分享它。幸好,我们以使用AWS(Amazon Web Services),这样我们可以...

1213

扫码关注云+社区