Oracle 19c RAC database online migration to ActiveCluster for extended / stretched RAC clusters

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.

FlashArray Pods

Step 2 – FA Volumes

Create new FlashArray Volumes specifying the Pod name, Volume Name and Size.

Create Volume

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::

Example +DATA DiskGroup

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.

z-rac1

And again for the remote database server.

z-rac2

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.

z-rac1

And again.

z-rac2

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

Create a website or blog at WordPress.com

Up ↑

%d bloggers like this: