如何在线迁移ASM磁盘组到另一个存储

当涉及ASMLIB设备时,如何在线迁移ASM磁盘组到另一个存储?

此过程也适用于托管 OCR、投票文件和 ASM spfile 的磁盘组。

注意:这些步骤适用于外部、正常和高冗余磁盘组。

https://onitroad.com 更多教程

删除旧的 ASM 磁盘

  1. 最后,删除旧磁盘:

语法

SQL> alter diskgroup [diskgroup name] drop disk
[disk name A],
[disk name B] rebalance power #N;

例如 :

SQL> alter diskgroup DATA drop disk
ASMDISK_OLD_SAN_1,
ASMDISK_OLD_SAN_2 rebalance power 11;
  1. 然后等待重新平衡操作完成:
SQL> select * from v$asm_operation;
no rows selected
SQL> select * from gv$asm_operation;
no rows selected

在旧磁盘完全从磁盘组中驱逐后, ASM 磁盘组和数据库已迁移到新存储。

一起执行添加和删除操作

  1. 或者,我们可以在一次操作中执行add disk & drop disk语句,这样只会启动一次rebalance操作,如下所示:
    语法
SQL> alter diskgroup [diskgroup name]
add disk '[new disk 1>', .., '[new disk N]'
drop disk [old disk 1>,  .., '[old disk N] rebalance power N;

例如 :

SQL> alter diskgroup DATA add disk
'ORCL:ASMDISK_NEW_SAN_1',
'ORCL:ASMDISK_NEW_SAN_2'
drop disk
ASMDISK_OLD_SAN_1,
ASMDISK_OLD_SAN_2 rebalance power 11;
  1. 这比单独的命令(添加磁盘和删除磁盘语句)更有效。
    然后等待重新平衡操作完成:
SQL> select * from v$asm_operation;
no rows selected
SQL> select * from gv$asm_operation;
no rows selected

添加新的 ASM 磁盘

  1. 将新磁盘添加到所需的磁盘组,如下所示:
    语法
SQL> alter diskgroup [diskgroup name] add disk
'[new disk 1]',
'[new disk 2]' rebalance power N;

例如 :

SQL> alter diskgroup DATA add disk
'ORCL:ASMDISK_NEW_SAN_1',
'ORCL:ASMDISK_NEW_SAN_2' rebalance power 11;
  1. 然后等待重新平衡操作完成:
SQL> select * from v$asm_operation;
no rows selected
SQL> select * from gv$asm_operation;
no rows selected

创建新的 ASM 磁盘

如果我们需要将与磁盘组关联的当前 ASMLIB 磁盘迁移并替换到新存储,那么我们可以在不停机的情况下执行此操作,因此我们可以执行以下步骤:

  1. 备份所有数据库并使备份生效(始终需要保护数据)。

  2. 以 root 操作系统用户身份使用“/etc/init.d/oracleasm createdisk”命令在新的存储物理磁盘上创建新的 ASMLIB 设备。
    例如:

# /etc/init.d/oracleasm createdisk ASMDISK_NEW_SAN_1 /dev/mapper/mpathbp1
# /etc/init.d/oracleasm createdisk ASMDISK_NEW_SAN_2 /dev/mapper/mpathcp1
  1. 如下扫描所有其他 RAC 节点上的新 ASMIB 磁盘(作为 root 操作系统用户)。
    在独立配置中,在 ASMLIB 磁盘创建期间会隐式扫描磁盘。
# /etc/init.d/oracleasm scandisks
  1. 确保新的 ASMLIB 磁盘和旧的 ASMLIB 磁盘存在于所有 RAC 集群节点或者独立配置上,如下所示:
# /etc/init.d/oracleasm listdisks
ASMDISK_NEW_SAN_1
ASMDISK_NEW_SAN_2
ASMDISK_OLD_SAN_1
ASMDISK_OLD_SAN_2
# /usr/sbin/oracleasm-discover 'ORCL:*'
Using ASMLib from /opt/oracle/extapi/64/asm/orcl/1/libasm.so
[ASM Library - Generic Linux, version 2.0.4 (KABI_V2)]
Discovered disk: ORCL:ASMDISK_NEW_SAN_1 [40017852 blocks (20489140224 bytes), maxio 512]
Discovered disk: ORCL:ASMDISK_NEW_SAN_2 [40017852 blocks (20489140224 bytes), maxio 512]
Discovered disk: ORCL:ASMDISK_OLD_SAN_1 [40017852 blocks (20489140224 bytes), maxio 512]
Discovered disk: ORCL:ASMDISK_OLD_SAN_2 [40017852 blocks (20489140224 bytes), maxio 512]
  1. 验证 ASM 发现字符串(“ASM_DISKSTRING”)是否正确指向 ASMLIB 设备(在所有 ASM 实例中),如下所示:
$ . oraenv
ORACLE_SID = [+ASM1] ? +ASM
The Oracle base remains unchanged with value /u01/app/grid
[grid@dbaasm ~]$ sqlplus "/as sysasm"
SQL*Plus: Release 11.2.0.3.0 Production on Mon Aug 18 18:39:28 2014
Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Automatic Storage Management option
SQL> show parameter  ASM_DISKSTRING
NAME                  TYPE        VALUE
------------------   ---------    -------------
asm_diskstring       string       ORCL:*
  1. 然后确认ASM正在检测新的ASMLIB磁盘和旧的ASMLIB磁盘,如下所示:
SQL> select path from v$asm_disk;
PATH
-------------------------
ORCL:ASMDISK_NEW_SAN_1
ORCL:ASMDISK_NEW_SAN_2
ORCL:ASMDISK_OLD_SAN_1
ORCL:ASMDISK_OLD_SAN_2
日期:2020-09-17 00:11:42 来源:oir作者:oir