恢复到其他位置一般可能是出于两个原因,一是由于磁盘故障使得备份无法恢复到原始的位置上,另外一种情况是利用冷备份创建一个新的数据库。
下面的例子模仿数据库TEST1的原始位置无法访问,因此将数据文件恢复到F:ORACLEORADATATEST1NEW:
SQL> CONN /@TEST1 AS SYSDBA
已连接。
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> HOST COPY F:ORACLEBACKUPTEST120060224*.DBF F:ORACLEORADATATEST1NEW
SQL> HOST COPY F:ORACLEBACKUPTEST120060224*.CTL F:ORACLEORADATATEST1NEW
SQL> CREATE PFILE = 'F:ORACLEORADATATEST1NEWINITTEST1.ORA' FROM SPFILE;
文件已创建。
SQL> HOST EDIT F:ORACLEORADATATEST1NEWINITTEST1.ORA
修改初始化参数的位置后,可以装载数据库:
SQL> STARTUP MOUNT PFILE=F:ORACLEORADATATEST1NEWINITTEST1.ORA
ORACLE 例程已经启动。
Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL> COL NAME FORMAT A50
SQL> SELECT NAME FROM V$DATAFILE;
NAME
--------------------------------------------------
F:ORACLEORADATATEST1SYSTEM01.DBF
F:ORACLEORADATATEST1UNDOTBS01.DBF
F:ORACLEORADATATEST1INDX01.DBF
F:ORACLEORADATATEST1TOOLS01.DBF
F:ORACLEORADATATEST1USERS01.DBF
F:ORACLEORADATATEST1YANGTK01.DBF
已选择6行。
SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORADATATEST1SYSTEM01.DBF'
2 TO 'F:ORACLEORADATATEST1NEWSYSTEM01.DBF';
数据库已更改。
SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORADATATEST1UNDOTBS01.DBF'
2 TO 'F:ORACLEORADATATEST1NEWUNDOTBS01.DBF';
数据库已更改。
SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORADATATEST1INDX01.DBF'
2 TO 'F:ORACLEORADATATEST1NEWINDX01.DBF';
数据库已更改。
SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORADATATEST1TOOLS01.DBF'
2 TO 'F:ORACLEORADATATEST1NEWTOOLS01.DBF';
数据库已更改。
SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORADATATEST1USERS01.DBF'
2 TO 'F:ORACLEORADATATEST1NEWUSERS01.DBF';
数据库已更改。
IXDBA.NET社区论坛SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORADATATEST1YANGTK01.DBF'
2 TO 'F:ORACLEORADATATEST1NEWYANGTK01.DBF';
数据库已更改。
SQL> SELECT MEMBER FROM V$LOGFILE;
MEMBER
-------------------------------------------------
F:ORACLEORADATATEST1REDO03.LOG
F:ORACLEORADATATEST1REDO02.LOG
F:ORACLEORADATATEST1REDO01.LOG
SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORADATATEST1REDO01.LOG'
2 TO 'F:ORACLEORADATATEST1NEWREDO01.LOG';
ALTER DATABASE RENAME FILE 'F:ORACLEORADATATEST1REDO01.LOG'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/数据文件时出错
ORA-01512: 重命名日志文件F:ORACLEORADATATEST1REDO01.LOG时出错 -
未找到新文件F:ORACLEORADATATEST1NEWREDO01.LOG
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
和数据文件的命名一样,需要首先将联机重做日志文件保存到新的位置。如果没有提前将联机日志文件还原,在运行ALTER DATABASE RENAME FILE命令时,则会遇到上面的错误。
这时应该将原来的重做日志拷贝到目标位置然后在运行重命名命令。如果原日志所处磁盘无法访问,可以使用同组日志中的其他成员进行恢复,或利用备份过的联机日志文件进行恢复。
SQL> HOST COPY F:ORACLEORADATATEST1REDO01.LOG F:ORACLEORADATATEST1NEW
SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORADATATEST1REDO01.LOG'