首页 > 应用开发 > IT综合 > ASM磁盘组基础操作
创建磁盘组的语法如下:
CREATE DISKGROUP diskgroup_name [ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ] { [ FAILGROUP failgroup_name ] DISK qualified_disk_clause [, qualified_disk_clause]... } ... [ ATTRIBUTE { 'attribute_name' = 'attribute_value' }... ] ; qualified_disk_clause ::= search_string [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] |
创建sale磁盘组
CREATE DISKGROUP sale NORMAL REDUNDANCY FAILGROUP FG_SALE_01 DISK 'ORCL:VOL_SDI' NAME SALESDI SIZE 500M FAILGROUP FG_SALE_02 DISK 'ORCL:VOL_SDJ' NAME SALESDJ SIZE 500M ATTRIBUTE 'compatible.asm' = '11.2', 'compatible.rdbms' = '11.2', 'compatible.advm' = '11.2'; Diskgroup created. 或: SQL> CREATE DISKGROUP test NORMAL REDUNDANCY DISK 'ORCL:VOL_TEST01' NAME TEST01 SIZE 2048M DISK 'ORCL:VOL_TEST02' NAME TEST02 SIZE 2048M ATTRIBUTE 'compatible.asm' = '11.2', 'compatible.rdbms' = '11.2', 'compatible.advm' = '11.2'; 2 3 4 5 6 Diskgroup created. |
报错过程:
SQL> CREATE DISKGROUP sale NORMAL REDUNDANCY FAILGROUP FG_SALE_01 DISK 'ORCL:VOL_SDI' NAME SALESDI SIZE 500M FAILGROUP FG_SALE_02 DISK 'ORCL:VOL_SDJ' NAME SALESDJ SIZE 500M ATTRIBUTE 'compatible.asm' = '11.2', 'compatible.rdbms' = '11.2', 'compatible.advm' = '11.2'; 2 3 4 5 6 7 8 CREATE DISKGROUP sale NORMAL REDUNDANCY * ERROR at line 1: ORA-15018: diskgroup cannot be created ORA-15238: 11.2 is not a valid value for attribute compatible.advm ORA-15477: cannot communicate with the volume driver SQL> host oerr ora 15477 15477, 00000, "cannot communicate with the volume driver" // *Cause: An attempt was made to communicate with the volume driver. // *Action: Check that the ASM volume driver is loaded. If so, check the alert // log to identify the reason for failure and take necessary action // to prevent such failures in the future. // |
解决:
如上的错误表示ASM volume driver没有加载。需要使用root用户手工加载。 |
扩展磁盘组磁盘语法:
ALTER DISKGROUP diskgroup_name { ADD { [ FAILGROUP failgroup_name ] DISK qualified_disk_clause [, qualified_disk_clause ]... }... } [ REBALANCE [POWER integer] [WAIT | NOWAIT] ] ; |
扩展SALE磁盘组
SQL> ALTER DISKGROUP sale ADD FAILGROUP FG_SALE_01 DISK 'ORCL:VOL_SDK' NAME SALESDK SIZE 500M; Diskgroup altered. 或 SQL> ALTER DISKGROUP test ADD DISK 'ORCL:VOL_TEST03' SIZE 2048M Diskgroup altered. |
目前磁盘ORCL:VOL_SDI、ORCL:VOL_SDJ、ORCL:VOL_SDK各有1000M容量,从v$asm_disk.OS_MB可以看出,TOTAL_MB就是已经使用的容量.
Pl/sql developer工具提供语句: select g.name, d.os_mb, d.total_mb,d.name,d.failgroup,d.path,g.type from v$asm_disk d, v$asm_diskgroup g where d.group_number = g.group_number and g.name = 'SALE'; SALE 1019 500 SALESDI FG_SALE_01 ORCL:VOL_SDI NORMAL SALE 1019 500 SALESDJ FG_SALE_02 ORCL:VOL_SDJ NORMAL SALE 1019 500 SALESDK FG_SALE_01 ORCL:VOL_SDK NORMAL |
以上三个磁盘Resize disk 到700M.
SQL> ALTER DISKGROUP sale RESIZE DISK SALESDI SIZE 700M; ALTER DISKGROUP sale RESIZE DISK SALESDJ SIZE 700M; ALTER DISKGROUP sale RESIZE DISK SALESDK SIZE 700M; Diskgroup altered. SQL> Diskgroup altered. SQL> Diskgroup altered. |
查看已经RESIZE DISK:
Pl/sql developer工具提供语句: select g.name, d.os_mb, d.total_mb,d.name,d.failgroup,d.path,g.type from v$asm_disk d, v$asm_diskgroup g where d.group_number = g.group_number and g.name = 'SALE'; 1 SALE 1019 700 SALESDI FG_SALE_01 ORCL:VOL_SDI NORMAL 2 SALE 1019 700 SALESDJ FG_SALE_02 ORCL:VOL_SDJ NORMAL 3 SALE 1019 700 SALESDK FG_SALE_01 ORCL:VOL_SDK NORMAL |
从磁盘组删除磁盘语法:
ALTER DISKGROUP diskgroup_name { DROP { DISK disk_name [ FORCE | NOFORCE ] [, disk_name [ FORCE | NOFORCE ] ]... | DISKS IN FAILGROUP failgroup_name [ FORCE | NOFORCE ] [, failgroup_name [ FORCE | NOFORCE ] ]... } } [ REBALANCE [POWER integer] [WAIT | NOWAIT] ] ; |
从磁盘组中DROP磁盘.
SQL> ALTER DISKGROUP sale DROP DISK SALESDK; Diskgroup altered. |
同时增加与删除磁盘操作语法:
ALTER DISKGROUP diskgroup_name { ADD ... } { DROP ... } [ REBALANCE [POWER integer] [WAIT | NOWAIT] ] ; |
添加磁盘与删除磁盘同时进行:
SQL> ALTER DISKGROUP sale 2 ADD DISK 'ORCL:VOL_SDK NAME SALESDK SIZE 700M 3 DROP DISK SALESDJ; ADD DISK 'ORCL:VOL_SDK NAME SALESDK SIZE 700M * ERROR at line 2: ORA-01756: quoted string not properly terminated SQL> c/'ORCL:VOL_SDK/'ORCL:VOL_SDK' 2* ADD DISK 'ORCL:VOL_SDK' NAME SALESDK SIZE 700M SQL> / Diskgroup altered. |
可以取消正在进行drop磁盘的操作,注意,已经完成drop操作以及drop带选项force的操作不能undrop.
ALTER DISKGROUP sale UNDROP DISKS; Diskgroup altered. |
磁盘的挂载与卸载语法:
ALTER DISKGROUP { diskgroup_name [, diskgroup_name ] ... | ALL } { MOUNT [ RESTRICTED | NORMAL ] [ FORCE | NOFORCE ] | DISMOUNT [ FORCE | NOFORCE ] } ; |
卸载与挂载操作:
SQL> alter diskgroup sale dismount; Diskgroup altered. SQL> alter diskgroup sale mount; Diskgroup altered. |
删除磁盘组语法:
DROP DISKGROUP diskgroup_name [ FORCE INCLUDING CONTENTS | { INCLUDING | EXCLUDING } CONTENTS ] ; |
删除磁盘组(如果磁盘组有数据,不要轻易drop磁盘组,将导致数据库不能open):
SQL> DROP DISKGROUP sale INCLUDING CONTENTS; Diskgroup dropped. SQL> DROP DISKGROUP sale INCLUDING CONTENTS; Diskgroup dropped. DROP DISKGROUP sale FORCE INCLUDING CONTENTS; |
SQL> alter diskgroup test offline disk 'test01'; Diskgroup altered. SQL> alter diskgroup test online disk 'test01'; |
ALTER DISKGROUP test SET ATTRIBUTE 'disk_repair_time' = '4.5h'; Diskgroup altered. ALTER DISKGROUP test SET ATTRIBUTE 'disk_repair_time' = '270m'; Diskgroup altered. |
1. 5分钟之后,offline的磁盘将被删除 ALTER DISKGROUP data OFFLINE DISK DATA_001 DROP AFTER 5m; SQL> ALTER DISKGROUP test OFFLINE DISK VOL_TEST03 DROP AFTER 5M; Diskgroup altered. 2. Offline的磁盘将应用属性disk_repair_time默认的时间 ALTER DISKGROUP data OFFLINE DISK DATA_001; |
ASM Fast mirror resync描述:
在10g的ASM中如果因为某些硬件故障(比如接口线,比如光纤卡,比如电源)导致Diskgroup中的某些磁盘无法正常读取,这些磁盘将处于offline状态,在offline之后不久ASM就会把这些磁盘从Diskgroup中删除,并且尝试利用冗余的extent来重新在其它磁盘中构建数据,这是一个比较耗时且耗资源的操作。当我们修复了磁盘,再将它们重新加回磁盘组中,又将是另外一次的数据重整操作。如果我们仅仅是例行的维护硬件,因为磁盘中的数据并没有真正的损坏,我们只是将磁盘取出来过一会儿再加回去,那么这样的两次数据重整操作无疑是没有必要的,在11g中ASM的Fast Mirror Resync功能允许我们设置磁盘的repair时间,在repair时间内ASM将不会尝试在磁盘间重新分配extent。 ALTER DISKGROUP dgroup SET ATTRIBUTE 'DISK_REPAIR_TIME'='3H'; 上述命令可以设置当磁盘组dgroup中的磁盘失效和重新有效之间的时间在3小时内的话,ASM就不会重新构建extent,当磁盘重新有效之后,ASM需要做的只是将这3小时内更改的extent重新同步到刚才失效的这些磁盘中就可以了。 |
ASM Fast mirror resync实现满足的条件:
1. Enabled when COMPATIBLE.RDBMS >= 11.1 2. ASM 镜像 (NORMAL or HIGH redundancy)模式,对EXTERNAL模式无效. 3. 设定DISK_REPAIR_TIME的时间,该属性默认3.6小时. |
Preferred Read Failure Groups描述:
在Oracle10g的自动存储管理中,当配置一个故障磁盘组的时候,通常都会从首要的镜像分配单元拷贝上读取数据。但是,从靠近一个节点的故障磁盘组读取分配单元效率会更高一些,即使是从次要的分配单元。尤其是针对于RAC扩展的集群配置,从本地节点的一个分配单元拷贝上读取数据将能够提高性能。对于Oracle11g数据库,就能够通过一个全新的实例级别的初始化参数ASM_PREFERRED_READ_FAILURE_GROUPS来配置首选镜像读取,这个参数将指定一个首选镜像读取的列表,在这些故障磁盘组中的磁盘都成为首选读取的磁盘。因此,每个节点都能读取其本地磁盘,这将极大的提高效率和性能,减少网络阻塞。这个初始化参数是个多值参数,如果设置有多个故障磁盘组,可以用逗号隔开,故障磁盘组的名字的指定必须是磁盘组名加上字符“.”。这个参数可以使用ALTER SYSTEM命令来动态修改,并且只能适用于自动存储管理的实例。当节点扩展到集群的时候,这个参数应该被设置为对应当前实例的本地的磁盘。 +ASM1.ASM_PREFERRED_READ_FAILURE_GROUPS = DG1.FG1, DG2.FG3 +ASM2.ASM_PREFERRED_READ_FAILURE_GROUPS = DG1.FG2, DG2.FG4 (DG1/2为磁盘组,FG1/2为故障组,其他类似) |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28227905/viewspace-1059747/ ,如需转载,请注明出处,否则将追究法律责任。