Oracle ASM 翻译系列第七弹:高级知识 How many partners?

How many partners?

ASM的数据冗余机制是通过将extent的镜像副本复制到同一磁盘组不同failgroup的磁盘上来实现的,这个磁盘被称为partner磁盘。在11GR2版本,一个冗余(Normal,High)的磁盘组,每一个ASM磁盘最多可以拥有8个partner磁盘,而在11GR2版本之前每一个磁盘最多拥有10个partner。在external冗余方式的磁盘组内既没有failgroup,磁盘之间也没有partner关系。

译者注:1)其实外部冗余的磁盘组每一个磁盘也会分配一个独立failgroup的名字,可以通过查询视图v$asm_disk查看到,但是它并不具有真实的意义。2)可以通过隐含参数_asm_partner_target_disk_part来调整partner的数量,但是译者还实在没想到理由去这么做。

如果一个normal冗余的磁盘组拥有两个磁盘,它们之间就是partner关系。所有在磁盘0上的extent都在磁盘1上有镜像副本,反之亦然,这种情况下,每个磁盘有一个partner(互为partner)。

如果一个normal冗余的磁盘组拥有三个磁盘,同时没有手工指定failgroup的情况下,每个磁盘将拥有两个partner。磁盘0与磁盘1、2有partner关系,磁盘1与磁盘0、2有partner关系,磁盘2与磁盘0、1有partner关系。当有一个extent分配到磁盘0时,它的镜像副本将被分配到磁盘1或者2,但是不是两者都有,注意,一个normal冗余的磁盘组内每个extent只有两份镜像副本,而不是三个。同理,磁盘1上的一个extent,它的镜像副本会在磁盘0或磁盘2上,磁盘2上的一个extent会有一个镜像副本在磁盘0或磁盘1,整个分配方式还是比较简单清晰的。

译者注:如果是元数据的extent,会在Normal冗余的磁盘组上有三份副本,当然假如failgroup的数量大于等于三。

由3个磁盘组成high冗余磁盘组的情况与此类似。磁盘间的parnter关系与上一段所述的3个磁盘组成normal冗余磁盘组完全一致。不同点在于镜像级别,磁盘0上的每个Extent会在parnter磁盘即磁盘1和磁盘2上都有镜像副本。磁盘1上的每个Extent也是一样的,在磁盘0和磁盘2上都有镜像副本。磁盘2上的extent在磁盘0和磁盘2上都有镜像副本。

如果一个normal冗余的磁盘组有很多磁盘,那么每个磁盘最多会有8个partner。也就是说在任一磁盘上的一个extent会在它的8个partner的磁盘上有一个副本。让我们牢记这一点,(normal冗余情况下)一个extent永远只会在某个partner磁盘上有一份镜像副本。

通过查询x$kfdpartner视图可以找出关于磁盘partner关系的更多细节。让我们来看一个多磁盘的磁盘组的例子:

SQL> SELECT count(disk_number)

FROM v$asm_disk

WHERE group_number = 1;

 

COUNT(DISK_NUMBER)

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

               168

查询结果显示磁盘组内包含的磁盘数量着实不少,接下来看单个磁盘拥有多少个partner:

SQL> SELECT disk "Disk", count(number_kfdpartner) "Number of partners"

FROM x$kfdpartner

WHERE grp=1

GROUP BY disk

ORDER BY 1;

 

      Disk Number of partners

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

         0                  8

         1                  8

         2                  8

...

       165                  8

       166                  8

       167                  8

 

168 rows selected.

查询结果显示单个磁盘都准确的拥有8个partner磁盘。(可以看出这里的环境是一个11GR2或以上版本的数据库)

接下来查询每个磁盘组里每个磁盘的partner关系信息:

SQL> set pages 1000

SQL> break on Group# on Disk#

SQL> SELECT d.group_number "Group#", d.disk_number "Disk#", p.number_kfdpartner "Partner disk#"

FROM x$kfdpartner p, v$asm_disk d

WHERE p.disk=d.disk_number and p.grp=d.group_number

ORDER BY 1, 2, 3;

 

    Group#      Disk# Partner disk#

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

         1          0            12

                                 13

                                 18

                                 20

                                 24

                                 27

                                 31

                                 34

                    1            13

                                 17

                                 21

                                 22

                                 24

                                 29

                                 34

                                 35

 

...

                   29             4

                                  5

                                  7

                                  8

                                 10

                                 12

                                 16

                                 19

 

816 rows selected..

partner关系是在创建磁盘组时由ASM自动分配的,在每次添加和删除磁盘操作时会自动更新。

磁盘之间的partner关系信息是记录在磁盘的partner关系状态表即PST表(参考前面的章节)和磁盘目录中,这两项都是重要的ASM元数据结构。

SQL> CREATE DISKGROUP wxh normal REDUNDANCY

  failgroup ocr1 disk

  '/dev/qdata/vdc' ,

  '/dev/qdata/vdd'

  failgroup ocr2 disk

  '/dev/qdata/vde' ,

  '/dev/qdata/vdg'

  attribute

  'au_size'='1M',

            'compatible.asm' = '11.2.0.4',

            'compatible.rdbms' = '11.2.0.4';  

 

Diskgroup created.

 

kfed read /dev/qdata/vdc aun=1 blkn=0| more

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                           17 ; 0x002: KFBTYP_PST_META

kfbh.datfmt:                          2 ; 0x003: 0x02

kfbh.block.blk:                     256 ; 0x004: blk=256

kfbh.block.obj:              2147483648 ; 0x008: disk=0

kfbh.check:                  2503555118 ; 0x00c: 0x9539382e

kfbh.fcn.base:                        0 ; 0x010: 0x00000000

kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000

kfbh.spare1:                          0 ; 0x018: 0x00000000

kfbh.spare2:                          0 ; 0x01c: 0x00000000

kfdpHdrPairBv1.first.super.time.hi:33036846 ; 0x000: HOUR=0xe DAYS=0x11 MNTH=0x6 YEAR=0x7e0

kfdpHdrPairBv1.first.super.time.lo:485925888 ; 0x004: USEC=0x0 MSEC=0x1a9 SECS=0xf MINS=0x7

kfdpHdrPairBv1.first.super.last:      2 ; 0x008: 0x00000002

kfdpHdrPairBv1.first.super.next:      2 ; 0x00c: 0x00000002

kfdpHdrPairBv1.first.super.copyCnt:   2 ; 0x010: 0x02

kfdpHdrPairBv1.first.super.version:   1 ; 0x011: 0x01

kfdpHdrPairBv1.first.super.ub2spare:  0 ; 0x012: 0x0000

kfdpHdrPairBv1.first.super.incarn:    1 ; 0x014: 0x00000001

kfdpHdrPairBv1.first.super.copy[0]:   0 ; 0x018: 0x0000

kfdpHdrPairBv1.first.super.copy[1]:   2 ; 0x01a: 0x0002

kfdpHdrPairBv1.first.super.copy[2]:   0 ; 0x01c: 0x0000

kfdpHdrPairBv1.first.super.copy[3]:   0 ; 0x01e: 0x0000

kfdpHdrPairBv1.first.super.copy[4]:   0 ; 0x020: 0x0000

kfdpHdrPairBv1.first.super.dtaSz:     4 ; 0x022: 0x0004

以上输出说明在磁盘0和2上有pst的拷贝(kfdpHdrPairBv1.first.super.copy[0]和kfdpHdrPairBv1.first.super.copy[1]处有值)

kfed read /dev/qdata/vdc aun=1 blkn=3| more

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                           18 ; 0x002: KFBTYP_PST_DTA

kfbh.datfmt:                          2 ; 0x003: 0x02

kfbh.block.blk:                     259 ; 0x004: blk=259

kfbh.block.obj:              2147483648 ; 0x008: disk=0

kfbh.check:                  2182251266 ; 0x00c: 0x82128302

kfbh.fcn.base:                        0 ; 0x010: 0x00000000

kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000

kfbh.spare1:                          0 ; 0x018: 0x00000000

kfbh.spare2:                          0 ; 0x01c: 0x00000000

kfdpDtaEv1[0].status:               127 ; 0x000: I=1 V=1 V=1 P=1 P=1 A=1 D=1

kfdpDtaEv1[0].fgNum:                  1 ; 0x002: 0x0001

kfdpDtaEv1[0].addTs:         2174935503 ; 0x004: 0x81a2e1cf

kfdpDtaEv1[0].partner[0]:         49155 ; 0x008: P=1 P=1 PART=0x3

kfdpDtaEv1[0].partner[1]:         49154 ; 0x00a: P=1 P=1 PART=0x2

kfdpDtaEv1[0].partner[2]:         10000 ; 0x00c: P=0 P=0 PART=0x2710

kfdpDtaEv1[0].partner[3]:             0 ; 0x00e: P=0 P=0 PART=0x0

以上输出代表磁盘0(kfdpDtaEv1[0])所在failgroup号为1,它有2个partner磁盘,分为为PART=0x3,PART=0x2

时间: 2024-09-04 22:18:49

Oracle ASM 翻译系列第七弹:高级知识 How many partners?的相关文章

Oracle ASM 翻译系列第十一弹:高级知识 Offline or drop?

Offline or drop? 当一个ASM磁盘不可用时,ASM会把它从磁盘组里移除,对吗?要看情况,通常取决于ASM版本和磁盘组的冗余级别.因为一个external冗余的磁盘组会直接被dismount,所以主要关注normal和high冗余磁盘组的情况. ASM 10g版本,磁盘会被直接drop.从11gR1,一个磁盘不可用时会先被offline,此时disk repair计时器开始介入,如果计时器达到磁盘组DISK_REPAIR_TIME 属性值时,这个磁盘会从所属的磁盘组中drop掉.如

Oracle ASM 翻译系列第六弹:高级知识 如何映射asmlib管理的盘到它对应的设备名

当使用ASMLIB 来管理ASM 磁盘时,设备的路径信息是不会在gv$asm_disk视图path列中显示的,如果你使用的是ASMLIB Support Tools 2.1 或者更高(oracleasm-support-2.1*的rpm包)版本,可以通过root用户运行'oracleasm querydisk -p'来获得设备路径信息: # ls -l /dev/oracleasm/disks total 0 brw-rw---- 1 grid asmadmin 8,  5 May  2 12:

Oracle ASM 翻译系列第八弹:ASM Internal ASM file extent map

当ASM创建一个文件时(例如数据库实例要求创建一个数据文件),它会以extent为单位分配空间.一旦文件被创建,ASM会传递extent映射表给数据库实例,后续数据库实例能在不和ASM实例交互的情况下访问这个文件.如果一个文件的extent需要被重新定位,比如磁盘组进行rebalance操作,ASM会告知数据库实例关于extent映射表的变更. 可以通过查询ASM实例的X$KFFXP视图来获取ASM文件extent映射表的内容.X$KFFXP视图中的每一行对应着所有处于mount状态磁盘组中每一

Oracle ASM 翻译系列第二十七弹:ASM INTERNAL ASM METADATA BLOCK

ASM METADATA BLOCK ASM的元数据由ASM实例进行维护和管理,元信息本身非常重要,ASM磁盘组中的文件要想被Oracle DB和其他客户端正常使用,就要求元信息一定要是完好无损的,ASM的元信息以元信息块的形式存储在磁盘组中. 译者注:ASM的元信息可以类比为Oracle数据库的数据字典,一旦核心的元信息发生毁坏,那么ASM磁盘组将不能被装载继而提供服务. 有些ASM 元数据在每个ASM 磁盘的固定位置,被称为物理元信息,有些ASM元数据是以文件(目录)形式保存,被称为虚拟元数

Oracle ASM 翻译系列第十弹:ASM Internal ASM DISK header

ASM disk header ASM磁盘头可能是ASM元数据中最广为人知的部分.之前你可能认为当它被破坏或丢失时,只能寄希望于Oracle技术支持人员协助来恢复.在本节中将解释ASM磁盘头的重要性和它包含的信息. Block zero ASM磁盘是以AU为单位进行格式化的,部分AU会存放ASM元数据,其他AU存放数据库中的相关数据(如数据文件.备份文件.归档文件等等).包含ASM元数据的AU会以元数据块的方式进行格式化(一个元数据块的大小为4K).AU0位于ASM磁盘的起始位置,它始终用于存储

Oracle ASM 翻译系列第二十一弹:ASM Attributes Directory

ASM Attributes Directory ASM的元数据9号文件,是ASM属性目录,包含了磁盘组的属性信息.属性目录只有在磁盘组的compatible.asm属性设置为11.1或以上时才会存在. 直到ASM 11.1版本开始,才引入了磁盘组属性的概念,它被用来细粒度的调整磁盘组的属性.有些属性只能在磁盘组创建时指定(如au_size),有些属性可以在任何时候指定(如disk_repair_time).有些属性保存在磁盘头中(如au_size),有些属性被存储在[成员关系和状态表]中或磁盘

Oracle ASM 翻译系列第二十弹:ASM Internal ASM file number 7

ASM file number 7 ASM元信息7号文件,是ASM的逻辑卷目录,用于跟踪与ADVM有关的文件. ASM动态逻辑卷设备是由ASM动态逻辑卷构建的.一个磁盘组中可以配置一个或多个ASM动态逻辑卷设备.ASM集群文件系统通过ADVM接口构建在ASM磁盘组之上.ADVM像数据库一样,也是ASM的一个客户端.当一个逻辑卷被访问时,相应的ASM文件会被打开并且ASM extent的信息会被发送到ADVM驱动. 有两种与ADVM逻辑卷相关的文件类型: · ASMVOL:逻辑卷文件,作为逻辑卷存

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元信息才会被创建,本身的内容大小会随着of

Oracle ASM 翻译系列第十七弹:ASM Internal ASM Disk Directory

ASM Disk Directory 本篇文章讲述ASM元信息的2号文件,ASM的2号文件是ASM的磁盘目录,它跟踪磁盘组中的所有磁盘.由于在ASM中磁盘组是一个独立的存储单位,因此每一个磁盘组都会有自己的磁盘目录. 译者注:ASM中每一个磁盘组都是自解释的,磁盘组之间没有任何的信息上依赖 对ASM来说,磁盘目录只是一个普通的ASM文件,在ASM的文件目录中也会有它的条目,如果磁盘组做了冗余策略,它也会相应做镜像,也会像其他文件一样根据实际需要做空间的伸长. 每个磁盘目录的条目都维护了如下的一些