将Oracle恢复到不同的目录

C:\Documents and Settings\Administrator.XY>rman target/
恢复管理器: Release 10.2.0.1.0 - Production on 星期三 2月 28 16:42:59 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
连接到目标数据库: ORCL (DBID=1140649303)
RMAN> backup database format 'd:\%s.bak';
启动 backup 于 28-2月 -07
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=143 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
输入数据文件 fno=00003 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
输入数据文件 fno=00005 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
输入数据文件 fno=00002 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
输入数据文件 fno=00006 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF
输入数据文件 fno=00004 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 28-2月 -07
通道 ORA_DISK_1: 已完成段 1 于 28-2月 -07
段句柄=D:\67.BAK 标记=TAG20070228T164332 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:45
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 28-2月 -07
通道 ORA_DISK_1: 已完成段 1 于 28-2月 -07
段句柄=D:\68.BAK 标记=TAG20070228T164332 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:05
完成 backup 于 28-2月 -07
RMAN> restore controlfile from 'd:\68.bak'
2> ;
启动 restore 于 28-2月 -07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:05
输出文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL
输出文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL
输出文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
完成 restore 于 28-2月 -07
RMAN> alter database mount;
数据库已装载
释放的通道: ORA_DISK_1
RMAN> run{
2> set newname for datafile 1 to 'd:\bak\system.dbf';
3> set newname for datafile 2 to 'd:\bak\UNDOTBS01.dbf';
4> set newname for datafile 3 to 'd:\bak\SYSAUX01.dbf';
5> set newname for datafile 4 to 'd:\bak\USERS01.dbf';
6> set newname for datafile 5 to 'd:\bak\EXAMPLE01.dbf';
7> set newname for datafile 6 to 'd:\bak\TEST01.dbf';
8> restore datafile  1,2,3,4,5,6;
9> switch datafile all;
10> }
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 28-2月 -07
启动 implicit crosscheck backup 于 28-2月 -07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
已交叉检验的 3 对象
完成 implicit crosscheck backup 于 28-2月 -07
启动 implicit crosscheck copy 于 28-2月 -07
使用通道 ORA_DISK_1
已交叉检验的 9 对象
完成 implicit crosscheck copy 于 28-2月 -07
搜索恢复区域中的所有文件
正在编制文件目录...
没有为文件编制目录
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到D:\BAK\SYSTEM.DBF
正将数据文件00002恢复到D:\BAK\UNDOTBS01.DBF
正将数据文件00003恢复到D:\BAK\SYSAUX01.DBF
正将数据文件00004恢复到D:\BAK\USERS01.DBF
正将数据文件00005恢复到D:\BAK\EXAMPLE01.DBF
正将数据文件00006恢复到D:\BAK\TEST01.DBF
通道 ORA_DISK_1: 正在读取备份段 D:\67.BAK
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = D:\67.BAK 标记 = TAG20070228T164332
通道 ORA_DISK_1: 恢复完成, 用时: 00:01:42
完成 restore 于 28-2月 -07
数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=38 stamp=615747058 文件名=D:\BAK\SYSTEM.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=39 stamp=615747058 文件名=D:\BAK\UNDOTBS01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=40 stamp=615747058 文件名=D:\BAK\SYSAUX01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=41 stamp=615747058 文件名=D:\BAK\USERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 recid=42 stamp=615747059 文件名=D:\BAK\EXAMPLE01.DBF
数据文件 6 已转换成数据文件副本
输入数据文件副本 recid=43 stamp=615747059 文件名=D:\BAK\TEST01.DBF
RMAN> recover database;
启动 recover 于 28-2月 -07
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 2 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LO
G 存在于磁盘上
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG 线程 =1 序列 =2
介质恢复完成, 用时: 00:00:03
完成 recover 于 28-2月 -07
RMAN> alter database open;
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: alter db 命令 (在 02/28/2007 16:53:09 上) 失败
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
RMAN> alter database open resetlogs;
数据库已打开
下一步迁移控制文件和redo到新目录下
C:\Documents and Settings\Administrator.XY>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 2月 28 16:56:52 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 UNUSED
         2 CURRENT
         3 UNUSED
SQL> col group# for 9
SQL> col member for a60;
SQL> select group#,member from v$logfile;
GROUP# MEMBER
------ ------------------------------------------------------------
     3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG
     2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG
     1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG
SQL> alter database drop logfile 'd:\oracle\product\10.2.0\oradata\orcl\redo01.l
og';
数据库已更改。

SQL> alter database add logfile 'd:\bak\redo01.log' size 50M;
数据库已更改。

SQL> alter database drop logfile 'd:\oracle\product\10.2.0\oradata\orcl\redo03.l
og';
数据库已更改。
SQL> alter database add logfile 'd:\bak\redo03.log' size 50M;
数据库已更改。
SQL> alter system switch logfile;
系统已更改。

SQL> alter database drop logfile 'd:\oracle\product\10.2.0\oradata\orcl\redo02.l
og';
数据库已更改。
SQL> alter database add logfile 'd:\bak\redo02.log' size 50M;
数据库已更改。
SQL> select group#,member from v$logfile;
GROUP# MEMBER
------ ------------------------------------------------------------
     3 D:\BAK\REDO03.LOG
     2 D:\BAK\REDO02.LOG
     1 D:\BAK\REDO01.LOG
SQL>
切换控制文件
将*.control_files='D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL','D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL','D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL'#Restore Controlfile
修改为*.control_files='D:\BAK\CONTROL01.CTL','D:\BAK\CONTROL02.CTL','D:\BAK\CONTROL03.CTL'#Restore Controlfile
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> create spfile from pfile;
文件已创建。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              75498852 bytes
Database Buffers           88080384 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> select name from v$controlfile;
NAME
-------------------------------------------
D:\BAK\CONTROL01.CTL
D:\BAK\CONTROL02.CTL
D:\BAK\CONTROL03.CTL
SQL> select name from v$datafile;
NAME
-------------------------------------------
D:\BAK\SYSTEM.DBF
D:\BAK\UNDOTBS01.DBF
D:\BAK\SYSAUX01.DBF
D:\BAK\USERS01.DBF
D:\BAK\EXAMPLE01.DBF
D:\BAK\TEST01.DBF
已选择6行。
SQL>
最后就是临时表空间了

SQL> alter database tempfile 'd:\oracle\product\10.2.0\oradata\orcl\temp01.dbf'
offline;
数据库已更改。
SQL> $copy d:\oracle\product\10.2.0\oradata\orcl\temp01.dbf d:\bak\temp01.dbf;
已复制         1 个文件。
SQL> alter database rename 'd:\oracle\product\10.2.0\oradata\orcl\temp01.dbf' to
'd:\bak\temp01.dbf';
alter database rename 'd:\oracle\product\10.2.0\oradata\orcl\temp01.dbf' to 'd:\
bak\temp01.dbf'
                      *
第 1 行出现错误:
ORA-02231: ALTER DATABASE 选项缺失或无效

SQL> alter database rename file 'd:\oracle\product\10.2.0\oradata\orcl\temp01.db
f' to 'd:\bak\temp01.dbf';
数据库已更改。
SQL> alter database tempfile 'd:\bak\temp01.dbf' online;
数据库已更改。
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
D:\BAK\TEMP01.DBF
SQL>
至此就将数据文件,redo日志,控制文件,临时表空间都迁移到其它目录中了。