MAN异机异目录恢复

来源:互联网 发布:从此山高水长君不必知 编辑:程序博客网 时间:2024/06/11 13:42

MAN异机异目录恢复

 (2014-11-21 10:04:35)
转载
标签: 

it

 

A机备份数据到B机异目录恢复 

事先记住A机的DBID

 B机新建一个数据库,与A机相同

 DOS下更改ORACLE_ID

 

关闭数据库

SQL>shutdown immediate

 

设置DBID,与A机相同

SET DBID XXXXXXXX

 

启动到noumount 状态

 SQL> startup nomount
ORACLE 例程已经启动。

 

由备份文件恢复SPFILE文件

RMAN> restore spfile to 'D:\app\Administrator\product\11.2.0\dbhome_1\database\SPFILEORCL.ORA' from 'D:\ora_backup\C-1391059141-20141121-0021';

启动 restore 于 21-11月-14
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=156 设备类型=DISK

通道 ORA_DISK_1: 正在从 AUTOBACKUP D:\ora_backup\C-1391059141-20141121-0021 还原 spfile
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 11/21/2014 16:15:26 上) 失败
ORA-32011: 不能将 SPFILE 还原到已被此实例使用的位置

出现此提示,因为spfile文件正在被使用,所以需要改名,可随意更改,如SPFILEORCL01.ORA

RMAN> restore spfile to 'D:\app\Administrator\product\11.2.0\dbhome_1\database\SPFILEORCL01.ORA' from 'D:\ora_backup\C-1391059141-20141121-0021';

 

再由新SPFILE生成PFILE,并用记事本打开进行修改,由于是异机异目录备份,所以必须修改相关参数。因为PFILE是基于文本格式的参数文件,可直接用记事本修改,SPFILE为二进制文件,无法直接修改。

SQL> create pfile='D:\app\Administrator\admin\ORCL\pfile\init.ora.1021201415493' from spfile='D:\app
\Administrator\product\11.2.0\dbhome_1\database\SPFILEORCL01.ORA';

文件已创建。

 

PFILE修改完成后再由PFILE重新生成SPFILE文件。

SQL> create spfile='D:\app\Administrator\product\11.2.0\dbhome_1\database\SPFILEORCL01.ORA' from pfi
le='D:\app\Administrator\admin\ORCL\pfile\init.ora.1021201415493';

文件已创建。

 

恢复控制文件

RMAN> restore controlfile from 'D:\ora_backup\C-1391059141-20141121-0021';

启动 restore 于 21-11月-14
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=156 设备类型=DISK

通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
输出文件名=D:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL
输出文件名=D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL
完成 restore 于 21-11月-14

 

启动到mount状态

SQL> alter database mount;

数据库已更改。

有可能会出现ORA-00119的报错(原因不详,需要问老师), 把PFILE文件里的*.local_listener里的参数改成如下:

*.local_listener='(ADDRESS_LIST=(Address=(Protocol=tcp) (Host=serverIP)(Port=1521)))'
 
注册A机备份文件
RMAN> catalog start with 'D:\ora_backup';
启动 implicit crosscheck backup 于 21-11月-14
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=156 设备类型=DISK
已交叉检验的 3 对象
完成 implicit crosscheck backup 于 21-11月-14
启动 implicit crosscheck copy 于 21-11月-14
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 于 21-11月-14
搜索恢复区中的所有文件
正在编制文件目录...
目录编制完毕
已列入目录的文件的列表
=======================
文件名: D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_11_20\O1_MF_1_4_B6V9GV48_.ARC
文件名: D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_11_21\O1_MF_1_4_B6X80LVP_.ARC
搜索与样式 D:\ora_backup 匹配的所有文件
数据库未知文件的列表
=====================================
文件名: D:\ora_backup\2BPO5J6E_1_120141121
文件名: D:\ora_backup\2CPO5J7A_1_120141121
文件名: D:\ora_backup\2DPO5J9N_1_120141121
文件名: D:\ora_backup\C-1391059141-20141121-0021
是否确实要将上述文件列入目录 (输入 YES 或 NO)? yes
正在编制文件目录...
目录编制完毕
已列入目录的文件的列表
=======================
文件名: D:\ora_backup\2BPO5J6E_1_120141121
文件名: D:\ora_backup\2CPO5J7A_1_120141121
文件名: D:\ora_backup\2DPO5J9N_1_120141121
文件名: D:\ora_backup\C-1391059141-20141121-0021
 
执行restore database命令
RMAN>restore database;
通道 ORA_DISK_1: 将数据文件 00001 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 将数据文件 00002 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 将数据文件 00003 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 将数据文件 00004 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 将数据文件 00005 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF
通道 ORA_DISK_1: 将数据文件 00006 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\USER02
通道 ORA_DISK_1: 将数据文件 00007 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\001
通道 ORA_DISK_1: 将数据文件 00008 还原到 E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM02.DBF
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 11/19/2014 11:14:50 上) 失败
ORA-19693: 已包括备份片段 D:\ORA_BACKUP\2SPNUCD9_1_120141118
ORA-19693这个报错很奇怪:
需要更改备份文件的名字,然后进行crosscheck backup;  ------意思是交叉检查备份文件位置
然后delete expired backup; ------然后删除状态为expired(有记录但本地没文件的备份文件)的备份文件。
上面还可以看到还原的位置还在原机的E盘位置,所以还需要更改控制文件中的文件路径,先查询控制文件中记录的数据文件数与数据文件位置:
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF
E:\APP\ADMINISTRATOR\ORADATA\ORCL\USER02
E:\APP\ADMINISTRATOR\ORADATA\ORCL\001
E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM02.DBF
已选择8行。
用以下代码格式进行更改:
run{
set newname for datafile 1 to 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF';
restore datafile 1;
switch datafile 1;
}
 
完成后执行recover命令
RMAN> recover database;
启动 recover 于 21-11月-14
使用通道 ORA_DISK_1
正在开始介质的恢复
通道 ORA_DISK_1: 正在开始将归档日志还原到默认目标
通道 ORA_DISK_1: 正在还原归档日志
归档日志线程=1 序列=46
通道 ORA_DISK_1: 正在读取备份片段 D:\ORA_BACKUP\2DPO5J9N_1_120141121
通道 ORA_DISK_1: 段句柄 = D:\ORA_BACKUP\2DPO5J9N_1_120141121 标记 = TAG20141121T102351
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
归档日志文件名=D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_11_21\O1_MF_1_46_B6Y10F
NV_.ARC 线程=1 序列=46
通道 default: 正在删除归档日志
归档日志文件名=D:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_11_21\O1_MF_1_46_B6Y10F
NV_.ARC RECID=80 STAMP=864235277
无法找到归档日志
归档日志线程=1 序列=47
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 11/21/2014 17:21:19 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 47 的归档日志以及起始 SCN 1643141
将数据库模式改为noarchivelog模式后修复成功(疑问不知道原因,求大神解答)
SQL> alter database noarchivelog;
数据库已更改。

 

RMAN> recover database;

启动 recover 于 21-11月-14
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=156 设备类型=DISK

正在开始介质的恢复

RMAN-08187: 警告: 完成到 SCN 1643141 的介质恢复
完成 recover 于 21-11月-14

 

打开数据库

SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

提示需要以resetlogs打开

SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-00344: 无法重新创建联机日志 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'
ORA-27040: 文件创建错误, 无法创建文件
OSD-04002: 无法打开文件
O/S-Error: (OS 21) 设备未就绪。

发现控制文件中的REDO文件位置还未改变,用以下命令查询原路径:

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO04.LOG
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO05.LOG
D:\ORA_LOG\RED01_B.LOG
D:\ORA_LOG\RED02_B.LOG
D:\ORA_LOG\RED03_B.LOG
D:\ORA_LOG\RED05_B.LOG
D:\ORA_LOG\RED04_B.LOG

已选择10行。

 

更改REDO日志的异常路径

SQL> alter database rename file 'E:\app\Administrator\oradata\ORCL\REDO03.LOG' to 'D:\app\Administrator\oradata\ORCL\REDO03.LOG';

数据库已更改。
如果报错,请重新恢复控制文件,再重复以上步骤。

 

再次打开数据库

SQL> alter database open resetlogs;

数据库已更改。

 

到这步数据库异机异目录恢复已经完成。只要再关闭数据库改完归档模式就可以了。

请大神解释下为什么完成restore database之后,在执行recover database的时候会报:RMAN-06054: 介质恢复正在请求未知的线程 1 序列 47 的归档日志以及起始 SCN 1643141 这个错误。为什么切到noarchivelog模式下之后就可以recover成功。