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 bemoved 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.
[oracle@linux] df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vg01/root 10321208 3716884 6080036 38% /
/dev/sda1 147766 15521 124616 12% /boot
none 1022976 0 1022976 0% /dev/shm
/dev/vg01/tmp 2064208 58380 1900972 3% /tmp
/dev/vg01/u01 20158332 18557600 576732 97% /u01
/dev/vg01/backups 6092608 5266016 517140 92% /backups
/dev/vg01/oradata 15487600 11876492 2824676 81% /oradata
/dev/vg01/recovery_area 15487600 11465932 3235236 78% /recovery_area
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.dbf
..
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.
From Oracle
-------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Email: [email protected]
DBA1 群:62697716(满); DBA2 群:62697977(满) DBA3 群:62697850(满)
DBA 超级群:63306533(满); DBA4 群: 83829929 DBA5群: 142216823
聊天 群:40132017 聊天2群:69087192
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请