Oracle ASM 翻译系列第三十弹:高级知识 Physical metadata replication

简介:

Physical metadata replication

从版本12.1开始,ASM会对某些物理元数据做一份复制,具体的说是每个磁盘的第一个AU(0号AU)上元数据。这意味着,ASM同时维护着两份磁盘头、FST(Free Space Table)表、AT(Allocation table)表的数据。需要注意的是ASM对这些数据采用的是复制(replicate),而不是镜像(mirror)。ASM镜像(mirror)意味着把一份数据,拷贝到不同磁盘上;而物理元数据的副本位于相同的磁盘,因此使用的术语复制(replicate)。这意味着在external冗余的磁盘组中,物理元数据也会被复制。

PST也是物理元数据,但是ASM是通过镜像,而不是复制来提供数据保护。因此只有在normal和high冗余的磁盘组中,PST表存在数据的冗余。

Where is the replicated metadata

物理元数据位于每块ASM磁盘的0号AU。元数据复制的特性打开后,ASM会把0号AU的内容拷贝到11号AU,然后同时维护这两份副本。创建磁盘组时如果指定或修改了一个已经存在的磁盘组的compatibility属性为12.1及以上,该特性会自动被打开。

当提升ASM compatibility属性值为12.1及以上时,如果11号AU有数据,ASM将把这些数据移动到别处,然后将物理元数据复制到11号AU。

从版本11.1.0.7开始,ASM在1号AU的倒数第二个块维护了一份磁盘头的副本。在版本12.1中,ASM仍然维护着这个副本数据。也就是说,现在每个ASM磁盘,有磁盘头的三个副本。

Disk group attribute PHYS_META_REPLICATED

通过查询磁盘组的属性PHYS_META_REPLICATED可以确认物理元数据复制的状态。比如下面这个例子:

$ asmcmd lsattr -G DATA -l phys_meta_replicated

Name Value

phys_meta_replicated true

phys_meta_replicated值为true意味着磁盘组DATA的物理元数据已经做了复制。

ASM磁盘头的fdhdb.flags条目指代了物理元数据的复制状态:

· kfdhdb.flags = 0 -- 元数据没有复制

· kfdhdb.flags = 1 -- 元数据已经复制完毕

· kfdhdb.flags = 2 -- 元数据在复制过程中

一旦kfdhdb.flags被设置为1,就再也不会回到0.

Metadata replication in action

如前面所述,在ASM兼容性设置为12.1或更高的磁盘组中,物理元数据会做复制。 下面通过两个例子来验证前面的结论:

1. 磁盘组的ASM兼容性设置为12.1:

$ asmcmd lsattr -G DATA -l compatible.asm

Name Value

compatible.asm 12.1.0.0.0

$ asmcmd lsattr -G DATA -l phys_meta_replicated

Name Value

phys_meta_replicated true

这里显示物理元数据已经被复制。下面确认该磁盘组里的所有磁盘kfdhdb.flags被设为1:

$ for disk in `asmcmd lsdsk -G DATA --suppressheader`; do kfed read $disk | egrep

"dskname|flags"; done

kfdhdb.dskname: DATA_0000 ; 0x028: length=9

kfdhdb.flags: 1 ; 0x0fc: 0x00000001

kfdhdb.dskname: DATA_0001 ; 0x028: length=9

kfdhdb.flags: 1 ; 0x0fc: 0x00000001

kfdhdb.dskname: DATA_0002 ; 0x028: length=9

kfdhdb.flags: 1 ; 0x0fc: 0x00000001

kfdhdb.dskname: DATA_0003 ; 0x028: length=9

kfdhdb.flags: 1 ; 0x0fc: 0x00000001

可以看到所有磁盘的kfdhdb.flags都被设为1,也就是该磁盘组里所有的磁盘都做了物理元数据复制。

1. 我们来看下磁盘组的ASM compatibility为11.2,然后提升至12.1会是什么情况:

SQL> create diskgroup DG1 external redundancy

2 disk '/dev/sdi1'

3 attribute 'COMPATIBLE.ASM'='11.2';

Diskgroup created.

看一下复制的状态:

$ asmcmd lsattr -G DG1 -l phys_meta_replicated

Name Value

可以看到,由于ASM兼容性低于12.1,没有physmetareplicated特性。下面通过kfed查看kfdhdb.flags参数,按照之前的结论,值应该为0:

$ kfed read /dev/sdi1 | egrep "type|dskname|grpname|flags"

kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD

kfdhdb.dskname: DG1_0000 ; 0x028: length=8

kfdhdb.grpname: DG1 ; 0x048: length=3

kfdhdb.flags: 0 ; 0x0fc: 0x00000000

现在把ASM兼容性修改到12.1:

$ asmcmd setattr -G DG1 compatible.asm 12.1.0.0.0

确认下复制的状态:

$ asmcmd lsattr -G DG1 -l phys_meta_replicated

Name Value

phys_meta_replicated true

物理元数据做了复制,所以kfdhdb.flags应该设置为1:

$ kfed read /dev/sdi1 | egrep "dskname|flags"

kfdhdb.dskname: DG1_0000 ; 0x028: length=8

kfdhdb.flags: 1 ; 0x0fc: 0x00000001

物理元数据应该被复制到11号AU:

$ kfed read /dev/sdi1 aun=11 | egrep "type|dskname|flags"

kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD

kfdhdb.dskname: DG1_0000 ; 0x028: length=8

kfdhdb.flags: 1 ; 0x0fc: 0x00000001

$ kfed read /dev/sdi1 aun=11 blkn=1 | grep type

kfbh.type: 2 ; 0x002: KFBTYP_FREESPC

$ kfed read /dev/sdi1 aun=11 blkn=2 | grep type

kfbh.type: 3 ; 0x002: KFBTYP_ALLOCTBL

这里显示11号AU中有了一份0号AU的数据副本。

最后确认下1号AU中的磁盘头副本:

$ kfed read /dev/sdi1 aun=1 blkn=254 | grep type

kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD

结果显示在1号AU的倒数第二个块中存在一份磁盘头副本。

Conclusion

12版本的ASM会把0号AU的数据在相同磁盘的11号AU做一份复制。这种特性可以让ASM在磁盘的0号AU发生数据损坏时,自动恢复数据。需要注意的是,在external冗余的磁盘组中,如果是物理元数据以外的数据发生丢失,ASM都不能做恢复。在normal冗余的磁盘组中,一个failgroup中的一块或多块磁盘有任何的数据丢失,ASM都可以做恢复。在high冗余的磁盘组中,任意两个failgroup中的一块或多块磁盘有任何数据丢失,ASM都可以做恢复。

本文来自云栖社区合作伙伴“DBGEEK”

目录
相关文章
|
2月前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
30 2
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
89 0
|
2月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
|
5月前
Oracle-高级子查询
Oracle-高级子查询
26 0
|
11月前
|
SQL XML Oracle
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(下)
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(下)
|
11月前
|
SQL XML Oracle
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(中)
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(中)
|
11月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(上)
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作(上)
|
Oracle 关系型数据库 OLAP
Oracle:一篇文章理解model高级语句
Oracle 高级语句model的概念和基本用法,对数据仓库有了解,想要在数据库上实现数据仓库功能的可以看看
273 0
|
SQL Oracle 关系型数据库
Oracle ASM磁盘和磁盘组的常用SQL语句
Oracle ASM磁盘和磁盘组的常用SQL语句
191 0
|
文字识别 Oracle NoSQL
oracle 11g 单机asm配置
oracle 11g 单机asm配置
487 0

推荐镜像

更多