ORACLEAUTOMATICSTORAGEMANAGEMENT翻译-第十章ASM内置数据结构(1)
chapter 10 asm persistent data structures
与传统文件和卷管理器一样,asm存储元数据用来描述和跟踪磁盘组的内容。所有的元数据描述存储在上面的asm磁盘组的组成和内容,这些元数据使得磁盘组实现了自描述。asm磁盘组有两类元数据:物理元数据和虚拟元数据。物理元数据位于磁盘上。虚拟元数据存储在asm文件中,因此与其他asm文件一样这些元数据均匀分布在磁盘组的磁盘上。rdbms无法打开asm读取元数据目录也不能对asm物理元数据的位置执行读写(i/o)操作。
纠错:asm使用一个来存储元数据(这句话是错误的)。
虽然asm运行oracle实例,但是asm没有在实例中mount数据库。asm元数据存储在磁盘组中,元数据的数据结构将在本章介绍。所有asm元数据以4k元数据块存储包括磁盘头和校验数据。
物理元数据
物理元数据位于磁盘上并在位于固定位置。asm引导过程需要这些固化的元数据。例如,物理元数据无法存储在asm文件中,如下的数据结构包含了物理元数据:
n 磁盘头 diskheader
n 分配表 allocationtable(at)
n 空闲空间表 freespace table(fst)
n 合作关系状态表 partnershipstutus table(pst)
disk header
每块asm磁盘都有一个磁盘头。磁盘头表示了asm类型的磁盘,磁盘头使用每个磁盘第一个au(allocationunit)的第一个块。
磁盘头条目中包含如下结构:
ndisk name
ndisk number
ndiskgroup name
nfailure group name
ndisk size
nallocation unit(au) size
ncreation time
nmount time
nasm compatibility
nfile directory pointer
nasmlib reserved block
大多数字段都可以从他们的名字清楚的知道字段的含义。mount time和creationtime用来帮助找出要用的的磁盘,当挂载时如果两块磁盘拥有相同的磁盘名并且在磁盘组中有相同的磁盘号。这种情况发生在当一块磁盘向磁盘组中添加时另一块磁盘刚好失效。
asm compatibility指定了挂载磁盘组的最低asm软件号。oracle数据库10*品这个字段总是使用10.1。当compatible.asm的属性升级为11.1,asm在pst中保存版本号,同时更新磁盘组中的磁盘头以确保oracle database 10g软件不能访问不兼容的磁盘组。
rdbms compatibility指明了访问磁盘组的rdbms实例设置的参数的最小版本。磁盘头中的这个字段总是10.1。oracledatabase 10g软件不会更新这个字段,但是oracle database 11g软件为了兼容性的缘故协商属性目录,如果参数compatible.asm是11.1或更高。
file directory pointer描述了file drectory的第一个扩展的在磁盘中的位置。这个指针对于引导虚拟asm元数据是必须的。file directory在本章稍后进行讨论。
asmlib可以再磁盘头的asmlib保留块中存放32 bytes的信息。oracle的asmlib用这个字段存储磁盘的asmlib名称。想获取更多信息请看第6章。
磁盘头是磁盘特定化的数据,对于mirror特性来说无法识别磁盘头(也就是磁盘头无法镜像)。本章稍后描述,disk directory包含一些与磁盘头一样的信息。使用alter diskgroup ... check命令检查diskdirectory和disk header的一致性。
allocationtable(at)
每个asm磁盘都有一个分配表来跟踪磁盘的空闲空间和已分配空间。分配表紧随disk header之后。分配表表包括描述磁盘上的每个au的分配表条目(allocation table entry ate)。ates分组存放在allocation table blocks(atbs)。atbs总是包含多个64个ates确保multil-auextents不会扩多个atbs。通常情况分配表存放在一个au里;然而对于大磁盘,分配表可以跨多个au。在这种情况下,分配表使用的第二个au在存放在分配表在第一个au结束地址之后。为分配表分配的空间成为stride(跨度)。分配表分配的stride有固定的位置到地址2的32次方个au,而没有必要为小盘浪费aus。
ates描述一个特定的au如何使用。如果au分配给文件那么ates包含文件号和扩展号。extents跨越多个au,多个ates将指向同一个extent。
未分配的au在allocation table中标记为“free”,为了快速定位空闲au,空闲extents以链表的形式存放。
从oracle 11grelase1开始,如果rdbms或asm实例无法读取部分au,但是可以读取磁盘的其他部分,ate就会标示这个au不可用。asm只会在normal和high-redundancy磁盘组上标记au不可用。对于不可用aus在第11章中的“读取错误”章节中详细讨论,“asm操作”。
allocation table和filedirectory(本章稍后描述)是互相补充的数据结构。alter diskgroup ... check命令校验allocation table和filedirectory的一致性。