Oracle ASM 翻译系列第二十三弹:ASM Internal ASM files number 12 and 254

简介:

ASM files number 12 and 254

staleness directory是ASM元信息的12号文件,包含了可以把staleness registry中的槽位映射给特定磁盘和客户端的元信息。staleness registry是ASM元信息254号文件,当磁盘offline时,用于跟踪AU的状态。这两个特性适用于COMPATIBLE.RDBMS设置为11.1或以上且NORMAL或HIGH冗余模式的磁盘组。只有在需要时staleness元信息才会被创建,本身的内容大小会随着offline磁盘的增多而增长。

译者注:这里的客户端可以理解成数据库实例

 

当一个磁盘offline时,每个RDBMS实例都会从staleness registry中得到一个映射到该磁盘的槽位。这个槽位中的每一个比特位映射这个offline磁盘上的一个AU。当RDBMS实例对offline的磁盘发起写IO操作时,该实例会在staleness registry中修改对应的比特位。

 

当一个磁盘被online时,ASM会从冗余的extent中拷贝staleness registry比特位中记录的AU。因为只有offline时被改变过的AU会被更新,所以磁盘online操作的效率会高于该盘被drop并添加一块新盘的效率。


No stale disks

 

staleness元信息的结构在需要时会被创建,这意味着staleness directory和staleness registry在磁盘正常online时是不存在的。

SQL> SELECT g.name "Disk group",

 g.group_number "Group#",

 d.disk_number "Disk#",

 d.name "Disk",

 d.mode_status "Disk status"

FROM v$asm_disk d, v$asm_diskgroup g

WHERE g.group_number=d.group_number and g.group_number<>0

ORDER BY 1, 2, 3;

Disk group       Group#      Disk# Disk         Disk status

------------ ---------- ---------- ------------ ------------

DATA                  1          0 ASMDISK1     ONLINE

                                 1 ASMDISK2     ONLINE

                                 2 ASMDISK3     ONLINE

RECO                  2          0 ASMDISK4     ONLINE

                                 1 ASMDISK5     ONLINE

                                 2 ASMDISK6     ONLINE

SQL> SELECT x.number_kffxp "File#",

 x.disk_kffxp "Disk#",

 x.xnum_kffxp "Extent",

 x.au_kffxp "AU",

 d.name "Disk name"

FROM x$kffxp x, v$asm_disk_stat d

WHERE x.group_kffxp=d.group_number

 and x.disk_kffxp=d.disk_number

 and x.number_kffxp in (12, 254)

ORDER BY 1, 2;

no rows selected

Stale disks

 

Staleness信息在磁盘offline并且在针对该offline盘有写IO时会才被创建。

 

在下面的例子中,我会通过ALTER DISKGROUP OFFLINE DISK命令手动把一个磁盘offline。但是需要指出,staleness元信息的创建跟磁盘以何种方式何种原因offline无关。

SQL> alter diskgroup RECO offline disk ASMDISK6;

Diskgroup altered.

SQL> SELECT g.name "Disk group",

 g.group_number "Group#",

 d.disk_number "Disk#",

 d.name "Disk",

 d.mode_status "Disk status"

FROM v$asm_disk d, v$asm_diskgroup g

WHERE g.group_number=d.group_number and g.group_number=2

ORDER BY 1, 2, 3;

Disk group       Group#      Disk# Disk         Disk status

------------ ---------- ---------- ------------ ------------

RECO                  2          0 ASMDISK4     ONLINE

                                 1 ASMDISK5     ONLINE

                                 2 ASMDISK6     OFFLINE

 

数据库针对该磁盘组进行不断的写入,一会就可以观察到该磁盘组中已经创建了staleness directory 和 staleness registry。

SQL> SELECT x.number_kffxp "File#",

 x.disk_kffxp "Disk#",

 x.xnum_kffxp "Extent",

 x.au_kffxp "AU",

 d.name "Disk name"

FROM x$kffxp x, v$asm_disk_stat d

WHERE x.group_kffxp=d.group_number

 and x.disk_kffxp=d.disk_number

 and d.group_number=2

 and x.number_kffxp in (12, 254)

ORDER BY 1, 2;

     File#      Disk#     Extent         AU Disk name

---------- ---------- ---------- ---------- ------------------------------

        12          0          0         86 ASMDISK4

                    1          0        101 ASMDISK5

                    2          0 4294967294 ASMDISK6

       254          0          0         85 ASMDISK4

                    1          0        100 ASMDISK5

                    2          0 4294967294 ASMDISK6


Look inside

 

元信息中并没有很多有价值的信息,连kfed都无法分辨出这种类型元信息block。

$ kfed read /dev/oracleasm/disks/ASMDISK4 aun=86 | more

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                           21 ; 0x002: *** Unknown Enum ***

...

kffdnd.bnode.incarn:                  1 ; 0x000: A=1 NUMM=0x0

kffdnd.bnode.frlist.number:  4294967295 ; 0x004: 0xffffffff

kffdnd.bnode.frlist.incarn:           0 ; 0x008: A=0 NUMM=0x0

kffdnd.overfl.number:        4294967295 ; 0x00c: 0xffffffff

kffdnd.overfl.incarn:                 0 ; 0x010: A=0 NUMM=0x0

kffdnd.parent.number:                 0 ; 0x014: 0x00000000

kffdnd.parent.incarn:                 1 ; 0x018: A=1 NUMM=0x0

kffdnd.fstblk.number:                 0 ; 0x01c: 0x00000000

kffdnd.fstblk.incarn:                 1 ; 0x020: A=1 NUMM=0x0

kfdsde.entry.incarn:                  1 ; 0x024: A=1 NUMM=0x0

kfdsde.entry.hash:                    0 ; 0x028: 0x00000000

kfdsde.entry.refer.number:   4294967295 ; 0x02c: 0xffffffff

kfdsde.entry.refer.incarn:            0 ; 0x030: A=0 NUMM=0x0

kfdsde.cid:                       +ASMR ; 0x034: length=5

kfdsde.indlen:                        1 ; 0x074: 0x0001

kfdsde.flags:                         0 ; 0x076: 0x0000

kfdsde.spare1:                        0 ; 0x078: 0x00000000

kfdsde.spare2:                        0 ; 0x07c: 0x00000000

kfdsde.indices[0]:                    0 ; 0x080: 0x00000000

kfdsde.indices[1]:                    0 ; 0x084: 0x00000000

kfdsde.indices[2]:                    0 ; 0x088: 0x00000000

...

$ kfed read /dev/oracleasm/disks/ASMDISK4 aun=85 | more

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                           20 ; 0x002: *** Unknown Enum ***

...

kfdsHdrB.clientId:           1297301881 ; 0x000: 0x4d534179

kfdsHdrB.incarn:                      0 ; 0x004: 0x00000000

kfdsHdrB.dskNum:                      2 ; 0x008: 0x0002

kfdsHdrB.ub2spare:                    0 ; 0x00a: 0x0000

ub1[0]:                               0 ; 0x00c: 0x00

ub1[1]:                               0 ; 0x00d: 0x00

ub1[2]:                               0 ; 0x00e: 0x00

ub1[3]:                               0 ; 0x00f: 0x00

ub1[4]:                               0 ; 0x010: 0x00

ub1[5]:                               0 ; 0x011: 0x00

ub1[6]:                               0 ; 0x012: 0x00

ub1[7]:                              16 ; 0x013: 0x10

ub1[8]:                               0 ; 0x014: 0x00

...

除了一些比特位,没有太多有价值信息。

总结

staleness directory 和 staleness registry提供的元信息结构用来为ASM 11中引入的fast mirror resync新特性提供支持。staleness directory是ASM元信息12号文件,包含了可以把staleness registry中的槽位映射给特定磁盘和客户端的元信息。当磁盘offline时,staleness registry用于跟踪AU的状态。这个特性只在NORMAL或HIGH冗余模式的磁盘组中生效。


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

目录
相关文章
|
6月前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
316 2
|
18天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之使用JDBC方式读取Oracle的number类型时,通过什么方式进行映射
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
153 0
实时计算 Flink版产品使用合集之使用JDBC方式读取Oracle的number类型时,通过什么方式进行映射
|
6月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
|
Oracle 关系型数据库
Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法
Oracle中decode 以及ROW_NUMBER() OVER() 函数等其它相关函数用法
126 0
|
Oracle 关系型数据库 数据库
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
119 1
|
机器学习/深度学习 人工智能 Oracle
在Oracle中,TO_CHAR()、TO_NUMBER()和TO_DATE()函数的使用方法以及作用
在Oracle中,TO_CHAR()、TO_NUMBER()和TO_DATE()函数的使用方法以及作用
402 0
|
SQL Oracle 关系型数据库
Oracle-分析函数之排序后顺序号row_number()
Oracle-分析函数之排序后顺序号row_number()
98 0
|
SQL 移动开发 Oracle
Oracle中rownum和row_number()
Oracle中rownum和row_number()
723 0
|
21天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
139 64