Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1206811
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-28 10:11:25

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),在指定成员时一般能够自动检测出磁盘的容量,不过如果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,创建时仅用了,则最大可扩大到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将会等到操作真正完成时,才返回提示信息。


阅读(2529) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~