[转帖]全面学习和应用ORACLE ASM特性--(3)添加和修改asm磁盘组_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3850 | 回复: 0   主题: [转帖]全面学习和应用ORACLE ASM特性--(3)添加和修改asm磁盘组        下一篇 
大红薯
注册用户
等级:少校
经验:1440
发帖:159
精华:0
注册:2011-7-21
状态:离线
发送短消息息给大红薯 加好友    发送短消息息给大红薯 发消息
发表于: IP:您无权察看 2011-8-1 11:01:50 | [全部帖] [楼主帖] 楼主

2.1 添加磁盘组


  DBCA 中创建磁盘组想必大家都很熟悉了,对,不过是点两下鼠标,SQL*PLUS下操作也很简单,主要是使用CREATE DISKGROUP语句,该语句的语法如下:

CREATE DISKGROUP diskgroup_name
[ { HIGH NORMAL EXTERNAL } REDUNDANCY ]
[ FAILGROUP failgroup_name ]
DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...;


  语法很简单,大多数都是可选项:

    首先要指定的就是磁盘组名称(diskgroup_name);
    指定冗余度,有三个选择:HIGH(高度冗余>三路)、NORMAL(标准冗余--双路)和EXTERNAL(外部存储冗余);
    选择是否指定FAILGROUP(如果选择非external则必须指定);
    指定该磁盘组中的成员(对应的LUN),在指定成员时一般ASM能 够自动检测出磁盘的容量,不过如果DBA基于某些方面的考虑,希望限制ASM使用的空间的话,也可以在指定成员过程中,顺便指定大小(只要指定的大小不超 出磁盘实际容量),在添加成员时,ASM也会自动检查磁盘头以确定该磁盘是否被加入到其它的磁盘组中,当发现该盘已加入其它磁盘组的话,你可以通过 FORCE选项来强制修改该盘所属磁盘组。

2.2 修改磁盘组


  事物总是在变化中前进,这是事物的一般规 律,磁盘组也不例外,在其创建完之后,保不齐什么时候可能就需要加或删个磁盘,或者修改某个盘的大小(如果还有机会改的话)。这时候你就需要 ALTER DISKGROUP语句了,ALTER DISKGROUP语句的语法太简单(灵活)了,因此这里三思就不列了,后面通过几个实际应用的示例 来说明其语法规则。

  ASM 最好的一点就是,不管你是加还是删磁盘组中的磁盘,它都能自动进行平衡,确保该磁盘组中每块盘存储的数据量平均,以实现最优化的IO性能,并且这一过程不会对数据造成影响

2.2.1  添加磁盘


  比如,添加一个磁盘到磁盘组asmdisk1,语句如下:

SQL> Alter diskgroup asmdisk2 add disk '/dev/raw/raw7' name asmdisk2_0002;
Diskgroup altered.


  事实上,alter diskgroup添加磁盘时,也可以使用通配符,比如添加所有raw_a0开头的设备,可执行语句如下:

Alter diskgroup asmdisk1 add disk '/dev/raw/raw_a0*' ;


  再比如添加raw_a5,raw_a6,raw_a7,可以执行语句如下:

Alter diskgroup asmdisk1 add disk '/dev/raw/raw_a[567]' ;


  总之非常灵活,大家可以根据实际情况自行尝试以简化操作。这也属于优化着干活的范畴嘛。

  注意哟,语句虽然执行了,不过ASM需要自动平均磁盘组中的数据,这必然需要消耗一定的时间(视数据量多少),默认情况下ALTER DISKGROUP语句并不会等待所有工作全部完成才返回控制权,

  要监控后台进行的操作,可以通过V$ASM_OPERATION视图查询。

   如果希望ALTER DISKGROUP语句完成所有工作才返回的话,可以在执行时附加REBALANCE WAIT子句,这样该语句就会等待自动平衡 的操作,直接所有操作完成才返回结果,当然在等待期间,如果你改主意了不愿意继续等待,CTRL+C中断即可获得控制权,而平衡的操作不受影响,会在后台 继续进行。

2.2.2  删除磁盘


  虽然删除磁盘也涉及到数据库的重新平衡,因此删除跟添加还有点儿不同,就是当删除磁盘时,当ASM发现怎么平衡都平衡不过来时(比如剩下的磁盘空间不足以存放所有数据时),删除操作也会失败。这种情况要么先删数据,要么取消删除的操作。

  简单举个例子,比如说删除asmdisk2磁盘组中的asmdisk2_0001磁盘,操作如下:

SQL> alter diskgroup asmdisk2 drop disk asmdisk2_0001;
Diskgroup altered.


   不知道算不算是优点,由于前面提到的ASM自动平衡的特性,上述语句返回后并不代表磁盘已经被删除,此时后台可能由于正忙碌地执行着IO重平衡的工作, 因此如果在这个当口,DBA忽然意识到操作失误,其实磁盘并不需要被删除,那也可以马上通过 alter diskgroup dgname undrop disks语句来取消删除的操作,例如:

SQL> alter diskgroup asmdisk2 undrop disks;
Diskgroup altered.


  只要删除操作还没有真正完成,任何就会被取消,否则的话,上述语句也挽回不了什么了,如果希望挽回,那DBA只能再通过ADD语句将该磁盘重新加入到磁盘组了。

2.2.3  修改磁盘大小


  ASM 中的磁盘也可以被RESIZE--扩大或缩小,不过需要注意的是,扩大的话,要确保该磁盘对应的裸卷确实有足够的空间去扩大(比如该卷原有20g,创建时仅用了10g,则最大可扩大到20g-块头占用的nM空间);缩小的话,要确保缩小后剩余的空间仍以放的下当前磁盘上已存在的数据,不然操作就会报错。

  具体的操作是很简单的,例如将磁盘组asmdisk2的磁盘asmdisk2_0000的磁盘空间调整为1000m(原为8189m),操作如下:

SQL> alter diskgroup asmdisk2 resize disk asmdisk2_0000 size 1000m;
Diskgroup altered.


2.2.4  手动平衡磁盘组


   一般情况下ASM都会自动对其下的磁盘组进行平衡,不过ORACLE也提供了手动平衡磁盘组的方式,通过 alter diskgroup ... power 语句。前面提到过磁盘组的平衡度有0到11多个级别,默认是按照ASM_POWER_LIMIT初始化参数中设置的值,手动平衡的话,设置的平衡度可以与初始化参数中并不相同,例如,设置磁盘组平衡度为5,语句如下:

SQL> alter diskgroup asmdisk2 rebalance power 5;
Diskgroup altered.


  手动平衡磁盘组可能涉及大量的工作,该操作可能费时较久,因此DBA在执行该语句时,一定要注意该操作对IO性能的影响。

   另外再次强调,上述语句将很快返回diskgroup altered的提示,但这并不表示操作真正完成,它只是反馈语句提交而已,查看磁盘后台的操作,可以通过v$asm_operator视图,或者在语句执行时增加wait子句,这样ASM将会等到操作真正完成时,才返回提示信息。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论