2.3 mount/unmount 磁盘组

  只有被mount的磁盘组才能被数据库使用并执行add/drop等磁盘操作,ASM中的磁盘组默认会在ASM实例启动时自动加载,当然也可以手动通过命令行语句mount/unmount磁盘组。

  查询ASM实例中创建的磁盘组可以通过V$ASM_DISKGROUP视图查看,例如:

    SQL> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;

    GROUP_NUMBER NAME                           STATE         TOTAL_MB    FREE_MB

    ------------ ------------------------------ ----------- ---------- ----------

               1 ASMDISK1                       MOUNTED          20472      18667

               2 ASMDISK2                       MOUNTED          16378      14621

  当前两个磁盘组均为MOUNT状态,要将其置为UNMOUNT,执行语句如下,例如将ASMDISK2磁盘组UNMOUNT:

    SQL> alter diskgroup asmdisk2 dismount;

    Diskgroup altered.

    SQL> select group_number,name,state from v$asm_diskgroup;

    GROUP_NUMBER NAME                           STATE  

    ------------ ------------------------------ -----------

               1 ASMDISK1                       MOUNTED  

               0 ASMDISK2                       DISMOUNTED 

  注意哟,UNMOUNT磁盘组的话务必慎重操作,要确保UNMOUNT的磁盘组中保存的文件对应的数据库当前未启动,而且该操作也会直接导致数据库SHUTDOWN。

  再将其置回MOUNT状态,操作如下:

    SQL> alter diskgroup asmdisk2 mount;

    Diskgroup altered.

    SQL> select group_number,name,state from v$asm_diskgroup;

    GROUP_NUMBER NAME                           STATE

    ------------ ------------------------------ -----------

               1 ASMDISK1                       MOUNTED

               2 ASMDISK2                       MOUNTED

2.4  管理目录及文件

  ASM 磁盘组中文件和目录的管理自动化水平相当高,应该说基本上完全不需要DBA参与,它自己就能玩的很好,当然,如果你非要动动手,那也是可以的。

2.4.1  管理磁盘组目录

  创建新目录:

    SQL> alter diskgroup asmdisk2 add directory ¨+ASMDISK2/JSS1¨;

    Diskgroup altered.

  修改目录名:

    SQL> alter diskgroup asmdisk2 rename directory ¨+ASMDISK2/JSS1¨

      2  to ¨+ASMDISK2/JSS2¨;

    Diskgroup altered.

  删除目录名:

    SQL> alter diskgroup asmdisk2 drop directory ¨+ASMDISK2/JSS2¨;

    Diskgroup altered.

  实际上,ASM中目录和文件的管理,也可以通过ASMCMD命令行方式进行,该命令行进入之后,是一个类似文件系统的管理界面,ORACLE提供了一些最基础的,如cd、ls、mkdir、rm等等几个有限的操作命令,如果对这部分内容感兴趣,可以参考官方文档中的介绍,或者搭个环境实践操作,可用命令很少且简单,熟悉Linux/Unix的话极易上手。

2.4.2  管理别名(Alias Names)

  别名就是外号,比如说当系统自动产生的名称太过复杂不怎么好记,DBA可以通过别名,为它创建一个简单化的名称,而又不会对其现有名称造成任何影响。ASM中创建别名是通过alter diskgroup的alias子句实现,支持增加/修改/删除等多项操作。V$ASM_ALIAS视图中可以查询到当前实例中创建的别名。

  例如,增加别名:

    SQL> alter diskgroup asmdisk2 add alias ¨+ASMDISK2/repdb/datafile/temp01.dbf¨ for ¨+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831¨;

    Diskgroup altered.

  修改别名:

    SQL> alter diskgroup asmdisk2 rename alias ¨+ASMDISK2/repdb/datafile/temp01.dbf¨ to ¨+ASMDISK2/repdb/TEMPFILE/temp01.dbf¨;

    Diskgroup altered.

  删除别名:

    SQL> alter diskgroup asmdisk2 drop alias ¨+ASMDISK2/repdb/TEMPFILE/temp01.dbf¨;

    Diskgroup altered.

  不管是添加/删除或是修改别名,对原有文件路径均不会有影响。

2.4.3  删除磁盘组中文件/别名

  破坏总是最简单的,当然我不是说删除就一定是破坏,不过从严谨的角度讲,删除这样的操作要少做(没说不做),做前得再三确认,三思而行并留有备份,即使做错了,还有恢复的可能。

  当然啦,ASM中遇到删除文件这样需求的机率很低,但也不是完全没有,比如说执行了数据库不完全恢复操作后,某部分数据文件就不再需要,而恢复操作不会处理这部分文件,为合理利用空间,就会需要DBA手动删除这类文件,真遇到这样的需求,表急,语法也是黑简单的呐,例如,删除磁盘组2上的别名temp01:

    SQL> alter diskgroup asmdisk2 drop file ¨+ASMDISK2/repdb/datafile/temp01.dbf¨;

    Diskgroup altered.

  没错,即能删文件也能删别名,只不过如果删除的是文件的话,其关联的别名(Alias)也会被自动删除。

2.4.4  删除磁盘组

  太简单了,语法:drop diskgroup gpname即可!不演示了!需要注意一点,如果删除的diskgroup非空的话,直接执行上述语句会报错,这时候可以通过附加including contents子句,来自动删除该磁盘组中包含的文件。删除磁盘组的操作会自动修改spfile中ASM_DISKGROUPS初始化参数的值(如果使用了SPFILE的话)