In this post I will share how to perform an online move of an Oracle 19c RAC database to a Pure Storage ActiveCluster Pod to provide Active-Active synchronous replicated storage for an extended / stretched Oracle RAC cluster.
Step 1 – ActiveCluster Pod
The first step is to create a Pod, in the example below my Pod is called z-racpod.

Step 2 – FA Volumes
Create new FlashArray Volumes specifying the Pod name, Volume Name and Size.

As I am using ActiveCluster I can Create Volumes on either side, and ActiveCluster replicates the configuration onto the other array.
We can now see the Volumes, note the Volume Names are prefixed with the Pod Name::

Step 3 – Linux Database Servers
Configure the Linux /etc/multipath.conf on both servers, once complete rescan the SCSI bus to see the newly presented Volumes.
Confirm new volumes are visible on both sides of the cluster, number of paths correct and preferred path is correctly set, using multipath -ll for example.

And again for the remote database server.

From the above we can see 8 paths, 4 to each FlashArray with a preference of local array, in this example
Oracle RAC node z-rac1 -> z-m20-a
and
Oracle RAC node z-rac2 -> z-m20-b
Step 4 – Oracle ASM Rebalance
Moving a single disk is nice and simple, specify the disk to add, drop, the rebalance power, and I usually specify wait, so I don’t have monitor progress, for example.
SQL> alter diskgroup CONTROL_REDO add disk '/dev/mapper/dg_racpod_control_redo' drop disk 'CONTROL_REDO_0001' rebalance power 100 wait;
We can also relocate multiple volumes in a single command, for example this is how I moved my +DATA diskgroup disks.
SQL> alter diskgroup DATA add disk 2 '/dev/mapper/dg_racpod_data01', 3 '/dev/mapper/dg_racpod_data02', 4 '/dev/mapper/dg_racpod_data03', 5 '/dev/mapper/dg_racpod_data04' 6 drop disk 'DATA_0004', 'DATA_0005', 'DATA_0006', 'DATA_0007' 7 rebalance power 100 wait;
asm_layout.sql
SET LINESIZE 200
SET PAGESIZE 100
col groupname format a25 heading 'Disk Group'
col path format a35 heading 'LUN Path'
col diskname format a20 heading 'Disk Name'
col sector_size format 9,999 heading 'Sector |Size'
col block_size format 99,999 heading 'Block |Size'
col state format a10 heading 'State'
col au format 9,999,999 heading 'AU Size'
col total_gig format 999,999 heading 'Group |Total |GB'
col dtotal_gig format 999,999 heading 'Disk |Total |GB'
col free_gig format 999,999 heading 'Group |Free |GB'
col dfree_gig format 999,999 heading 'Disk |Free |GB'
SELECT
g.name groupname,
d.path,
d.name diskname,
d.total_mb/1024 dtotal_gig,
d.free_mb/1024 dfree_gig
FROM
v$asm_diskgroup g, v$asm_disk d
WHERE
d.group_number = g.group_number
ORDER BY
g.name, d.disk_number
/
EXIT
Using the above sql we can view the Oracle ASM layout and status of migration.
[oracle@z-rac1 ~]$ sqlplus / as sysasm @asm_layout.sql SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jun 16 15:39:02 2022 Version 19.13.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.13.0.0.0 Disk Disk Total Free Disk Group LUN Path Disk Name GB GB ------------------------- ----------------------------------- -------------------- -------- -------- ACFS /dev/mapper/dg_racpod_acfs01 ACFS_0000 10,240 8,192 CONTROL_REDO /dev/mapper/dg_racpod_control_redo CONTROL_REDO_0000 200 200 DATA /dev/mapper/dg_racpod_data01 DATA_0000 2,560 1,628 DATA /dev/mapper/dg_racpod_data02 DATA_0001 2,560 1,628 DATA /dev/mapper/dg_racpod_data03 DATA_0002 2,560 1,628 DATA /dev/mapper/dg_racpod_data04 DATA_0003 2,560 1,628 DATA /dev/mapper/dg_rac_data01_new DATA_0004 2,560 1,731 DATA /dev/mapper/dg_rac_data02_new DATA_0005 2,560 1,731 DATA /dev/mapper/dg_rac_data03_new DATA_0006 2,560 1,731 DATA /dev/mapper/dg_rac_data04_new DATA_0007 2,560 1,731 FRA /dev/mapper/dg_racpod_fra FRA_0000 3,072 3,057 MGMT /dev/mapper/dg_racpod_gimr MGMT_0000 100 44 OCR /dev/mapper/dg_racpod_crs OCR_0000 50 50
We can monitor progress, and obtain an estimate for the remaining duration by querying the GV$ASM_OPERATION view, for example
[oracle@z-rac2 ~]$ sqlplus / as sysasm SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jun 16 15:42:13 2022 Version 19.13.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.13.0.0.0 SQL> select INST_ID, OPERATION, STATE, POWER, SOFAR, EST_WORK, EST_RATE, EST_MINUTES from GV$ASM_OPERATION; INST_ID OPERA STAT POWER SOFAR EST_WORK EST_RATE EST_MINUTES ---------- ----- ---- ---------- ---------- ---------- ---------- ----------- 2 REBAL WAIT 100 0 0 0 0 2 REBAL RUN 100 1001604 1803174 10977 73 2 REBAL DONE 100 0 0 0 0 1 REBAL WAIT 100 1 REBAL WAIT 100 1 REBAL WAIT 100 6 rows selected.
Step 5 – Confirm Configuration
Once complete, re-run the asm_layout.sql to confirm the move is complete
[oracle@z-rac1 ~]$ sqlplus / as sysasm @asm_layout.sql SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jun 16 16:55:26 2022 Version 19.13.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.13.0.0.0 Disk Disk Total Free Disk Group LUN Path Disk Name GB GB ------------------------- ----------------------------------- -------------------- -------- -------- ACFS /dev/mapper/dg_racpod_acfs01 ACFS_0000 10,240 8,192 CONTROL_REDO /dev/mapper/dg_racpod_control_redo CONTROL_REDO_0000 200 200 DATA /dev/mapper/dg_racpod_data01 DATA_0000 2,560 799 DATA /dev/mapper/dg_racpod_data02 DATA_0001 2,560 799 DATA /dev/mapper/dg_racpod_data03 DATA_0002 2,560 799 DATA /dev/mapper/dg_racpod_data04 DATA_0003 2,560 799 FRA /dev/mapper/dg_racpod_fra FRA_0000 3,072 3,057 MGMT /dev/mapper/dg_racpod_gimr MGMT_0000 100 44 OCR /dev/mapper/dg_racpod_crs OCR_0000 50 50 9 rows selected. Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.13.0.0.0
Logging onto the two FlashArray UIs, we can see the replicated Volumes with the ActiveCluster Pod.

And again.

Summary
In this post I have shared how we can migrate an Oracle 19c RAC database into a Pure ActiveCluster Pod to support an extended / stretched RAC cluster.
In my next post I will share how ActiveCluster can be used to deliver HA and DR with a stretched RAC cluster across two data centres.
Leave a Reply