在生产环境中,旧硬盘的老化、性能下降,这时候就需要对原有磁盘进行替换,这时候通过ASM的特性我们可以实现无宕机迁移更换磁盘,将生产系统所受影响降到最小,总结步骤分为以下几步:
1.备份原有生产环境数据,以防万一。
2.增加新的磁盘到主机上,并修改ASM_STRINGS使得该磁盘能被asm识别
3.增加新的磁盘到磁盘组,等待rebalance完成。
4.从磁盘组移除旧磁盘,等待rebalance完成。(3,4可以一起完成,这样只需要rebalance一次即可)
5.验证
在测试环境中我的测试过程如下:
首先创建测试diskgroup TEST
SQL> create diskgroup test external redundancy
2 disk '/dev/oracleasm/disks/TEST1' name test1
3 attribute 'au_size'='4M',
4 'compatible.asm' = '11.2',
5 'compatible.rdbms' = '11.2';
Diskgroup created.
在TEST磁盘组上创建一个表空间,在该表空间中创建一张表,不断插入数据:
SQL> create tablespace test datafile '+TEST' size 100M;
Tablespace created.
SQL> CREATE TABLE test(
2 ID NUMBER,
3 UPDATE_DATE DATE
4 )tablespace test;
Table created.
SQL> BEGIN
2 FOR V_INDEX IN 1 .. 100000
3 LOOP
4 INSERT INTO test VALUES(V_INDEX, SYSDATE);
5 COMMIT;
6 DBMS_LOCK.SLEEP(0.5);
7 END LOOP;
8 END;
9 /
现在需要增加新磁盘’/dev/oracleasm/disks/TEST2’到TEST diskgroup,同时将旧磁盘’/dev/oracleasm/disks/TEST1’从TEST diskgroup删除,这里rebalance power使用最小值1,减少对于原环境的影响,根据实际情况调整。
SQL> alter diskgroup test add disk '/dev/oracleasm/disks/TEST2'
2 drop disk TEST1
3 rebalance power 1;
Diskgroup altered.
等待rebalance完成,则更换磁盘结束。
在上边的语句执行过程中可以通过视图v$asm_operation磁盘正在进行rebalance:
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE
------------ ----- ---- ---------- ---------- ---------- ---------- ----------
EST_MINUTES ERROR_CODE
----------- --------------------------------------------
4 REBAL RUN 1 1 19 45 228
0
在整个过程当中系统不受任何影响,正常运转。