实验环境:
OS:Oracle Linux Server release 5.9
DB:Oracle 11.2.0.1.0
为了安全起见,操作之前,需要停掉数据库,ASM实例。
1.节点1磁盘信息如下(节点2相同)
[root@11grac1 ~]# ls -l /dev/asm*
brw-rw---- 1
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8, 128 Mar 25 03:31 /dev/asm-diski
[root@11grac1 ~]# ls -l /dev/sd*
brw-r----- 1 root disk 8,
brw-r----- 1 root disk 8,
brw-r----- 1 root disk 8,
brw-rw---- 1 root root 8,
brw-rw---- 1 root root 8,
brw-rw---- 1 root root 8,
brw-rw---- 1 root root 8,
brw-rw---- 1 root root 8,
brw-rw---- 1 root root 8,
brw-r----- 1 root disk 8, 112 Mar 24 20:46 /dev/sdh
brw-rw---- 1 root root 8, 128 Mar 24 20:46 /dev/sdi
现在要将新添加的磁盘/dev/sdh设置为ASM共享磁盘,并且添加到磁盘组中。
2.[root@11grac1 rules.d]# pwd
/etc/udev/rules.d
[root@11grac1 rules.d]# for i in h; do echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id -g -u -s %p\", RESULT==\"`scsi_id
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s p",RESULT=="SATA_VBOX_HARDDISK_VBfeab29eb-3b887e7b_", NAME="asm-diskh",
[root@11grac1 rules.d]# vi 99-oracle-asmdevices.rules
添加如上一行信息到文件中
[root@11grac1 rules.d]# vi 99-oracle-asmdevices.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VB132c7b61-b9c9f7fe_", NAME="asm-diskg",OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p",RESULT=="SATA_VBOX_HARDDISK_VBa246668a-4855c053_", NAME="asm-diski",OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="SATA_VBOX_HARDDISK_VBfeab29eb-3b887e7b_", NAME="asmdiskh",OWNER="grid",GROUP="asmadmin", MODE="0660"
用udev进行绑定
[root@11grac1 rules.d]# start_udev
节点2上做同样的修改
[root@11grac2 rules.d]# start_udev
在两个节点上查看磁盘信息
root@11grac2 rules.d]# ls -l /dev/asm*
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8,
brw-rw---- 1 grid asmadmin 8, 112 Mar 25 03:39 /dev/asm-diskh
brw-rw---- 1 grid asmadmin 8, 128 Mar 25 03:35 /dev/asm-diski
2.向磁盘组中添加磁盘/dev/asm-diskh
SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS, MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MODE_ST HEADER_STATU MODE_ST STATE
NAME
------------ ----------- ------- ------------ ------- -------- ---------- ---------- -------------------- --------------
SQL> alter diskgroup data_dg add disk '/dev/asm-diskh';
Diskgroup altered.
SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS,MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MODE_ST HEADER_STATU MODE_ST STATE
------------ ----------- ------- ------------ ------- -------- ---------- ----------
添加完磁盘之后,oracle会自动做重平衡rebalance操作,可以通过视图查看
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- -------
说明还在做重平衡的操作,重平衡的过程就是从其他的磁盘向新磁盘挪动数据的过程,如果数据量很大,这个时间会很长。
SOFAR:就是目前为止挪动的AU数量1593
EST_WORK:估计要挪动的AU数量1601
实际挪动5120-3525=1595MB,即1595个AU,即重平衡过程中需要大概挪到1595MB的数据。而且POWER默认是POWER
SQL> show parameter asm_power_limit
NAME
------------------------------------ ----------- ------------------------------
asm_power_limit
如果存储比较高端,可以将这个值设置大一点(power取值0-11),alter diskgroup data_dg rebalance power 11; power=0就是停止rebalance操作。
EST_RATE:估计每分钟挪动的AU数量
EST_MINUTES:估计挪动多少分钟
Oracle执行重平衡的进程是ASMB,可以查看一下:
[grid@11grac1 ~]$ ps -ef|grep asmb
grid
grid
过段时间查看,重平衡操作结束。
SQL> select * from v$asm_operation;
no rows selected
3.删除磁盘组
SQL> alter diskgroup data_dg drop disk 'DATA_DG_0002'; --按照name来删除
Diskgroup altered.
SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS, MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MODE_ST HEADER_STATU MODE_ST STATE
------------ ----------- ------- ------------ ------- -------- ---------- ---------- -------------
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- -------
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- -------
SQL> select * from v$asm_operation;、
GROUP_NUMBER OPERA STAT
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- -
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- -----------
SQL> select * from v$asm_operation;
no rows selected
大概需要挪动1601个AU才能完成重平衡。
SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS, MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MODE_ST HEADER_STATU MODE_ST STATE
------------ ----------- ------- ------------ ------- -------- ---------- ---------- -------------
FORMER - Disk was once part of a disk group but has been dropped cleanly from the group. It may be added to a new disk group with the ALTER DISKGROUP statement.
4.重新添加该磁盘
SQL> alter diskgroup data_dg add disk '/dev/asm-diskh';
Diskgroup altered.
如果这步添加有错误,可以使用dd命令将磁盘头信息清除掉,通过如下方式:
dd if=/dev/zero of=/dev/sdd bs=4096 count=256
SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS, MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;
GROUP_NUMBER DISK_NUMBER MODE_ST HEADER_STATU MODE_ST STATE
------------ ----------- ------- ------------ ------- -------- ---------- ---------- -------------------- ---------------
手动执行重平衡操作
SQL> alter diskgroup data_dg rebalance power 8;
Diskgroup altered.
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- --------------------------------------------
SQL> select * from v$asm_operation;
no rows selected
之前power=1时候,AU/min大概是300不到,power=8的时候,AU/min达到600多,明显快了一点。
总结:向磁盘组加盘减盘是一个IO繁忙的操作,建议放在业务空闲时间来做,可以通过设置power并行来加快rebalance的速度。