向磁盘组添加磁盘
当发生添加/删除磁盘组中的磁盘操作时,ASM能够自动平衡。
普通的删除操作(无FORCE)选项,被删除的磁盘上面的数据在被有效处理前并不会立即释放。
新增磁盘时,在重新平衡完成前,该盘也不会比承担I/O的负载。 添加磁盘在数据库不忙的时候添加
使用V$ASM_OPERATION视图查询相关状态。
ALTER DISKGROUP语句附加REBALANCE WAIT子句,这样该语句会等再平衡操作,直至所有操作完成才返回结果,在等待期间,使用CTRL+C可以取消终端的等待,平衡操作不受影响,在后台继续进行。
向磁盘组添加磁盘
使用搜索通配符可以使ASM在提供的路径及通配符规则下自动搜索可用磁盘(具有读取权限的RAW),并将该磁盘添加到目标磁盘组。
ASM会自动检测出符合通配符,且没有包含在任何一个磁盘组的可用磁盘(每个已经加入磁盘组的磁盘的标头都有ASM元数据信息)。
ASM确保磁盘是可寻址,可用的之后,对磁盘进行格式化的重新平衡。
在平衡期间,会将所有的文件的区移至新磁盘。
在平衡不会阻止任何数据库操作。在平衡过程主要影响系统的I/O负载。
在平衡能力越高,对系统的I/O施加的负载越多,可用于数据库的I/O带宽就越少
加磁盘 选择数据库负载较低的时间操作
SQL> alter diskgroup test add disk 添加磁盘组
2 '/dev/raw/raw15';
Diskgroup altered.
其它ALTER命令
ALTER DISKGROUP droupA DROP DISK ;
从磁盘组中删除磁盘
命令执行后,会自动执行在平衡
当删除磁盘时,ASM发现平衡不过来时(比如剩下的磁盘空间不足以存放所有数据)删除操作会失败。这种情况要么先删除数据在删除磁盘,要么取消磁盘删除的操作。
ALTER DISKGROUP dgroupA UNDROP DISKS;
取消磁盘删除操作
只要删除操作还没有真正完成,就可以取消删除磁盘组的操作
UNDROP命令仅对磁盘暂挂删除操作起作用,对已经完成的删除操作没有影响。
SQL> alter diskgroup test
2 drop disk 'test_0004' 删除一块磁盘组
3 add disk '/dev/raw/raw16'; 添加一块磁盘组
Diskgroup altered.
创建新目录
alter diskgroup asmdisk2 add directory'+ASMDISK2/JSS1';
修改目录名
alter diskgroup asmdisk2 rename directory '+ASMDISK2/JSS1' to '+ASMDISK2/JSS2';
删除目录名
alter diskgroup asmdisk2 drop directory '+ASMDISK2/JSS2';
也可以使用ASMCMD命令行方式进行。
OEM管理ASM
ASM的兼容性
防止不同版本的数据库使用同一组磁盘 造成的不兼容
ASM兼容性控制磁盘上ASM元数据结构
ASM实例 数据库 磁盘组 都有一个兼容性 三者存在一定的关系才能保证数据库的正常
ASM磁盘组属性
ATTRIBUTE 'compatible.asm'='11.2' 代表使用的ASM实例版本必须大于11.2
用ASMCMD 查询更方便
ASM磁盘离线了 哪个盘离线了把哪个盘DROP掉新建新磁盘
SQL> select name,compatibility,database_compatibility from v$asm_diskgroup where name='TEST';
NAME COMPATIBILITY DATABASE_COMPATIBILITY
------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
TEST 10.1.0.0.0 10.1.0.0.0
SQL> alter diskgroup test set attribute 'compatible.asm'='11.2.0.0.0'; 修改兼容性版本
Diskgroup altered.
SQL> alter diskgroup test set attribute 'compatible.rdbms'='11.2.0.0.0';
Diskgroup altered.
SQL> select name,compatibility,database_compatibility from v$asm_diskgroup where name='TEST';
NAME COMPATIBILITY DATABASE_COMPATIBILITY
------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
TEST 11.2.0.0.0 11.2.0.0.0
模拟离线 no repair time offline
SQL> select name,path from v$asm_disk order by 1,2;
NAME PATH
------------------------------ ------------------------------
DATA_0000 /dev/raw/raw1
DATA_0001 /dev/raw/raw2
DATA_0002 /dev/raw/raw3
DATA_0003 /dev/raw/raw4
FLA_0000 /dev/raw/raw5
FLA_0001 /dev/raw/raw6
FLA_0002 /dev/raw/raw7
FLA_0003 /dev/raw/raw8
TEST_0005 /dev/raw/raw16
TEST_1 /dev/raw/raw11
TEST_2 /dev/raw/raw12
NAME PATH
------------------------------ ------------------------------
TEST_3 /dev/raw/raw13
TEST_4 /dev/raw/raw14
/dev/raw/raw15
/dev/raw/raw17
/dev/raw/raw18
16 rows selected.
SQL> alter diskgroup test offline disk TEST_0005 drop after 0 h; 只是从磁盘组里删除,磁盘里的数据没有被删除,磁盘里还有磁盘组的元数据,加不回来这个磁盘了
Diskgroup altered.
SQL> select name,repair_timer,state from v$asm_disk_stat; 查看磁盘的状态
NAME REPAIR_TIMER STATE
------------------------------ ------------ --------
DATA_0001 0 NORMAL
DATA_0003 0 NORMAL
FLA_0001 0 NORMAL
DATA_0000 0 NORMAL
FLA_0000 0 NORMAL
FLA_0002 0 NORMAL
DATA_0002 0 NORMAL
FLA_0003 0 NORMAL
TEST_2 0 NORMAL
TEST_4 0 NORMAL
TEST_1 0 NORMAL
NAME REPAIR_TIMER STATE
------------------------------ ------------ --------
TEST_3 0 NORMAL
12 rows selected.
SQL> !
[oracle@oel ~]$ dd if=/dev/zero of=/dev/raw/raw16 bs=1M count=10; 把其格式化
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0278082 seconds, 377 MB/s
exit
SQL> alter diskgroup test add disk '/dev/raw/raw16' name test_0005;
Diskgroup altered.
raw16这块盘只要一离线就加不回来了,离线后无法在直接回归。
离线在平衡 加回来还需要在平衡
模拟oralce 11g
SQL> alter diskgroup test offline disk test_0005 drop after 3.6h;
Diskgroup altered.
SQL> select name,path from v$asm_disk order by 1,2;
NAME PATH
------------------------------ ------------------------------
DATA_0000 /dev/raw/raw1
DATA_0001 /dev/raw/raw2
DATA_0002 /dev/raw/raw3
DATA_0003 /dev/raw/raw4
FLA_0000 /dev/raw/raw5
FLA_0001 /dev/raw/raw6
FLA_0002 /dev/raw/raw7
FLA_0003 /dev/raw/raw8
TEST_0005
TEST_1 /dev/raw/raw11
TEST_2 /dev/raw/raw12
NAME PATH
------------------------------ ------------------------------
TEST_3 /dev/raw/raw13
TEST_4 /dev/raw/raw14
/dev/raw/raw15
/dev/raw/raw16
/dev/raw/raw17
/dev/raw/raw18
17 rows selected.
SQL> alter diskgroup test online disk test_0005;
Diskgroup altered.
可以直接把临时离线的文件加回来