rman里面用的
run
{
set new datafile 1 to 'c:\new\1.dbf';
restore database;
--现在,需要把文件的新位置写到控制文件
sql 'alter database rename datafile 1 to ..';
--当然,如果有很多个,用:
switch datafile all;
}
After the RESTORE command but before the RECOVER command in your RUN
block, use a SWITCH command to update the control file with the new
filenames of the datafiles. The SWITCH command is equivalent to the
SQL statement ALTER DATABASE RENAME FILE. SWITCH DATAFILE ALL updates
the control file to reflect the new names for all datafiles for
which a SET NEWNAME has been issued in the RUN block.
RUN
{
SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE';
SQL 'ALTER TABLESPACE tools OFFLINE IMMEDIATE';
# specify the new location for each datafile
SET NEWNAME FOR DATAFILE '/olddisk/users01.dbf' TO
'/newdisk/users01.dbf';
SET NEWNAME FOR DATAFILE '/olddisk/tools01.dbf' TO
'/newdisk/tools01.dbf';
# to restore to an ASM disk group named dgroup, use:
# SET NEWNAME FOR DATAFILE '/olddisk/trgt/tools01.dbf'
# TO '+dgroup';
RESTORE TABLESPACE users, tools;
SWITCH DATAFILE ALL; # update control file with new filenames
RECOVER TABLESPACE users, tools;
}
控制文件里存有数据文件的路径,比如原来是c:\abc\1.dbf,现在恢复的时候想换到d:\abc\1.dbf, 那要怎么做呢?
run{
set newname for datafile 1 to 'd:\abc\1.dbf';
restore database;
--现在,rman已经在数据文件copy到d:\abc\1.dbf了,但控制文件里的路径还是c:\abc\1.dbf, 所以要更新控制文件洛
switch datafile all;
--好了,现在控制文件的路径也是d:\abc\1.dbf了
}