Online Move Datafile in Oracle Database 12c Release 1 (12.1)
Rename and relocate datafiles with no downtime in Oracle Database 12c Release 1 (12.1).
oracle 12cconfigurationintermediate
by OracleDba
13 views
Rename and relocate datafiles with no downtime in Oracle Database 12c Release 1 (12.1).
123456789101112131415161718192021222324252627282930
ALTER DATABASE MOVE DATAFILE ( 'filename' | 'ASM_filename' | file_number )
[ TO ( 'filename' | 'ASM_filename' ) ]
[ REUSE ] [ KEEP ]
SQL> CONN / AS SYSDBA
SQL> SET LINESIZE 100
SQL> COLUMN name FORMAT A70
SQL> SELECT file#, name FROM v$datafile WHERE con_id = 1 ORDER BY file#;
FILE# NAME
---------- ----------------------------------------------------------------------
1 /u01/app/oracle/oradata/cdb1/system01.dbf
3 /u01/app/oracle/oradata/cdb1/sysaux01.dbf
4 /u01/app/oracle/oradata/cdb1/undotbs01.dbf
6 /u01/app/oracle/oradata/cdb1/users01.dbf
SQL>
SQL> COLUMN file_name FORMAT A70
SELECT file_id, file_name FROM dba_data_files ORDER BY file_id;
FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
1 /u01/app/oracle/oradata/cdb1/system01.dbf
3 /u01/app/oracle/oradata/cdb1/sysaux01.dbf
4 /u01/app/oracle/oradata/cdb1/undotbs01.dbf
6 /u01/app/oracle/oradata/cdb1/users01.dbf
SQL>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/cdb1/system01.dbf' TO '/tmp/system01.dbf';
Database altered.
SQL>
SQL> SELECT file_id, file_name FROM dba_data_files WHERE file_id = 1;
FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
1 /tmp/system01.dbf
SQL>
SQL> HOST ls -al /u01/app/oracle/oradata/cdb1/system01.dbf
ls: cannot access /u01/app/oracle/oradata/cdb1/system01.dbf: No such file or directory
SQL> HOST ls -al /tmp/system01.dbf
-rw-r-----. 1 oracle oinstall 838868992 Oct 8 22:48 /tmp/system01.dbf
SQL>
SQL> ALTER DATABASE MOVE DATAFILE 1 TO '/u01/app/oracle/oradata/cdb1/system01.dbf' KEEP;
Database altered.
SQL>
SQL> SELECT file_id, file_name FROM dba_data_files WHERE file_id = 1;
FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
1 /u01/app/oracle/oradata/cdb1/system01.dbf
SQL>
SQL> HOST ls -al /u01/app/oracle/oradata/cdb1/system01.dbf
-rw-r-----. 1 oracle oinstall 838868992 Oct 8 22:48 /u01/app/oracle/oradata/cdb1/system01.dbf
SQL> HOST ls -al /tmp/system01.dbf
-rw-r-----. 1 oracle oinstall 838868992 Oct 8 22:49 /tmp/system01.dbf
SQL>
SQL> ALTER SYSTEM SET db_create_file_dest='/u01/app/oracle/oradata/cdb1';
System altered.
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/cdb1/system01.dbf';
Database altered.
SQL>
SQL> SELECT file_id, file_name FROM dba_data_files WHERE file_id = 1;
FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
1 /u01/app/oracle/oradata/cdb1/CDB1/datafile/o1_mf_system_958zo3ll_.dbf
SQL>
SQL> ALTER DATABASE MOVE DATAFILE 1 To '/u01/app/oracle/oradata/cdb1/system01.dbf' KEEP;
Database altered.
SQL>
SQL> SELECT file_id, file_name FROM dba_data_files WHERE file_id = 1;
FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
1 /u01/app/oracle/oradata/cdb1/system01.dbf
SQL>
SQL> host ls -al /u01/app/oracle/oradata/cdb1/CDB1/datafile/o1_mf_system_958zo3ll_.dbf
ls: cannot access /u01/app/oracle/oradata/cdb1/CDB1/datafile/o1_mf_system_958zo3ll_.dbf: No such file or directory
SQL>1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
SQL> SELECT file#, name FROM v$datafile ORDER BY file#;
FILE# NAME
---------- ----------------------------------------------------------------------
1 /u01/app/oracle/oradata/cdb1/system01.dbf
3 /u01/app/oracle/oradata/cdb1/sysaux01.dbf
4 /u01/app/oracle/oradata/cdb1/undotbs01.dbf
5 /u01/app/oracle/oradata/cdb1/pdbseed/system01.dbf
6 /u01/app/oracle/oradata/cdb1/users01.dbf
7 /u01/app/oracle/oradata/cdb1/pdbseed/sysaux01.dbf
8 /u01/app/oracle/oradata/cdb1/pdb1/system01.dbf
9 /u01/app/oracle/oradata/cdb1/pdb1/sysaux01.dbf
10 /u01/app/oracle/oradata/cdb1/pdb1/pdb1_users01.dbf
29 /u01/app/oracle/oradata/pdb2/system01.dbf
30 /u01/app/oracle/oradata/pdb2/sysaux01.dbf
31 /u01/app/oracle/oradata/pdb2/pdb2_users01.dbf
SQL>
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/pdb2/system01.dbf' TO '/tmp/system01.dbf' REUSE;
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/pdb2/system01.dbf' TO '/tmp/system01.dbf' REUSE
*
ERROR at line 1:
ORA-01516: nonexistent log file, data file, or temporary file "29"
SQL>
SQL> ALTER SESSION SET container=pdb2;
Session altered.
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/pdb2/system01.dbf' TO '/tmp/system01.dbf' REUSE;
Database altered.
SQL>
SQL> SELECT file_id, file_name FROM dba_data_files WHERE file_id = 29;
FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
29 /tmp/system01.dbf
SQL>
SQL> ALTER DATABASE MOVE DATAFILE 29 TO '/u01/app/oracle/oradata/pdb2/system01.dbf' REUSE;
Database altered.
SQL>
SQL> SELECT file_id, file_name FROM dba_data_files WHERE file_id = 29;
FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
29 /u01/app/oracle/oradata/pdb2/system01.dbf
SQL>ALTER SESSION SET container=cdb1;
SQL> ALTER SESSION SET container=CDB$ROOT;
Session altered.
SQL>1234567891011121314151617
SQL> SELECT file_id, file_name FROM dba_temp_files;
FILE_ID FILE_NAME
---------- ----------------------------------------------------------------------
1 /u01/app/oracle/oradata/cdb1/temp01.dbf
SQL>
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/cdb1/temp01.dbf' TO '/tmp/temp01.dbf' REUSE;
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/cdb1/temp01.dbf' TO '/tmp/temp01.dbf' REUSE
*
ERROR at line 1:
ORA-01516: nonexistent log file, data file, or temporary file
"/u01/app/oracle/oradata/cdb1/temp01.dbf"
SQL>1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
sqlplus sys/${SYS_PASSWORD}@cdb1 as sysdba
SQL> SELECT name FROM v$datafile where file# = 1;
NAME
--------------------------------------------------------------------------------
/u01/oradata/CDB1/system01.dbf
SQL> ALTER DATABASE MOVE DATAFILE '/u01/oradata/CDB1/system01.dbf' TO '/tmp/system01.dbf';
Database altered.
SQL> SELECT name FROM v$datafile where file# = 1;
NAME
--------------------------------------------------------------------------------
/tmp/system01.dbf
SQL>
sqlplus sys/${SYS_PASSWORD}@cdb1_stby as sysdba
SQL> SELECT name FROM v$datafile where file# = 1;
NAME
--------------------------------------------------------------------------------
/u01/oradata/CDB1_STBY/datafile/o1_mf_system_h4p21n94_.dbf
SQL>
dgmgrl sys/${SYS_PASSWORD}@cdb1 <<EOF
EDIT DATABASE 'cdb1_stby' SET STATE='APPLY-OFF';
EXIT;
EOF
sqlplus sys/${SYS_PASSWORD}@cdb1_stby as sysdba
SQL> SELECT name FROM v$datafile where file# = 1;
NAME
--------------------------------------------------------------------------------
/u01/oradata/CDB1_STBY/datafile/o1_mf_system_h4p21n94_.dbf
SQL> ALTER DATABASE MOVE DATAFILE 1 TO '/tmp/system01.dbf';
Database altered.
SQL> SELECT name FROM v$datafile where file# = 1;
NAME
--------------------------------------------------------------------------------
/tmp/system01.dbf
SQL>
dgmgrl sys/${SYS_PASSWORD}@cdb1 <<EOF
EDIT DATABASE 'cdb1_stby' SET STATE='APPLY-ON';
EXIT;
EOFPlease to add comments
No comments yet. Be the first to comment!