磁盘组:datadg
磁盘:/dev/asm-diskb,/dev/asm-diskc
冗余级别:normal,一个failgroup只有一个磁盘
测试过程:
1:mount磁盘组启动数据库写入测试数据。
2:关闭虚拟机拔掉一块硬盘/dev/asm-diskb
3:拔掉硬盘之后看磁盘组是否能还能工作并查询数据。
下面开始
首先进行第一步插入测试数据
create table testtab(id int);
insert into testtab values(1);
insert into testtab values(2);
commit;
select * from testtab;
然后进行第二步发现磁盘组datadg不能mount,查看日志如下
SQL> ALTER DISKGROUP DATADG MOUNT /* asm agent *//* {0:0:2} */
NOTE: cache registered group DATADG number=1 incarn=0xd22857aa
NOTE: cache began mount (first) of group DATADG number=1 incarn=0xd22857aa
Mon Jul 14 12:38:57 2014
ASM Health Checker found 1 new failures
NOTE: Assigning number (1,1) to disk (/dev/asm-diskc)
NOTE: GMON heartbeating for grp 1
GMON querying group 1 at 17 for pid 17, osid 1386
Mon Jul 14 12:39:03 2014
NOTE: Assigning number (1,0) to disk ()
GMON querying group 1 at 18 for pid 17, osid 1386
NOTE: cache dismounting (clean) group 1/0xD22857AA (DATADG)
NOTE: messaging CKPT to quiesce pins Unix process pid: 1386, image: oracle@asmstudy (TNS
V1-V3)
NOTE: dbwr not being msg'd to dismount
NOTE: lgwr not being msg'd to dismount
NOTE: cache dismounted group 1/0xD22857AA (DATADG)
NOTE: cache ending mount (fail) of group DATADG number=1 incarn=0xd22857aa
NOTE: cache deleting context for group DATADG 1/0xd22857aa
GMON dismounting group 1 at 19 for pid 17, osid 1386
NOTE: Disk in mode 0x7f marked for de-assignment
NOTE: Disk DATADG_0001 in mode 0x7f marked for de-assignment
ERROR: diskgroup DATADG was not mounted
WARNING: Disk Group DATADG containing spfile for this instance is not mounted
ORA-15032: not all alterations performed
ORA-15040: diskgroup is incomplete
ORA-15042: ASM disk "0" is missing from group number "1"
ERROR: ALTER DISKGROUP DATADG MOUNT /* asm agent *//* {0:0:2} */
Mon Jul 14 12:39:03 2014
ASM Health Checker found 1 new failures
意思很明白了,就是少了一个disk,所以mount失败了。
但是datadg是normal冗余的,另外一个磁盘还可以用,所以我们强制mount
[grid@asmstudy ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.4.0 Production on Mon Jul 14 12:43:33 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Automatic Storage Management option
SQL> alter diskgroup datadg mount force;
Diskgroup altered.
SQL> select name,path,failgroup,mount_status from v$asm_disk where group_number=1;
NAME PATH FAILGROUP MOUNT_STATUS
------------------------------ -------------------- -------------------- --------------------
_DROPPED_0000_DATADG DATADG_0000 MISSING
DATADG_0001 /dev/asm-diskc DATADG_0001 CACHED
发现上面有块盘是丢失状态,我们启动数据库然后查询数据,而数据还在,因为normal级别的冗余有2个数据备份,
一个failgroup存放primary copy,另一个failgroup存放备用copy。
现在我们将磁盘还原回去。
关闭虚拟机,然后将磁盘加回去,然后启动,之前删除的是 /dev/asm-diskb
SQL> alter diskgroup datadg add disk '/dev/asm-diskb' name diskb rebalance power 5 wait;
alter diskgroup datadg add disk '/dev/asm-diskb' name diskb rebalance power 5 wait
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15033: disk '/dev/asm-diskb' belongs to diskgroup "DATADG"
报这个错误时因为磁盘设备头文件还存储了之前磁盘组的信息,因此需要清楚头部的信息。
[root@asmstudy ~]# dd if=/dev/zero of=/dev/asm-diskb bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 5.86341 s, 35.8 MB/s
然后再次执行上面的命令增加磁盘到磁盘组datadg中,并等待其平衡数据到新的磁盘中
具体可以查询视图v$asm_operation
SQL> alter diskgroup datadg add disk '/dev/asm-diskb' name diskb rebalance power 5 wait;
Diskgroup altered.
然后就可以查询v$asm_disk视图,恢复原样了。