磁盘组的属性是asm 11.1版本引入的,是磁盘组层面而非asm实例层面的。磁盘组的属性有一些只能在创建磁盘组时指定,有一些只能在创建之后指定,还有一些可以在任何时候指定。
本篇内容是对本系列文章-【asm attributes directory】的展开。
access_control.enabled属性指定了一个磁盘组的asm file access control是否启用,参数的值可以设置为true或者false(默认)。
如果这个属性设置为true,asm文件的访问权限就会受到控制。如果设置为false,任何用户都可以访问磁盘组上的任意文件。该属性只影响文件的访问,不影响其他操作。
这个属性可以用alter disk group语法来修改。
access_control.umask属性与通常os层面的umask类似。用来设置asm文件的属主,属组和其他用户的权限。这个特性对磁盘组中所有文件生效。
属性的值是3位数的组合,每一位可以是0,2,6数字中的一个。默认情况下为066.
某一位的值设置为0表示不排除任何权限;设置为2,表示排除掉写权限;设置为6表示把读写权限都排除。
在设置该属性之前,要先设置access_control.enabled为true。
这个属性只能使用alter diskgroup 语法设置。
au_size属性控制了磁盘组au的大小,只能在创建磁盘组时指定。值得一提的是每个磁盘组可以有不同的au_size。
在exadata环境下,使用来自存储节点的磁盘创建的磁盘组可以设置cell.smart_scan_capable属性。对于磁盘组中的对象,这个属性可以开启smart scan功能。
compatible.asm属性指定了可以使用磁盘组的asm实例的最低软件版本。
这个属性也会影响asm元数据结构的格式。
当使用create diskgroup语法,asmcmd mkdg命令和em中的create disk group页面时,compatible.asm默认为10.1。在asm版本11gr2中,当使用asmca创建磁盘组时,默认为11.2,在版本12.1中,默认为12.1.
compatible.rdbms属性指定了可以使用磁盘组的db实例的最小compatible参数值。
在修改该属性的值之后,要确保所有正在访问磁盘组的db实例compatible参数大于等于这个值。
compatible.advm属性指定了磁盘组是否可以包含asm卷,其值要不小于11.2.
要设置该属性,compatible.asm必须在11.2(含)以上,环境中需要加载advm卷驱动。默认情况下,该属性的值为空。
content.check属性的作用是控制磁盘组在rebalance时,是否进行内容校验。该属性的值可以设置为true或者false。
内容校验包括用户数据的hard(hardware assisted resilient data)校验,文件目录中文件类型和文件目录信息的校验,以及镜像内容的对比。
该属性设置为true以后,将启用所有rebalance操作的逻辑校验。内容校验也被称为磁盘清理特性。
content.type属性将磁盘组指定为几种类型:data, recovery或者system。它还决定了到最近的partner磁盘或者failgroup的距离。默认值是data,同时指定了距离为1;值为recovery则指定了距离为3;值为system指定了距离为5.
距离为1的意思是asm认为所有的磁盘都具有partner关系。
距离为3的意思是每第三个磁盘具有partner关系。距离为5的意思是每第五个磁盘具有partner关系。
该属性可以在创建磁盘组时指定,也可以通过alter diskgroup语法指定。如果用alter diskgroup语法修改 ,新配置将在下一次显式地指定了rebalance之后生效。
该属性只在normal或者high冗余的磁盘组中可用。并且compatible.asm要设置为11.2.0.3及以上才能启用该属性。
disk_repair_time的值指定了asm保持磁盘offline状态的时间,超过这个时间之后,将该盘drop。和fast mirror resync特性一样,compatible.asm属性要设置为11.1或者更高。 该属性只能使用alter diskgroup语法修改。
failgroup_repair_time属性指定了磁盘组中failgroup的修复时间。当asm判定一整个failgroup发生故障时,这个参数就会启用。默认值为24小时。如果在alter diskgroup offline disk语句中加入drop after子句,指定的repair time会覆盖failgroup_repair_time。
这个属性只能通过alter fiskgroup设置,并且只对normal和high冗余的磁盘组可用。
这两个属性用来配置exadata存储,和intelligent data placement 特性相关。
phys_meta_replicated属性用来跟踪磁盘组元数据的复制状态。当磁盘组的asm兼容性设置为12.1或者更高时,每个磁盘的物理元数据会做复制。这些元数据包括此盘头,fst表和at表。
元数据的复制是在线异步做的。如果磁盘组中每个磁盘的元数据都做了复制,那么该属性的值就会被asm设置为true.
该属性只有在compatible.asm设置为12.1或者更高的磁盘组中才可以定义。用户无法设置或者修改该属性的值,只是用来提供元数据复制状态的信息,要么为true,要么为false.
sector_size属性指定了磁盘组中磁盘的扇区大小,只能在创建磁盘组时指定。
sector_size可以设置为512,4096或者4k(如果磁盘支持这些值)。默认值依平台而定。如果要修改该属性的值,需要把compatible.asm和compatible.rdbms设置为11.2或者更高。
注意:acfs不支持扇区为4kb的设备。
storage.type属性指定了磁盘组中磁盘的类型。属性的值可以是exadata,pillar,zfsas和other。如果设置为 exadata|pillar|zfsas,那么磁盘组中所有的磁盘类型必须和设置的吻合。如果设置为other,那么磁盘组中可以加入任意类型的磁盘。
如果属性值设置为pillar或者zfsas,那么对于磁盘组中的对象可以启用hcc(hybrid columnar compression)功能。exadata本身已经支持hcc。
注意:zfs类型的存储必须是通过dnfs(direct nfs)提供;pillar axion类型的存储必须是通过scsi或者光纤通道提供。
要设置storage.type属性,compatible.asm和compatible.rdbms属性都要设置为11.2.0.3或者更高。
如果要支持zfs存储,compatible.asm和compatible.rdbms属性要设置为11.2.0.4或者更高。
storage.type属性可以在创建磁盘组时设置,也可以通过alter diskgroup语法修改。当有客户端连接到磁盘组时,属性是无法修改的。比如说,当磁盘组上有advm卷启用时,无法修改该磁盘组的storage.type属性。
在修改该属性之前,无法在v$asm_attribute视图或者通过asmcmd lsattr命令看到它。
thin_provisioned属性值用来控制在磁盘组reblance结束后,是否丢弃未使用的存储空间。
支持thin provisioning的存储产品可以重用丢弃的存储空间,这样可以有效提升物理存储的利用率。
appliance.mode属性可以在磁盘组drop一块或多块asm磁盘时,缩短磁盘rebalance的完成时间。这也就意味着在有(磁盘)故障发生后,数据冗余可以更快的恢复。在exadata中创建磁盘组可以自动打开该属性。已经创建的磁盘组必须使用alter diskgroup语法来设置该属性。这个特性也被称为fixed partnering。
只有满足以下条件的磁盘组才能启用该属性:
compatible.asm设置为11.2.0.4或者更高
cell.smart_scan_capable属性设置为true
磁盘组中的磁盘是同一类型,比如都是普通硬盘或者都是闪存盘
磁盘组中的磁盘大小相同
磁盘组中所有failgroup有相同的磁盘数量
磁盘组中没有磁盘是offline状态
最低软件版本要求: oracle exadata storage server software release 11.2.3.3; oracle database 11g release 2 (11.2) release 11.2.0.4 注意:在oracle 12.1.0.1中该特性不可用。
不是所有的磁盘组属性都在官方文档中有记录,下面列举一些比较有意思的属性。
_rebalance_compact属性和rebalance过程中的compact阶段有关。属性值可以为true(默认)或者false。设置为false则可以禁止磁盘组rebalance过程中做compact。
_extent_counts属性和可变区大小特性有关,它决定了区大小在何时会增加。
属性值设置为“20000 20000 214748367”,意指前20000个区的大小为1个au,接下来20000个区大小由_extent_sizes属性的第二个值决定,剩下的区大小由_extent_sizes属性的第三个值决定。
_extent_sizes属性也和可变区大小特性有关,指定了区大小的增幅 -- 以au为单位。
在asm版本11.1,该属性值为1 8 64,在11.2及更高版本中,属性值为1 4 16。
磁盘组的属性可以通过v$asm_attribute视图或者asmcmd lsattr命令查看。
下面是查看磁盘组play的属性的一个方法:
可以通过sql的alter diskgroup set attribute语法,asmcmd setattr命令和asmca来修改磁盘组属性值。下面是使用asmcmd setattr修改play磁盘组的disk_repair_time属性值的例子:
asm 11.1推出的磁盘组属性,可以用来优化磁盘组的使用。有些属性值是专门针对exadata,还有一些只在特定版本可用。(前文都有标注)
大部分属性在官方文档中都有记录,并且可以通过v$asm_attribute视图查看。有一些没有官方文档记录的属性前面也有所介绍,这些属性值除非有orcle support,否则不要修改。
<b>本文来自云栖社区合作伙伴“dbgeek”</b>