How to move a datafile from one ASM disk group to another

Explaining how to move datafile from one ASM DG to another.

Note: Database must be in archivelog mode before doing this activity.

1. Find the name of the datafile that you're going to migrate

SQL> SELECT file_name FROM dba_data_files;

FILE_NAME
----------------------------------------------
+DATA/mydb/datafile/system.312.825938943
+DATA/mydb/datafile/sysaux.313.825938957
+DATA/mydb/datafile/undotbs1.314.825938971
+DATA/mydb/datafile/undotbs2.315.825938991
+DATA/mydb/datafile/users.317.825939005
+DATA/mydb/datafile/mydb01.dbf
+RECO/mydb/datafile/mydb_tbs.7665.836338453 <Moving this file from +RECO to +DATA

7 rows selected.

2. Take the datafile offline

SQL> Alter database datafile '+RECO/mydb/datafile/mydb_tbs.7665.836338453' offline;
Database altered.

3. Copy the file using RMAN:

RMAN> COPY datafile '+RECO/mydb/datafile/mydb_tbs.7665.836338453' to '+DATA';
Starting backup at 18-FEB-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=493 instance=mydb device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00012 name=+RECO/mydb/datafile/mydb_tbs.7665.836338453
output file name=+DATA/mydb/datafile/mydb_tbs.385.839852436 tag=TAG20140218T122054 RECID=5 STAMP=839852676
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:03:45
Finished backup at 18-FEB-14

4. Change datafile's name to the new name to update data dictionary 

SQL> Alter database rename file '+RECO/mydb/datafile/mydb_tbs.7665.836338453' to '+DATA/mydb/datafile/mydb_tbs.385.839852436';
Database altered.

5. Rename the datafile using RMAN to update ASM. This command is equivalent of "alter database rename file":   

RMAN> SWITCH DATAFILE '+DATA/mydb/datafile/mydb_tbs.385.839852436' to copy;
using target database control file instead of recovery catalog
datafile 12 switched to datafile copy "+DATA/mydb/datafile/mydb_tbs.385.839852436"

6. Recover  the new datafile:

RMAN> RECOVER DATAFILE '+DATA/mydb/datafile/mydb_tbs.385.839852436';
Media recovery complete.

7. Bring it online

SQL> ALTER DATABASE DATAFILE '+DATA/mydb/datafile/mydb_tbs.385.839852436' ONLINE;
Database altered.

8. Now check datafile name

SQL> SELECT file_name FROM dba_data_files;

FILE_NAME
----------------------------------------------
+DATA/mydb/datafile/system.314.825938943
+DATA/mydb/datafile/sysaux.315.825938957
+DATA/mydb/datafile/undotbs1.316.825938971
+DATA/mydb/datafile/undotbs2.318.825938991
+DATA/mydb/datafile/users.319.825939005
+DATA/mydb/datafile/mydb01.dbf
+DATA/mydb/datafile/mydb_tbs.385.839852436  <<<< Datafile Name Changed in new DG

7 rows selected.

No comments:

Post a Comment