• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to footer navigation

The Geek Diary

  • OS
    • Linux
    • CentOS/RHEL
    • Solaris
    • Oracle Linux
    • VCS
  • Interview Questions
  • Database
    • oracle
    • oracle 12c
    • ASM
    • mysql
    • MariaDB
  • DevOps
    • Docker
    • Shell Scripting
  • Big Data
    • Hadoop
    • Cloudera
    • Hortonworks HDP

How to Rename or Move Datafiles and Logfiles in Oracle Database

by admin

How to Rename or Move Datafiles and Logfiles

In many situations, a datafile or logfile must be renamed inside Oracle. Whereas the contents of the file remain valid, you need to define a new physical name or location for it. For example:

  • You want to move a database file to a different disk for performance or maintenance reasons.
  • You have restored a datafile from backup, but the disk where it should normally be placed has crashed and you need to relocate it to a different disk.
  • You have moved or renamed a datafile at the operating system level but forgot to rename it within Oracle. At startup, you get ORA-01157 and ORA-01110. If the database is up and you try to shut it down normal or immediate, you get ORA-01116 ad ORA-01110.
  • You have multiple databases on the same machine and you need to rename certain database files to prevent collision and confusion.

This post gives instructions to:

  1. Rename or move datafile(s) with the database open.
  2. Rename and/or move datafile(s) with the database shut down.
  3. Rename and/or move a logfile.
NOTE: To rename or relocate datafiles in the SYSTEM tablespace you must use option 2 shown above – ‘Renaming or Moving a Datafile with the Database Shut Down’, because you cannot take the SYSTEM tablespace offline.

Rename or move datafile(s) with the database open

Datafiles can be renamed or moved while the database is open. However, the tablespace must be made READ-ONLY. This will allow users to select from the tablespace but prevents them from doing inserts, updates, and deletes. The amount of time the tablespace is required to be read-only will depend on how large the datafile(s) are and how long it takes to copy the datafile(s) to the new location.

Making the tablespace read only freezes the file header, preventing updates from being made to the file header. Since this datafile is then at a read only state, it is possible to copy the file while the database is open. To do this you must follow these steps:

1. Determine how many datafiles are associated with the tablespace.

SQL> SELECT FILE_NAME, STATUS FROM DBA_DATA_FILES 
WHERE TABLESPACE_NAME = '[YOUR_TABLESPACE_NAME]';

2. Make sure that all datafiles returned have the status AVAILABLE.

3. Make the tablespace is read only.

SQL> ALTER TABLESPACE [YOUR_TABLESPACE_NAME] READ ONLY;

4. Make sure that the tablespace is defined as read only in the data dictionary.

SQL> SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES 
WHERE TABLESPACE_NAME = '[YOUR_TABLESPACE_NAME]';

TABLESPACE_NAME                STATUS 
------------------------------ --------- 
[YOUR_TABLESPACE_NAME]         READ ONLY 

5. Copy the datafile(s) to the new location using the operating system copy command. Once the datafile(s) have been copied to the new location compare the sizes of the datafiles. Make sure that the sizes match.

NOTE: The same method could be used to rename a datafile as a kind of in-place copy. However, on Windows that fails with a message like:

Cannot rename USERS01: It is being used by another person or program.
Close any programs that might be using the file and try again."

This is not a real limitation because the procedure is meant for actually moving the file to a new location for intended storage management. Only renaming the file has no function here and this can be done during downtime.

However, note that you could remove the file lock at your own risk with available(freeware) utilities.

6. Once the datafiles have been copied to the new location alter the tablespace offline.

SQL> ALTER TABLESPACE [YOUR_TABLESPACE_NAME] OFFLINE;

At this point, the tablespace is not accessible to users.

7. Once the tablespace is offline you will need to rename the datafile(s) to the new location. This updates the entry for the datafile(s) in the controlfile.

SQL> ALTER DATABASE RENAME FILE 
'/FULL_PATH_OF_OLD_LOCATION/AND_DATAFILE_NAME.DBF' 
TO 
'/FULL_PATH_OF_NEW_LOCATION/AND_DATAFILE_NAME.DBF'; 

You will need to do this for all datafiles associated with this tablespace. You can use the ALTER TABLESPACE … RENAME DATAFILE syntax as well.

8. Once the alter database statement has been processed for the datafile(s) you can bring the tablespace online.

SQL> ALTER TABLESPACE [YOUR_TABLESPACE_NAME] ONLINE; 

9. After you bring the tablespace back online you can make the tablespace read/write again.

SQL> ALTER TABLESPACE [YOUR_TABLESPACE_NAME] READ WRITE;

10. You can check the status of the tablespace to make sure it is read/write. You can also verify that the controlfile has been updated by doing the following:

SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

This will produce a readable copy of the contents of your controlfile which will be placed in your user_dump_dest directory. Optionally, you can query V$DATAFILE, which gets information from the controlfile as well.

11. Remove the datafile(s) from the old location at the O/S level.

Rename and/or move datafile(s) with the database shutdown

1. If the database is up, shut it down.

2. Copy the datafile to the new name/location at the operating system level.

3. Mount the database.

SQL> STARTUP MOUNT

This command will read the control file but will not mount the datafiles.

4. Rename the file inside Oracle.

SQL> ALTER DATABASE RENAME FILE 
'/FULL_PATH_OF_OLD_LOCATION/AND_DATAFILE_NAME.DBF' 
TO 
'/FULL_PATH_OF_NEW_LOCATION/AND_DATAFILE_NAME.DBF';

Do this for all the datafiles that were renamed or moved at the operating system level.

5. Open the database.

SQL> ALTER DATABASE OPEN;

6. Query v$dbfile to confirm that the changes made were correct.

SQL> SELECT * FROM V$DBFILE;

7. Remove the datafile(s) from the old location at the operating system level.

Rename and/or move a logfile

1. Shutdown the database.

2. Copy the logfile to the new name/location at the operating system level.

3. Mount the database.

SQL> STARTUP MOUNT

4. Rename the file.

SQL> ALTER DATABASE RENAME FILE 
'/FULL_PATH_OF_OLD_LOCATION/AND_REDO_LOG_NAME.LOG' 
TO 
'/FULL_PATH_OF_NEW_LOCATION/AND_REDO_LOG_NAME.LOG'; 

5. Open the database.

SQL> ALTER DATABASE OPEN;

6. Remove the logfile(s) from the old location at the operating system level.

Filed Under: oracle, Oracle 10g, Oracle 11g

Some more articles you might also be interested in …

  1. How to Migrate ASM Disk Groups to another Storage Online [When ASMLIB Devices Are Involved]
  2. Oracle Interview Questions – Flash Recovery Area
  3. How to Startup/Shutdown PDB’s in Oracle Database 12c
  4. How to Migrate ASM Disk Groups to another Storage Online [non ASMLIB Devices]
  5. How to move a Datafile to a different Location on a Physical Standby Database
  6. How To Find When The Spfile Was Created On Linux Server
  7. How to Start and Stop OSWatcher
  8. Oracle Database 18c New Feature – Memoptimized Rowstore
  9. How to Connect to an Oracle Pluggable Database (PDB)
  10. How to Enable a Database Trigger

You May Also Like

Primary Sidebar

Recent Posts

  • vgextend Command Examples in Linux
  • setpci command – configure PCI device
  • db_load command – generate db database
  • bsdtar command – Read and write tape archive files

© 2022 · The Geek Diary

  • Archives
  • Contact Us
  • Copyright