Move Oracle Control File from File System to ASM

In this article, we will walk through a simple and safe method to move an Oracle control file from a traditional file system to ASM (Automatic Storage Management). This approach is useful when standardizing database storage on ASM or preparing for RAC or high-availability configurations.

In this example, one control file already exists on ASM, and we will move the remaining control file from the file system.


Step 1: Check Current Control File Locations

First, identify the existing control file locations.

SQL> SHOW PARAMETER control_files;

Output:

NAME TYPE VALUE --------------- ------- --------------------------------------------- control_files string /u02/oradata/FINDB1/control01.ctl, +RECO/FINDB1/control02.ctl

Here, the first control file is located on the file system, while the second one already resides in the ASM disk group +RECO.


Step 2: Start Database in NOMOUNT and Restore Control File to ASM

Use RMAN to start the database in NOMOUNT mode and copy the control file to ASM.

$ rman target /
RMAN> startup nomount; RMAN> restore controlfile to '+DATA' from
'/u02/oradata/FINDB1/control01.ctl';

This command copies the control file into the +DATA ASM disk group.


Step 3: Identify the New ASM Control File Name

ASM automatically assigns a system-generated name to the control file. Use asmcmd to locate it.

$ asmcmd find --type CONTROLFILE +DATA *

Output:

+DATA/FINDB1/CONTROLFILE/current.345.1187623491

Take note of this file path.


Step 4: Update the CONTROL_FILES Parameter

Update the control_files parameter to reflect the new ASM-based control file location.

SQL> ALTER SYSTEM SET control_files= '+DATA/FINDB1/CONTROLFILE/current.345.1187623491', '+RECO/FINDB1/control02.ctl' SCOPE=SPFILE;

This change is made in the SPFILE, so a database restart is required.


Step 5: Restart the Database

Restart the database to apply the changes.

SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;

Step 6: Verify the New Control File Locations

Finally, confirm that both control files are now using ASM.

SQL> SHOW PARAMETER control_files;

Output:

NAME TYPE VALUE --------------- ------- --------------------------------------------- control_files string +DATA/FINDB1/CONTROLFILE/current.345.1187623, +RECO/FINDB1/control02.ctl





Please do like and subscribe to my youtube channel: https://www.youtube.com/@foalabs If you like this post please follow,share and comment