DSKGRP1_0007 /dev/sdf4 980 636 CONTROLLER2 可以看到这些磁盘上初了写入部分头信息后,空间几乎没有使用。
7.3 手工做一次REBALANCE
SQL> ALTER DISKGROUP DSKGRP1 REBALANCE POWER 2 WAIT; 再查看磁盘状态
SQL> select name,path,total_mb,free_mb,failgroup from v$asm_disk NAME PATH TOTAL_MB FREE_MB FAILGROUP SDD1 /dev/sdd1 109 67 CONTROLLER1 SDD2 /dev/sdd2 109 67 CONTROLLER2 DSKGRP1_0000 /dev/sde1 980 646 CONTROLLER1 DSKGRP1_0001 /dev/sde2 980 644 CONTROLLER1 DSKGRP1_0002 /dev/sde3 980 645 CONTROLLER1 DSKGRP1_0003 /dev/sde4 980 643 CONTROLLER1 DSKGRP1_0004 /dev/sdf1 980 644 CONTROLLER2 DSKGRP1_0005 /dev/sdf2 980 645 CONTROLLER2 DSKGRP1_0006 /dev/sdf3 980 644 CONTROLLER2 DSKGRP1_0007 /dev/sdf4 980 645 CONTROLLER2 具体比较发现每块盘上的数据量真正发生了变化。说明ASM确实做了数据的重新分布。
8 ASM数据镜像的功能
前面提到了ASM提供镜像功能,那么在实际工作中是不是这么回事呢?下面做一个测试。 破坏一个磁盘数据
- 26 -
[oracle1@server orainstall]$ dd if=README.html of=/dev/sde1 216+1 records in 216+1 records out 查看磁盘状态
SQL> select name,path,total_mb,free_mb,failgroup from v$asm_disk NAME PATH TOTAL_MB FREE_MB FAILGROUP -------------------- -------------------- ---------- ---------- ------------------------------ SDD1 /dev/sdd1 109 67 CONTROLLER1 SDD2 /dev/sdd2 109 67 CONTROLLER2 SDE1 /dev/sde1 980 0 DSKGRP1_0001 /dev/sde2 980 643 CONTROLLER1 DSKGRP1_0002 /dev/sde3 980 645 CONTROLLER1 DSKGRP1_0003 /dev/sde4 980 644 CONTROLLER1 DSKGRP1_0004 /dev/sdf1 980 644 CONTROLLER2 DSKGRP1_0005 /dev/sdf2 980 645 CONTROLLER2 DSKGRP1_0006 /dev/sdf3 980 644 CONTROLLER2 DSKGRP1_0007 /dev/sdf4 980 645 CONTROLLER2 确定/dev/sde1确实已经被破坏,手工再做一次REBALANCE
SQL> ALTER DISKGROUP DSKGRP1 REBALANCE POWER 2 NOWAIT; SQL> select name,path,total_mb,free_mb,failgroup from v$asm_disk NAME PATH TOTAL_MB FREE_MB FAILGROUP -------------------- -------------------- ---------- ---------- ------------------------------ SDD1 /dev/sdd1 109 67 CONTROLLER1 SDD2 /dev/sdd2 109 67 CONTROLLER2 SDE1 /dev/sde1 980 0 DSKGRP1_0001 /dev/sde2 980 643 CONTROLLER1 DSKGRP1_0002 /dev/sde3 980 645 CONTROLLER1
- 27 -
DSKGRP1_0003 /dev/sde4 980 644 CONTROLLER1 DSKGRP1_0004 /dev/sdf1 980 644 CONTROLLER2 DSKGRP1_0005 /dev/sdf2 980 645 CONTROLLER2 DSKGRP1_0006 /dev/sdf3 980 644 CONTROLLER2 DSKGRP1_0007 /dev/sdf4 980 645 CONTROLLER2 查看数据文件的状态
SQL> select name,status from v$datafile NAME STATUS +DSKGRP1/ora10g/datafile/system.259.647726825 SYSTEM +DSKGRP1/ora10g/datafile/undotbs.260.647726825 ONLINE +DSKGRP1/ora10g/datafile/sysaux.258.647726823 ONLINE +DSKGRP1/ora10g/datafile/users.261.647726827 ONLINE +DSKGRP1/ora10g/datafile/test.262.647726933 ONLINE +DSKGRP1/ora10g/datafile/tspace1.263.647726977 ONLINE 可以看到虽然/dev/sde1数据头被覆盖后,ASM不能正常识别该文件,认为其是一个新的文件,可以通过手工重新添加该文件
SQL> alter diskgroup DSKGRP1 DROP DISK sde1; 这里注意,如果将asm_power_limit设置为0后,磁盘数据库不能rebalance,所以从v$asm_disk里还能看到sde1这块盘,如果手工调用ALTER DISKGROUP DSKGRP1 REBALANCE POWER 2 NOWAIT后,数据进行平均分布,该盘才能从磁盘组中删除。 SQL> ALTER DISKGROUP DSKGRP1 ADD FAILGROUP controller1 DISK '/dev/sde1' NAME newsde1; Sql> ALTER DISKGROUP DSKGRP1 REBALANCE POWER 2 NOWAIT; SQL> select * from v$asm_operation; GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- 1 REBAL RUN 2 2 60 802 176 4 - 28 -
9 迁移控制文件(Note:345180.1)
创建一个DSKSYSGRP1磁盘组,将控制文件迁移到该磁盘组上
vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 3 \
chown -R oracle:dba /dev/sdc chown -R oracle:dba /dev/sdd chown -R oracle:dba /dev/sde chown -R oracle:dba /dev/sdf chown -R oracle:dba /dev/sdg chown -R oracle:dba /dev/sdh chown -R oracle:dba /dev/sdi chown -R oracle:dba /dev/sdj chown -R oracle:dba /dev/sdk chown -R oracle:dba /dev/sdl
CREATE DISKGROUP DSKSYSGRP1 NORMAL REDUNDANCY FAILGROUP controller1 DISK '/dev/sdc',
- 29 -
FAILGROUP controller2 DISK '/dev/sdd';
9.1 Duplicating a controlfile into ASM when original controlfile
is stored on a file system
SQL> select name from v$controlfile; NAME
------------------------------------------------------------ /oradata/orcl/control01.ctl /oradata/orcl/control02.ctl /oradata/orcl/control03.ctl
SQL> shutdown immediate; SQL> startup nomount;
[oracle@server1 ~]$ rman nocatalog RMAN> connect target
RMAN> restore controlfile to '+DSKSYSGRP1' from '/oradata/orcl/control01.ctl'; [oracle@server1 ~]$ export ORACLE_SID=+ASM1 [oracle@server1 ~]$ asmcmd ASMCMD> cd DSKSYSGRP1
ASMCMD> find -t controlfile . *
+DSKSYSGRP1/ORCL/CONTROLFILE/current.256.667654799
[oracle@server1 ~]$ export ORACLE_SID=orcl1 [oracle@server1 ~]$ sqlplus \alter
system
set
control_files='+DSKSYSGRP1/ORCL/CONTROLFILE/current.256.667654799'
scope=spfile sid='*'; SQL> show parameter control
- 30 -