Moving datafile

Moving a datafile from the file system can be achived in two ways.

 

1. While the database is shutdown (in mount stage).

2. While the database is running (with the selected tablespace offline).

 

.While the database is shutdown (in mount stage).

  Moving oracle datafile while the database is in mount stage is performed in the following way:

1.Shutdown and mount the database.

[oracle@linux] sqlplus '/as sysdba'

SQL> shutdown immediate;
SQL> startup mount;

2.Ensure you have enough space in the ASM diskgroup to copy the datafile.

First identify the size of the datafile you wish to move.

SQL> select file#, name, (bytes/1048576) File_Size_MB from v$datafile;
FILE#               NAME              FILE_SIZE_MB
-----   ---------------------------- --------------
 4       /oradata/PROD/users01.dbf       2500

* In this example we will be moving users01.dbf
[oracle@linux] export ORACLE_SID=+ASM
SQL> select NAME, STATE, TOTAL_MB, FREE_MB from v$asm_diskgroup;
NAME                           STATE       TOTAL_MB   FREE_MB
------------------------------ ----------- ---------- DGROUP1                        MOUNTED     100        3
DGROUP2                        MOUNTED     4882       4830

3.Connect to RMAN and copy the datafile from the filesystem to the select ASM diskgroup.
[oracle@linux] rman target=/
RMAN> copy datafile 4 to '+DGROUP2';
Starting backup at 2006/09/05 12:14:23
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=31 devtype=DISK
channel ORA_DISK_1: starting datafile copy
input datafile fno=00004 name=/oradata/PROD/users01.dbf
output filename=+DGROUP2/PROD/datafile/users01.258.600351265 tag=TAG20060905T121424 recid=10 stamp=600351264
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:05:01
Finished backup at 2006/09/05 12:19:24

4.Update the controlfile with the new location of the datafile. 
[oracle@linux] rman target /

RMAN> switch datafile 4 to copy;
datafile 4 switched to datafile copy "+DGROUP2/PROD/datafile/users01.258.600351265".
5.The file is now if the new location. 
SQL> select name from v$datafile;
NAME
-------------------------------------------------------
+DGROUP2/PROD/datafile/users01.258.600351265
6. The database may now be opened.

SQL> alter database open;

.While the database is running (with the select tablespace offline).
   In order to move a datafile on a running active database the tablespace where the datafile resides must be placed offline.

1.Identify the tablespace which contains the datafile and offline the tablespace. 
SQL> select tablespace_name, file_name from dba_data_files where file_id=4;
TABLESPACE_NAME    FILE_NAME
------------------ ------------------------------
USERS              /oradata/RMAN/users01.dbf

SQL> alter tablespace USERS offline;


* * * * * Continue with Steps 2 - 5 above. * * * * *


6.After you have successfully completed the above steps (2 -5) place the tablespace online;
SQL> alter tablespace USERS online;
  The datafile has now been successfully moved to the ASM diskgroup.

 

Moving a datafile from ASM to the file system can be performed in two ways:

 

1. While the database is shutdown (in mount stage). This is the only option if datafiles to be moved are from system or undo tablespaces.
2
. While the database is running (with the selected tablespace offline).

.While the database is shutdown (in mount stage).

       Moving oracle datafile while the database is in mount stage is performed in the following way:
1.Shutdown and mount the database.

[oracle@linux] sqlplus '/as sysdba'
SQL> shutdown immediate;
SQL> startup mount;

2.Ensure you have enough space on the file system to copy the datafile.
First identify the size of the datafile you wish to move.

SQL> select file#, name, (bytes/1048576) File_Size_MB from v$datafile;
FILE#                   NAME                          FILE_SIZE_MB
-----  ---------------------------------------------  ------------
 4      +DGROUP2/PROD/datafile/users01.258.600351265   2500
* In this example we will be moving the users01 datafile.

3.Connect to RMAN and copy the datafile from the ASM diskgroup to the filesystem.

[oracle@linux] rman target=/

RMAN> copy datafile 4 to '/oradata/PROD/users01.dbf';
Starting backup at 2006/09/06 15:46:13
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
channel ORA_DISK_1: starting datafile copy
input datafile fno=00004 name=+DGROUP3/rman/datafile/users.258.600450259
output filename=/oradata/PROD/users01.dbf tag=TAG20060906T154614 recid=22 stamp=600450375
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2006/09/06 15:46:15

4.Update the controlfile with the new location of the datafile.

[oracle@linux] sqlplus '/as sysdba'

SQL> alter database rename file '+DGROUP3/PROD/datafile/users.258.600450259' to '/oradata/PROD/users01.dbf';

Database altered.

5.The file is now if the new location.

SQL> select file#, name from v$datafile;
FILE#                 NAME
------   ------------------------------------------------------------

4        /oradata/PROD/users01.db


6. The database may now be opened.

 

. While the database is running (with the select tablespace offline).

  In order to move a datafile on a running active database the tablespace where the datafile resides must be placed offline.
1.Identify the tablespace which contains the datafile and offline the tablespace.

SQL> select tablespace_name, file_name from dba_data_files where file_id=4;
TABLESPACE_NAME    FILE_NAME
------------------ ------------------------------------------
USERS              +DGROUP3/PROD/datafile/users.258.600450259
SQL> alter tablespace USERS offline; 

 

* * * * * Continue with Steps 2 - 5 above. * * * * *

 

6. After you have successfully completed the above steps (2 -5) place the tablespace online;

SQL> alter tablespace USERS online;

The datafile has now been successfully moved to the ASM diskgroup.

请使用浏览器的分享功能分享到微信等