ORACLEAUTOMATICSTORAGEMANAGEMENT翻译-第十章ASM内置数据结构(3)完
disk directory
disk directory包含了磁盘组中所有的磁盘信息。disk directory信息比pst更为详细。磁盘组中的每一块盘都有一个条目以数字为索引。disk directory的文件号在每个磁盘组中都是2号(f2)。
disk directory中的字段如下:
n disk name
n failure group name
n disk size
n disk free space
n disk creation time
disk directory中大部分信息在disk header中都有。alterdiskgroup … check命令校验关于磁盘中数据结构的一致性。磁盘组mount时diskdirectory总是可用的,因此他也提供了关于normal-或high-redundancy模式下offline磁盘组的磁盘信息。
active change directory(acd)
acd是一种日志结构,允许记录asm对多个元数据结构的修改。类似于oracle rdbms的redo log。每个实例有一个42m大小chunk的acd。(正如douglas adams在hitchhiker’sguide to the galaxy中的说明,生命的终极问题的答案是“42”, 宇宙和一切.)。每个chunk的第一个块包含了open/close状态和checkpoint。checkpoint每3秒更新一次。剩下的块用做保存acd修改记录的循环buffer。(是的,“active change directory change record”是冗余的,但是没有第二次修改,我们不能称之为acdc记录)。新的asm实例acd会根据需要动态增长。asm使用acd来执行崩溃恢复和实例恢复进而保证了元数据的一致性。每个磁盘组的acd的文件号是3(f3)。
continuing operations directory(cod)
cod跟踪长时间运行的磁盘组操作,如文件创建和重平衡。长时间运行操作的范围不适合acd。如果一个长时间运行的操作执行失败cod条目可以使asm恢复到失败操作之前的状态。例如,asm可以回滚一个为创建文件未完成的操作。rdbms失效或用户行为可能会导致这个场景出现。对于磁盘组重平衡,如果实例执行重平衡失败,asm可以在一个集群中存活的节点上重新启动重平衡操作,或者在单实例中挂载磁盘组以后重启重平衡。cod在每个磁盘组中的文件号都是4号(f4)。
template directory
template directory包含磁盘组所有temlate的信息。创建的磁盘组支持默认的每种文件类型。如果用户添加一个自己的template就会新增一个条目。templatedirectory使用数字索引编号。
每个template条目包含如下信息:
n template name
n file redundancy
n file striping policy
n system flag
template directory在每个磁盘组中的文件号都是5号(f5)。默认模板名字与文件类型一致。文件冗余策略默认为磁盘组的冗余策略。文件条带默认是文件类型指定的。flag设置为默认(或系统)模板。用户创建模板没有设置system标记。
alias directory
alias directory包含所有的alias的元数据,系统别名、系统目录、用户目录、用户别名。它也是使用数字索引编号的。
alias directory包含如下结构:
n alias name(ordirectoryname)
n alias incarnation number
n file number
n file incarnation number
n parent directory
n system flag
alias directory在每个磁盘组中的文件编号都是6号(f6)。aliasincarnation与文件的incarnation非常相似,为可能拥有相同aliasnumber的别名或目录提供唯一性保证。system flag是系统创建的别名和目录,但是没有为用户创建的别名和目录设置system flag。
attributesdirectory
attributedirectory包括了磁盘组的属性元数据。这个数据结构只有磁盘组compatible.asm是11.1或11.1以上才有。这样的磁盘组,attributedirectory的文件号是9(f9)。(文件号7和8为将来的数据结构预留)。au_size属性由于引导的原始实际是存放在磁盘头的。compatible.asm在11.1或更高版本中存储在pst中,否则也存放在磁盘头。在oracledatabase 11g release 1,compatible.rdbms和disk_repair_time和他们的值存储在attributedirectory中。今后的版本会支持其他的属性。
staleness directory
staleness directory包括特定磁盘和客户端的stalenessregistry映射表槽的元数据。stalenessdirectory的文件号是12(f12)。如果有需要它会随着stalenessregister的分配而分配。
staleness registry(sr)
staleness registry用来跟踪磁盘offline导致出现问题的au。在normal-和high-redundancy磁盘组中并且compatible.rdbms设置为11.1或更高版本时,registry是254号文件(文件255为保留文件)。stalenessregister在需要时创建,也会在需要调整额外offline磁盘或新建asm和rdbms实例时动态增长。
当磁盘offline时,每个rdbms实例在stalenessregistry中获取到一个关于该盘的slot(槽)。这个slot有一个字节与offline磁盘的每个au对应。当rdbms要写的位置正是offline磁盘的位置,如果还没有设置相匹配的bit,rdbms实例会为这块盘在stalenessregistry的slot中设置相匹配的bit。
当磁盘online时,asm执行按位或操作通过对磁盘联机实例使用。任何au有bit设置必须从镜像extent上复制。任何bit被清理的au不需要作为磁盘online更新的一部分。因为只有磁盘offline时au才需要更新修改,把一个磁盘online比添加一块新盘替换旧盘更有效。
总结
asm磁盘组是一个自描述的实体,存放了所有磁盘组中的元数据。每块磁盘都有一少部分物理元数据。其余的元数据——存储在虚拟地址的元数据——存放在asm文件中,这使元数据利用相同元数据分布和冗余特性,通过存储在磁盘组中的数据文件。