ORACLE RAC环境使用ASM机制零宕机时间更换存储的实践
ORACLE RAC使用存储,随时系统的发展,磁盘空间以及存储的老化、更换是一个典型的动作;基于ASM数据自动均衡分配到各个磁盘LUN的特性,可以使用此方式进行在线的迁移,ORACLE MOS上有一个文档:中文版: 零宕机时间迁移 ASM 磁盘组到另一个 SAN/磁盘阵列/DAS 的准确步骤 (文档 ID 1946664.1);对此有描述,如下是近期一个真实的客户ORACLE RAC 主机不换、存储更换迁移案例:
1、操作计划步骤
序号 | 实施项目 | 实施内容 | 时间 | 是否中断业务 |
1 | 服务器添加共享存储 |
| 已完成 | 否 |
2 | 节点2关机 | HIS数据库集群2节点关闭数据库,关闭主机,轮流重启 | 21:00-21:10 | 否 |
3 | 节点1关机 | HIS数据库集群1节点关闭数据库,关闭主机,轮流重启 | 21:10-21:20 | 否 |
4 | 配置ASM磁盘 | 配更改UDEV配置文件,使得新存储的asm disk对ASM实例可识别 | 21:20-21:40 | 否 |
5 | 添加asm磁盘 |
| 21:40-22:40 | 否 |
6 | 删除旧的ASM磁盘 |
| 22:40-00:40 | 否 |
7 | 验证数据库 | 1、验证数据库正常 | 00:40-01:00 | 否 |
2、操作过程:
2.1.系统添加磁盘
新添加:8块1T的data盘 1块500G的arch盘 3块10g的ocr盘
原磁盘路径及权限
[root@hisdb1 ~]# ll /dev/mapper/hw*
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwarch01 -> ../dm-13
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwdata01 -> ../dm-11
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwdata02 -> ../dm-12
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwdata03 -> ../dm-17
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwdata04 -> ../dm-15
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwdata05 -> ../dm-18
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwdata06 -> ../dm-20
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwdata07 -> ../dm-14
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwdata08 -> ../dm-16
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwocr01 -> ../dm-19
lrwxrwxrwx 1 root root 8 Apr 17 21:43 /dev/mapper/hwocr02 -> ../dm-10
lrwxrwxrwx 1 root root 7 Apr 17 21:43 /dev/mapper/hwocr03 -> ../dm-9
在存储上划分LUN,并映射给数据库服务器,关闭HIS数据库集群1节点,并更改磁盘权限,待数据库节点1开机并数据库正常运行后,关闭HIS数据库集群2节点,并更改磁盘权限。
1.his一二节点分别在root下操作:
vi /etc/udev/rules.d/99-oracle-asmdevices.rules
ENV{DM_NAME}=="hwarch01", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwdata01", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwdata02", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwdata03", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwdata04", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwdata05", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwdata06", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwdata07", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwdata08", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwocr01", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwocr02", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
ENV{DM_NAME}=="hwocr03", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
一节点root用户执行:
/u01/11.2.0/grid/bin/crsctl stop crs
root下执行:
LINUX6.9重新加载UDEV规则
###start_uev
udevadm control -R
udevadm trigger
shutdown -f
主机启动后检查crs
/u01/11.2.0/grid/bin/crsctl stat res -t 数据库两个节点均为open后
ll /dev/mapper/hw*
ll /dev/dm-*
multipath -ll
二节点root用户执行
/u01/11.2.0/grid/bin/crsctl stop crs -f
root下执行:
LINUX6.9重新加载UDEV规则
##start_uev
udevadm control -R
udevadm trigger
shutdown -f
主机启动后检查crs
crsctl status res -t 数据库两个节点均为open后
并在两节点检查磁盘挂载情况
ll /dev/mapper/hw*
ll /dev/dm-*
multipath -ll
在数据库服务器上设置磁盘的权限,/etc/udev/rules.d/99-oracle-asmdevices.rules中添加如下内容(注意:其中mpath-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx改为实际新加的lun的uuid)
ENV{DM_NAME}=="hwarch01", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
重新加载UDEV规则
udevadm control -R
udevadm trigger
2.2.当前ASM磁盘使用情况
目前的存储分配及 ASM 磁盘组使用情况如下:
2.3.新存储ASM磁盘划分需求
2.4.ASM数据磁盘组中存储盘更换步骤
2.4.1.加盘
图形化操作:
ASMCA 图形中选择相应的磁盘组,选择要加入的 ASM 磁盘,点击 OK 即可:
添加ASM磁盘后的状态:
SQL> set line 150
SQL> col ERROR_CODE for a5
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ERROR_CODE
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- --------------------------------------------
1 REBAL RUN 1 1 16707 28940 4143 2
2 REBAL WAIT 1
3 REBAL WAIT 1
因为asm使用图形化添加磁盘,默认power 1,默认的速率可能要很久,查看服务器现在io压力不大,调整power大小:
[root@hisdb1 ~]# iostat -xtm 2 10
调整power
SQL>ALTER DISKGROUP DATA REBALANCE POWER 5;
REBALANCE完成后,查询v$asm_operation记录将消失:
SQL> select * from v$asm_operation;
no rows selected
命令行操作:
命令方式:
SQL> alter diskgroup SYSDG add disk '/dev/mapper/hwocr01','/dev/mapper/hwocr02'…… rebalance power 10;
一次添加多个盘
查询ASM磁盘组状态
注意:REBALANCE过程根据数据量的大小不同完成时间也不一,REBALANCE过程可以通过v$asm_operation视图来查看:
SQL> set line 150
SQL> col ERROR_CODE for a5
SQL> select * from v$asm_operation;
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ERROR_CODE
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- --------------------------------------------
1 REBAL RUN 1 1 16707 28940 4143 2
2 REBAL WAIT 1
3 REBAL WAIT 1
调整power
ALTER DISKGROUP DATA REBALANCE POWER 5;
REBALANCE完成后,查询v$asm_operation记录将消失:
SQL> select * from v$asm_operation;
no rows selected
添加ASM磁盘后的状态:
原磁盘组:
SQL> select NAME, ALLOCATION_UNIT_SIZE, STATE, TOTAL_MB, FREE_MB USABLE_FILE_MB from gv$asm_diskgroup;
NAME ALLOCATION_UNIT_SIZE STATE TOTAL_MB USABLE_FILE_MB
------------------------------ -------------------- ----------- ---------- --------------
ARCH 1048576 MOUNTED 512000 393405
DATA 1048576 MOUNTED 2097152 185327
SYSDG 1048576 MOUNTED 30720 29794
ARCH 1048576 MOUNTED 512000 393405
DATA 1048576 MOUNTED 2097152 185327
SYSDG 1048576 MOUNTED 30720 29794
6 rows selected.
新磁盘组:
SQL> select NAME, ALLOCATION_UNIT_SIZE, STATE, TOTAL_MB, FREE_MB USABLE_FILE_MB from gv$asm_diskgroup;
SQL> select NAME, ALLOCATION_UNIT_SIZE, STATE, TOTAL_MB, FREE_MB USABLE_FILE_MB from gv$asm_diskgroup;
NAME ALLOCATION_UNIT_SIZE STATE TOTAL_MB USABLE_FILE_MB
------------------------------ -------------------- ----------- ---------- --------------
ARCH 1048576 MOUNTED 1024000 965989
DATA 1048576 MOUNTED 10485760 8572567
SYSDG 1048576 MOUNTED 61440 60508
ARCH 1048576 MOUNTED 1024000 965989
DATA 1048576 MOUNTED 10485760 8572564
SYSDG 1048576 MOUNTED 61440 60508
6 rows selected.
2.4.2.踢盘
SQL> select a.name diskname,a.path,b.name diskgroupname,a.failgroup from
v$asm_disk a, v$asm_diskgroup b where a.group_number=b.group_number;
从现有 ASM 磁盘组中移除 ASM 磁盘
原磁盘组
su - grid
sqlplus / as sysasm
col diskname for a15
col path for a40
set linesize 200
select a.name diskname,a.path,b.name diskgroupname,a.failgroup from
v$asm_disk a, v$asm_diskgroup b where a.group_number=b.group_number;
DISKNAME PATH DISKGROUPNAME FAILGROUP
--------------- ---------------------------------------- ------------------------------ ------------------------------
DATA_0001 /dev/mapper/data2 DATA DATA_0001
ARCH_0000 /dev/mapper/arch ARCH ARCH_0000
DATA_0000 /dev/mapper/data1 DATA DATA_0000
SYSDG_0002 /dev/mapper/ocr3 SYSDG SYSDG_0002
SYSDG_0001 /dev/mapper/ocr2 SYSDG SYSDG_0001
SYSDG_0000 /dev/mapper/ocr1 SYSDG SYSDG_0000
6 rows selected.
新磁盘组
su - grid
sqlplus / as sysasm
col diskname for a15
col path for a40
set linesize 200
select a.name diskname,a.path,b.name diskgroupname,a.failgroup from
v$asm_disk a, v$asm_diskgroup b where a.group_number=b.group_number;
ISKNAME PATH DISKGROUPNAME FAILGROUP
--------------- ---------------------------------------- ------------------------------ ------------------------------
DATA_0007 /dev/mapper/hwdata06 DATA DATA_0007
DATA_0006 /dev/mapper/hwdata05 DATA DATA_0006
SYSDG_0003 /dev/mapper/hwocr01 SYSDG SYSDG_0003
DATA_0004 /dev/mapper/hwdata03 DATA DATA_0004
DATA_0009 /dev/mapper/hwdata08 DATA DATA_0009
DATA_0005 /dev/mapper/hwdata04 DATA DATA_0005
DATA_0008 /dev/mapper/hwdata07 DATA DATA_0008
ARCH_0001 /dev/mapper/hwarch01 ARCH ARCH_0001
ARCH_0000 /dev/mapper/arch ARCH ARCH_0000
DATA_0003 /dev/mapper/hwdata02 DATA DATA_0003
DATA_0002 /dev/mapper/hwdata01 DATA DATA_0002
SYSDG_0004 /dev/mapper/hwocr02 SYSDG SYSDG_0004
SYSDG_0005 /dev/mapper/hwocr03 SYSDG SYSDG_0005
ARCH_0000 /dev/mapper/arch ARCH ARCH_0000
SYSDG_0001 /dev/mapper/ocr2 SYSDG SYSDG_0001
DATA_0001 /dev/mapper/data2 DATA DATA_0001
DATA_0000 /dev/mapper/data1 DATA DATA_0000
SYSDG_0002 /dev/mapper/ocr3 SYSDG SYSDG_0002
SYSDG_0000 /dev/mapper/ocr1 SYSDG SYSDG_0000
-------------------------------------------------------------------------------------------------------------------
从现有 ASM 磁盘组中移除 ASM 磁盘
alter diskgroup TESTDG drop disk DATADG_0010 [rebalance power n];
磁盘组:OCR
SQL>alter diskgroup SYSDG drop disk SYSDG_0000 rebalance power 10;
SQL>alter diskgroup SYSDG drop disk SYSDG_0001 rebalance power 10;
SQL>alter diskgroup SYSDG drop disk SYSDG_0002 rebalance power 10;
磁盘组:DATA
SQL> alter diskgroup DATA drop disk DATA_0000 rebalance power 10;
SQL> alter diskgroup DATA drop disk DATA_0001 rebalance power 10;
磁盘组:ARCH
SQL> alter diskgroup ARCH drop disk ARCH_0000 rebalance power 10;
查询ASM磁盘状态
首先,完成旧的ASM磁盘删除后,观察rebalance情况:
SQL> select * from v$asm_operation;
SQL> select * from v$asm_operation;
no rows selected
查询没有记录,说明rebalance完成,确认无误。
4.3.2.查询删除ASM磁盘后的状态
SQL> select NAME, ALLOCATION_UNIT_SIZE, STATE, TOTAL_MB, FREE_MB USABLE_FILE_MB from gv$asm_diskgroup;
SQL> select failgroup, name from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name = 'SYSDG');
SQL> select failgroup, name from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name = 'DATA');
SQL> select failgroup, name from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name = 'ARCH');
至此,完成存储的迁移,新的磁盘已替换旧的磁盘。
SQL> select failgroup, name from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name = 'SYSDG');
FAILGROUP NAME
------------------------------ ------------------------------
SYSDG_0004 SYSDG_0004
SYSDG_0005 SYSDG_0005
SYSDG_0003 SYSDG_0003
SQL> select failgroup, name from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name = 'DATA');
FAILGROUP NAME
------------------------------ ------------------------------
DATA_0007 DATA_0007
DATA_0005 DATA_0005
DATA_0004 DATA_0004
DATA_0009 DATA_0009
DATA_0008 DATA_0008
DATA_0006 DATA_0006
DATA_0002 DATA_0002
DATA_0003 DATA_0003
8 rows selected.
SQL> select failgroup, name from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name = 'ARCH');
FAILGROUP NAME
------------------------------ ------------------------------
ARCH_0001 ARCH_0001
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 4096 1048576 512000 470466 0 470466 0 N ARCH/
MOUNTED EXTERN N 512 4096 1048576 8388608 6475437 0 6475437 0 N DATA/
MOUNTED NORMAL N 512 4096 1048576 30720 29794 10240 9777 0 Y SYSDG/
ASMCMD> lsdsk
Path
/dev/mapper/hwarch01
/dev/mapper/hwdata01
/dev/mapper/hwdata02
/dev/mapper/hwdata03
/dev/mapper/hwdata04
/dev/mapper/hwdata05
/dev/mapper/hwdata06
/dev/mapper/hwdata07
/dev/mapper/hwdata08
/dev/mapper/hwocr01
/dev/mapper/hwocr02
/dev/mapper/hwocr03