This article demonstrates how to relocate Oracle Database 19c CDB and PDB datafiles from a filesystem to ASM using RMAN. The original datafiles were located under /u01/app/oracle/oradata/PROD and its PDB directories. The destination was the ASM disk group +DATA.
Prerequisites
- Take a valid backup of the database and verify that the backup is usable before starting the migration.
- Ensure the target ASM disk group
+DATAis created, mounted, and has sufficient free space to accommodate all datafiles and tempfiles being relocated. - Verify that the Oracle user has the required operating-system, SQL*Plus, RMAN, and ASM access.
- Plan for database downtime. The database must be shut down and started in MOUNT mode before the permanent datafiles are switched to their ASM copies.
- Expected Downtime: The database will be unavailable during the shutdown, mount, datafile switch, validation, and database-open activities. The actual downtime depends primarily on the number and size of datafiles and the time required for validation.
- For this procedure, schedule an appropriate maintenance window and ensure application users are disconnected before shutting down the database.
- After the migration, validate the database, PDB status, permanent datafiles, tempfiles, and ASM space before removing the old filesystem files.
1. Check CDB and PDB Status
Check all containers
SET LINESIZE 250
SET PAGESIZE 100
SET TAB OFF
SET TRIMSPOOL ON
SELECT con_id,
name,
open_mode
FROM v$containers
ORDER BY con_id;
CON_ID NAME OPEN_MODE
------ ------------ -----------
1 CDB$ROOT READ WRITE
2 PDB$SEED READ ONLY
3 PRODPDB READ WRITE
2. Identify Datafiles on the Filesystem
Before starting the relocation, list the CDB datafiles that are currently under /u01.
List filesystem datafiles
COLUMN CON_ID FORMAT 999
COLUMN CONTAINER_NAME FORMAT A20
COLUMN FILE_ID FORMAT 9999
COLUMN TABLESPACE_NAME FORMAT A20
COLUMN FILE_NAME FORMAT A70
COLUMN SIZE_MB FORMAT 999,999,990.00
COLUMN STATUS FORMAT A10
COLUMN AUTOEXTENSIBLE FORMAT A15
SELECT c.con_id,
c.name AS container_name,
d.file_id,
d.tablespace_name,
d.file_name,
ROUND(d.bytes/1024/1024,2) AS size_mb,
d.status,
d.autoextensible
FROM cdb_data_files d
JOIN v$containers c
ON c.con_id = d.con_id
WHERE d.file_name LIKE '/u01/%'
ORDER BY c.con_id, d.file_id;
CON_ID CONTAINER_NAME FILE_ID TABLESPACE_NAME FILE_NAME SIZE_MB STATUS AUTOEXTENSIBLE
1 CDB$ROOT 1 SYSTEM /u01/app/oracle/oradata/PROD/system01.dbf 1,160.00 AVAILABLE YES
1 CDB$ROOT 3 SYSAUX /u01/app/oracle/oradata/PROD/sysaux01.dbf 1,010.00 AVAILABLE YES
1 CDB$ROOT 4 UNDOTBS1 /u01/app/oracle/oradata/PROD/undotbs01.dbf 820.00 AVAILABLE YES
1 CDB$ROOT 7 USERS /u01/app/oracle/oradata/PROD/users01.dbf 5.00 AVAILABLE YES
3 PRODPDB 9 SYSTEM /u01/app/oracle/oradata/PROD/PRODPDB/system01.dbf 500.00 AVAILABLE YES
3 PRODPDB 10 SYSAUX /u01/app/oracle/oradata/PROD/PRODPDB/sysaux01.dbf 530.00 AVAILABLE YES
3 PRODPDB 11 UNDOTBS1 /u01/app/oracle/oradata/PROD/PRODPDB/undotbs01.dbf 270.00 AVAILABLE YES
3 PRODPDB 12 USERS /u01/app/oracle/oradata/PROD/PRODPDB/users01.dbf 5.00 AVAILABLE YES
8 rows selected.
3. Check Tempfiles on the Filesystem
List CDB tempfiles
COLUMN CON_ID FORMAT 999
COLUMN TABLESPACE_NAME FORMAT A20
COLUMN FILE_ID FORMAT 9999
COLUMN FILE_NAME FORMAT A70
COLUMN SIZE_MB FORMAT 999,999,990.00
COLUMN AUTOEXTENSIBLE FORMAT A15
SELECT con_id,
tablespace_name,
file_id,
file_name,
ROUND(bytes/1024/1024,2) AS size_mb,
autoextensible
FROM cdb_temp_files
WHERE file_name LIKE '/u01/%'
ORDER BY con_id, file_id;
CON_ID TABLESPACE_NAME FILE_ID FILE_NAME
1 TEMP 1 /u01/app/oracle/oradata/PROD/temp01.dbf 221.00 YES
3 TEMP 3 /u01/app/oracle/oradata/PROD/PRODPDB/temp012026-08-09_17-02-37-037-PM.dbf 211.00 YES
4. Verify ASM Destination Capacity
Check +DATA capacity
COLUMN NAME FORMAT A15
COLUMN STATE FORMAT A10
COLUMN TYPE FORMAT A10
COLUMN TOTAL_MB FORMAT 999,999,990
COLUMN FREE_MB FORMAT 999,999,990
COLUMN USED_PCT FORMAT 990.00
SELECT name,
state,
type,
total_mb,
free_mb,
ROUND((total_mb-free_mb)/total_mb*100,2) AS used_pct
FROM v$asm_diskgroup
WHERE name = 'DATA';
NAME STATE TYPE TOTAL_MB FREE_MB USED_PCT
DATA CONNECTED EXTERN 40,960 34,760 15.14
5. Generate RMAN Commands for the Datafiles
Instead of manually typing every file name, generate the RMAN copy commands directly from CDB_DATA_FILES.
Generate BACKUP AS COPY commands
SET LINESIZE 250
SET PAGESIZE 100
COLUMN RMAN_COMMAND FORMAT A250
SELECT
'BACKUP AS COPY DATAFILE ''' ||
file_name ||
''' FORMAT ''+DATA'';'
AS rman_command
FROM cdb_data_files
WHERE file_name LIKE '/u01/%'
ORDER BY con_id, file_id;
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/system01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/sysaux01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/undotbs01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/users01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/system01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/sysaux01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/undotbs01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/users01.dbf' FORMAT '+DATA';
8 rows selected.Generate SWITCH commands
SELECT
'SWITCH DATAFILE ''' ||
file_name ||
''' TO COPY;'
AS rman_command
FROM cdb_data_files
WHERE file_name LIKE '/u01/%'
ORDER BY con_id, file_id;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/system01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/sysaux01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/undotbs01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/users01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/system01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/sysaux01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/undotbs01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/users01.dbf' TO COPY;
8 rows selected.
6. Shutdown the Database and Start in MOUNT Mode
Shutdown
SHUT IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.Start in MOUNT mode
STARTUP MOUNT
ORACLE instance started.
Total System Global Area 1694498312 bytes
Fixed Size 9178632 bytes
Variable Size 436207616 bytes
Database Buffers 1241513984 bytes
Redo Buffers 7598080 bytes
Database mounted.
7. Connect to RMAN
Connect with RMAN
rman target /
Recovery Manager: Release 19.0.0.0.0 - Production
Version 19.28.0.0.0
connected to target database: PROD (DBID=652689500, not open)
RMAN>
8. Create ASM Copies of the CDB and PRODPDB Datafiles
Create ASM copies of all CDB root and PRODPDB datafiles in a single RMAN run block.
RUN
{
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/system01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/sysaux01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/undotbs01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/users01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/system01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/sysaux01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/undotbs01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/users01.dbf' FORMAT '+DATA';
}
Starting backup at 20-AUG-26
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/PROD/system01.dbf
output file name=+DATA/PROD/DATAFILE/system.275.1241826175 tag=TAG20260820T234254 RECID=4 STAMP=1241826177
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 20-AUG-26
Starting backup at 20-AUG-26
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/PROD/sysaux01.dbf
output file name=+DATA/PROD/DATAFILE/sysaux.288.1241826187 tag=TAG20260820T234307 RECID=5 STAMP=1241826189
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 20-AUG-26
Starting backup at 20-AUG-26
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/PROD/undotbs01.dbf
output file name=+DATA/PROD/DATAFILE/undotbs1.283.1241826229 tag=TAG20260820T234348 RECID=6 STAMP=1241826229
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 20-AUG-26
Starting backup at 20-AUG-26
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00007 name=/u01/app/oracle/oradata/PROD/users01.dbf
output file name=+DATA/PROD/DATAFILE/users.279.1241826231 tag=TAG20260820T234351 RECID=7 STAMP=1241826231
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 20-AUG-26
Starting backup at 20-AUG-26
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00009 name=/u01/app/oracle/oradata/PROD/PRODPDB/system01.dbf
output file name=+DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/system.292.1241826233 tag=TAG20260820T234352 RECID=8 STAMP=1241826233
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 20-AUG-26
Starting backup at 20-AUG-26
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00010 name=/u01/app/oracle/oradata/PROD/PRODPDB/sysaux01.dbf
output file name=+DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/sysaux.290.1241826235 tag=TAG20260820T234355 RECID=9 STAMP=1241826236
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 20-AUG-26
Starting backup at 20-AUG-26
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00011 name=/u01/app/oracle/oradata/PROD/PRODPDB/undotbs01.dbf
output file name=+DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/undotbs1.291.1241826239 tag=TAG20260820T234358 RECID=10 STAMP=1241826240
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 20-AUG-26
Starting backup at 20-AUG-26
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00012 name=/u01/app/oracle/oradata/PROD/PRODPDB/users01.dbf
output file name=+DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/users.289.1241826241 tag=TAG20260820T234401 RECID=11 STAMP=1241826241
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 20-AUG-26
Starting Control File and SPFILE Autobackup at 20-AUG-26
Finished Control File and SPFILE Autobackup at 20-AUG-26
10. Switch the Datafiles to the ASM Copies
After creating the datafile copies, switch the database datafiles to their ASM copies.
Switch CDB Root and PRODPDB datafiles
RUN
{
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/system01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/sysaux01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/undotbs01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/users01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/system01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/sysaux01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/undotbs01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/PRODPDB/users01.dbf' TO COPY;
}
datafile 1 switched to datafile copy "+DATA/PROD/DATAFILE/system.275.1241826175"
datafile 3 switched to datafile copy "+DATA/PROD/DATAFILE/sysaux.288.1241826187"
datafile 4 switched to datafile copy "+DATA/PROD/DATAFILE/undotbs1.283.1241826229"
datafile 7 switched to datafile copy "+DATA/PROD/DATAFILE/users.279.1241826231"
datafile 9 switched to datafile copy "+DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/system.292.1241826233"
datafile 10 switched to datafile copy "+DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/sysaux.290.1241826235"
datafile 11 switched to datafile copy "+DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/undotbs1.291.1241826239"
datafile 12 switched to datafile copy "+DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/users.289.1241826241"
11. Verify the Permanent Datafiles Before Tempfile Relocation
RMAN REPORT SCHEMA
REPORT SCHEMA;
File Size(MB) Tablespace Datafile Name
---- -------- ------------------ ------------------------------------------------------------
1 1160 SYSTEM +DATA/PROD/DATAFILE/system.275.1241826175
3 1010 SYSAUX +DATA/PROD/DATAFILE/sysaux.288.1241826187
4 820 UNDOTBS1 +DATA/PROD/DATAFILE/undotbs1.283.1241826229
5 490 PDB$SEED:SYSTEM /u01/app/oracle/oradata/PROD/pdbseed/system01.dbf
6 450 PDB$SEED:SYSAUX /u01/app/oracle/oradata/PROD/pdbseed/sysaux01.dbf
7 5 USERS +DATA/PROD/DATAFILE/users.279.1241826231
8 270 PDB$SEED:UNDOTBS1 /u01/app/oracle/oradata/PROD/pdbseed/undotbs01.dbf
9 500 PRODPDB:SYSTEM +DATA/PROD/.../DATAFILE/system.292.1241826233
10 530 PRODPDB:SYSAUX +DATA/PROD/.../DATAFILE/sysaux.290.1241826235
11 270 PRODPDB:UNDOTBS1 +DATA/PROD/.../DATAFILE/undotbs1.291.1241826239
12 5 PRODPDB:USERS +DATA/PROD/.../DATAFILE/users.289.1241826241
13 1024 PRODPDB:AUDIT_DATA +DATA/PROD/.../DATAFILE/audit_data.284.1240862891
12. Relocate PDB$SEED Datafiles
Copy PDB$SEED datafiles
RUN
{
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/pdbseed/system01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/pdbseed/sysaux01.dbf' FORMAT '+DATA';
BACKUP AS COPY DATAFILE '/u01/app/oracle/oradata/PROD/pdbseed/undotbs01.dbf' FORMAT '+DATA';
}
input datafile file number=00005 name=/u01/app/oracle/oradata/PROD/pdbseed/system01.dbf
output file name=+DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/system.278.1241826465
input datafile file number=00006 name=/u01/app/oracle/oradata/PROD/pdbseed/sysaux01.dbf
output file name=+DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/sysaux.277.1241826467
input datafile file number=00008 name=/u01/app/oracle/oradata/PROD/pdbseed/undotbs01.dbf
output file name=+DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/undotbs1.276.1241826469Switch PDB$SEED datafiles individually
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/pdbseed/sysaux01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/pdbseed/undotbs01.dbf' TO COPY;
SWITCH DATAFILE '/u01/app/oracle/oradata/PROD/pdbseed/system01.dbf' TO COPY;
datafile 6 switched to datafile copy "+DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/sysaux.277.1241826467"
datafile 8 switched to datafile copy "+DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/undotbs1.276.1241826469"
datafile 5 switched to datafile copy "+DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/system.278.1241826465"
13. Relocate Temporary Files to ASM
Tempfiles are handled separately from permanent datafiles. Use RMAN to set new names for all three tempfiles and then switch them.
Move all tempfiles to +DATA
RUN
{
SET NEWNAME FOR TEMPFILE 1 TO '+DATA';
SET NEWNAME FOR TEMPFILE 2 TO '+DATA';
SET NEWNAME FOR TEMPFILE 3 TO '+DATA';
SWITCH TEMPFILE ALL;
}
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
renamed tempfile 1 to +DATA in control file
renamed tempfile 2 to +DATA in control file
renamed tempfile 3 to +DATA in control file
14. Verify the Complete ASM Layout
REPORT SCHEMA after tempfile switch
REPORT SCHEMA;
# List of Permanent Datafiles
1 1160 SYSTEM +DATA/PROD/DATAFILE/system.275.1241826175
3 1010 SYSAUX +DATA/PROD/DATAFILE/sysaux.288.1241826187
4 820 UNDOTBS1 +DATA/PROD/DATAFILE/undotbs1.283.1241826229
5 490 PDB$SEED:SYSTEM +DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/system.278.1241826465
6 450 PDB$SEED:SYSAUX +DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/sysaux.277.1241826467
7 5 USERS +DATA/PROD/DATAFILE/users.279.1241826231
8 270 PDB$SEED:UNDOTBS1 +DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/undotbs1.276.1241826469
9 500 PRODPDB:SYSTEM +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/system.292.1241826233
10 530 PRODPDB:SYSAUX +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/sysaux.290.1241826235
11 270 PRODPDB:UNDOTBS1 +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/undotbs1.291.1241826239
12 5 PRODPDB:USERS +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/users.289.1241826241
13 1024 PRODPDB:AUDIT_DATA +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/audit_data.284.1240862891
# List of Temporary Files
1 221 TEMP +DATA
2 211 PDB$SEED:TEMP +DATA
3 211 PRODPDB:TEMP +DATA
15. Open the Database
Open database
ALTER DATABASE OPEN;
Statement processedFinal RMAN REPORT SCHEMA
REPORT SCHEMA;
# List of Permanent Datafiles
1 1160 SYSTEM YES +DATA/PROD/DATAFILE/system.275.1241826175
3 1010 SYSAUX NO +DATA/PROD/DATAFILE/sysaux.288.1241826187
4 820 UNDOTBS1 YES +DATA/PROD/DATAFILE/undotbs1.283.1241826229
5 490 PDB$SEED:SYSTEM NO +DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/system.278.1241826465
6 450 PDB$SEED:SYSAUX NO +DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/sysaux.277.1241826467
7 5 USERS NO +DATA/PROD/DATAFILE/users.279.1241826231
8 270 PDB$SEED:UNDOTBS1 NO +DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/undotbs1.276.1241826469
9 500 PRODPDB:SYSTEM YES +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/system.292.1241826233
10 530 PRODPDB:SYSAUX NO +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/sysaux.290.1241826235
11 270 PRODPDB:UNDOTBS1 YES +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/undotbs1.291.1241826239
12 5 PRODPDB:USERS NO +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/users.289.1241826241
13 1024 PRODPDB:AUDIT_DATA NO +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/audit_data.284.1240862891
# List of Temporary Files
1 221 TEMP +DATA/PROD/TEMPFILE/temp.285.1241826705
2 211 PDB$SEED:TEMP +DATA/PROD/589C98355962EE4FE0636538A8C03676/TEMPFILE/temp.286.1241826707
3 211 PRODPDB:TEMP +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/TEMPFILE/temp.287.1241826707
16. Validate the Database from SQL*Plus
Check PDB status
SHOW PDBS
CON_ID CON_NAME OPEN MODE RESTRICTED
2 PDB$SEED READ ONLY NO
3 PRODPDB READ WRITE NOCheck tempfiles
SELECT con_id,
tablespace_name,
file_id,
file_name,
status
FROM cdb_temp_files
ORDER BY con_id, file_id;
CON_ID TABLESPACE_NAME FILE_ID FILE_NAME STATUS
1 TEMP 1 +DATA/PROD/TEMPFILE/temp.285.1241826705 ONLINE
3 TEMP 3 +DATA/PROD/.../TEMPFILE/temp.287.1241826707 ONLINECheck database role and open mode
SELECT name,
open_mode,
database_role,
db_unique_name
FROM v$database;
NAME OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
PROD READ WRITE PRIMARY PRODCheck all CDB datafiles
SELECT c.con_id,
c.name AS container_name,
d.file_id,
d.tablespace_name,
d.file_name,
ROUND(d.bytes/1024/1024,2) AS size_mb,
d.status
FROM cdb_data_files d
JOIN v$containers c
ON c.con_id = d.con_id
ORDER BY c.con_id, d.file_id;
1 CDB$ROOT 1 SYSTEM +DATA/PROD/DATAFILE/system.275.1241826175
1 CDB$ROOT 3 SYSAUX +DATA/PROD/DATAFILE/sysaux.288.1241826187
1 CDB$ROOT 4 UNDOTBS1 +DATA/PROD/DATAFILE/undotbs1.283.1241826229
1 CDB$ROOT 7 USERS +DATA/PROD/DATAFILE/users.279.1241826231
3 PRODPDB 9 SYSTEM +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/system.292.1241826233
3 PRODPDB 10 SYSAUX +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/sysaux.290.1241826235
3 PRODPDB 11 UNDOTBS1 +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/undotbs1.291.1241826239
3 PRODPDB 12 USERS +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/users.289.1241826241
3 PRODPDB 13 AUDIT_DATA +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/audit_data.284.1240862891Check V$DATAFILE
SELECT file#,
name,
status,
enabled
FROM v$datafile
ORDER BY file#;
1 +DATA/PROD/DATAFILE/system.275.1241826175 SYSTEM READ WRITE
3 +DATA/PROD/DATAFILE/sysaux.288.1241826187 ONLINE READ WRITE
4 +DATA/PROD/DATAFILE/undotbs1.283.1241826229 ONLINE READ WRITE
5 +DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/system.278.1241826465 SYSTEM READ WRITE
6 +DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/sysaux.277.1241826467 ONLINE READ WRITE
7 +DATA/PROD/DATAFILE/users.279.1241826231 ONLINE READ WRITE
8 +DATA/PROD/589C98355962EE4FE0636538A8C03676/DATAFILE/undotbs1.276.1241826469 ONLINE READ WRITE
9 +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/system.292.1241826233 SYSTEM READ WRITE
10 +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/sysaux.290.1241826235 ONLINE READ WRITE
11 +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/undotbs1.291.1241826239 ONLINE READ WRITE
12 +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/users.289.1241826241 ONLINE READ WRITE
13 +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/DATAFILE/audit_data.284.1240862891 ONLINE READ WRITECheck datafile headers
SELECT file#,
status,
error,
recover
FROM v$datafile_header
ORDER BY file#;
1 ONLINE NO
3 ONLINE NO
4 ONLINE NO
5 ONLINE
6 ONLINE
7 ONLINE NO
8 ONLINE
9 ONLINE NO
10 ONLINE NO
11 ONLINE NO
12 ONLINE NO
13 ONLINE NO
12 rows selected.Check tempfiles and maximum size
SELECT con_id,
tablespace_name,
file_id,
file_name,
ROUND(bytes/1024/1024,2) AS size_mb,
ROUND(maxbytes/1024/1024,2) AS maxsize_mb,
status
FROM cdb_temp_files
ORDER BY con_id, file_id;
1 TEMP 1 +DATA/PROD/TEMPFILE/temp.285.1241826705 221.00 32,767.98 ONLINE
3 TEMP 3 +DATA/PROD/589D6350A5B241DAE0636538A8C021C3/TEMPFILE/temp.287.1241826707 211.00 32,767.98 ONLINECheck temporary tablespaces
SELECT con_id,
tablespace_name AS name,
status,
contents
FROM cdb_tablespaces
WHERE contents = 'TEMPORARY'
ORDER BY con_id;
CON_ID NAME STATUS CONTENTS
1 TEMP ONLINE TEMPORARY
3 TEMP ONLINE TEMPORARYCheck ASM capacity after migration
SELECT name,
state,
type,
total_mb,
free_mb,
ROUND((total_mb-free_mb)/total_mb*100,2) AS used_pct
FROM v$asm_diskgroup
WHERE name = 'DATA';
NAME STATE TYPE TOTAL_MB FREE_MB USED_PCT
DATA CONNECTED EXTERN 40,960 28,536 30.33
17. Clean Up the Old Datafile Copies
After validating the database from ASM, remove the old filesystem datafile copies from RMAN.
Delete old datafile copies
RUN
{
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/system01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/sysaux01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/undotbs01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/users01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/PRODPDB/system01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/PRODPDB/sysaux01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/PRODPDB/undotbs01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/PRODPDB/users01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/pdbseed/system01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/pdbseed/sysaux01.dbf';
DELETE DATAFILECOPY '/u01/app/oracle/oradata/PROD/pdbseed/undotbs01.dbf';
}
List of Datafile Copies
=======================
Name: /u01/app/oracle/oradata/PROD/system01.dbf
Do you really want to delete the above objects (enter YES or NO)? yes
deleted datafile copy
Deleted 1 objects
The same successful deletion pattern was repeated for the remaining old CDB, PRODPDB and PDB$SEED datafile copies.
18. Remove the Old Tempfile Files
After validating the tempfiles on ASM, remove the old filesystem tempfile files at the operating-system level.
Remove old tempfiles
rm -f /u01/app/oracle/oradata/PROD/temp01.dbf
rm -f /u01/app/oracle/oradata/PROD/pdbseed/temp012026-08-09_17-02-37-037-PM.dbf
rm -f /u01/app/oracle/oradata/PROD/PRODPDB/temp012026-08-09_17-02-37-037-PM.dbf
Final Result
+DATA. The active tempfiles were also on +DATA, the database was READ WRITE with role PRIMARY, and all checked datafiles were online/read-write.
Environment used in this execution: Oracle Database 19c Enterprise Edition, version 19.28.0.0.0, database PROD, CDB with PRODPDB, ASM disk group +DATA.