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的话)