ORACLE RMAN恢复的问题

学海无涯-回头是岸 2018-01-22 11:31:47
恢复目录数据库 db1
目标数据库 db2
我在10点的时候 用 rman备份了一个表空间 sp1
然后我在 DB2中删了一张表 A,建了一张表B
然后我把db2 shutdown 后 删掉了 sp1对应的datafile
然后把DB2启动到mount状态
用db1 rman restor tablespace sp1;
然后 DB2 recover datafile sp1对应的datafile;

这个时候发现我 没有表a了,而且有新建的表B
为什么是这个样子 我做备份的时候不是这个样子的啊
不懂这种还原,前面都是用的逻辑备份。
...全文
440 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
minsic78 2018-01-22
  • 打赏
  • 举报
回复
引用 8 楼 baidu_36457652 的回复:
[quote=引用 6 楼 minsic78 的回复:] 简单地讲,完全恢复就意味着 [quote=引用 4 楼 baidu_36457652 的回复:] [quote=引用 3 楼 liuzhijian2008x 的回复:] 楼上说的是对的,你用的是完全恢复。 restor tablespace sp1; 这时这个表空间恢复到了你备份的时候的状态。这时候是没有B表,有A表。 recover datafile sp1对应的datafile 运行这个recover会应用归档日志和redo日志及undo。 没有指定时间点或scn就是完全恢复,会恢复到最近的时间点。此时就有B表,没A表了。
不太明白其中道理。。。[/quote] 因为你的日志一直到shutdown的这个点,也就是说,它们记录了“然后我在 DB2中删了一张表 A,建了一张表B”这两个动作,如果做完全恢复,意味着应用所有日志(包括在线redo),所以这两个动作引起的后果都出现了:A表不见,但有B表,如果你想库中有A表,那么就要恢复数据库到A表删除之前,也就是说,日志应用到A表删除之前的某个时间点——这个就是不完全恢复,当然这是有代价的:库中其他表的数据,也会恢复到这个时间点,这通常不是你想要的。[/quote] 那我可以这样理解吗? 假如我去年 10月份 rman 备份了一次 假如到现在,有很多坏块。 我用上面的方式,可以完整的恢复到没今天一样的数据的状态吗?[/quote] 前提:备份无问题,日志无丢失
  • 打赏
  • 举报
回复
引用 6 楼 minsic78 的回复:
简单地讲,完全恢复就意味着 [quote=引用 4 楼 baidu_36457652 的回复:] [quote=引用 3 楼 liuzhijian2008x 的回复:] 楼上说的是对的,你用的是完全恢复。 restor tablespace sp1; 这时这个表空间恢复到了你备份的时候的状态。这时候是没有B表,有A表。 recover datafile sp1对应的datafile 运行这个recover会应用归档日志和redo日志及undo。 没有指定时间点或scn就是完全恢复,会恢复到最近的时间点。此时就有B表,没A表了。
不太明白其中道理。。。[/quote] 因为你的日志一直到shutdown的这个点,也就是说,它们记录了“然后我在 DB2中删了一张表 A,建了一张表B”这两个动作,如果做完全恢复,意味着应用所有日志(包括在线redo),所以这两个动作引起的后果都出现了:A表不见,但有B表,如果你想库中有A表,那么就要恢复数据库到A表删除之前,也就是说,日志应用到A表删除之前的某个时间点——这个就是不完全恢复,当然这是有代价的:库中其他表的数据,也会恢复到这个时间点,这通常不是你想要的。[/quote] 那我可以这样理解吗? 假如我去年 10月份 rman 备份了一次 假如到现在,有很多坏块。 我用上面的方式,可以完整的恢复到没今天一样的数据的状态吗?
  • 打赏
  • 举报
回复
引用 5 楼 zcs_zzh 的回复:
备份文件中没有B表,Oracle在恢复时不但恢复了备份文件的数据,还要把归档日志的内容追加到时备份文件中,最后的状态就是数据库失败前的状态。 相关于备份文件是全量的,归档日志内容是增量的。
那我可以这样理解吗? 假如我去年 10月份 rman 备份了一次 假如到现在,有很多坏块。 我用上面的方式,可以完整的恢复是吗?
minsic78 2018-01-22
  • 打赏
  • 举报
回复
简单地讲,完全恢复就意味着
引用 4 楼 baidu_36457652 的回复:
[quote=引用 3 楼 liuzhijian2008x 的回复:] 楼上说的是对的,你用的是完全恢复。 restor tablespace sp1; 这时这个表空间恢复到了你备份的时候的状态。这时候是没有B表,有A表。 recover datafile sp1对应的datafile 运行这个recover会应用归档日志和redo日志及undo。 没有指定时间点或scn就是完全恢复,会恢复到最近的时间点。此时就有B表,没A表了。
不太明白其中道理。。。[/quote] 因为你的日志一直到shutdown的这个点,也就是说,它们记录了“然后我在 DB2中删了一张表 A,建了一张表B”这两个动作,如果做完全恢复,意味着应用所有日志(包括在线redo),所以这两个动作引起的后果都出现了:A表不见,但有B表,如果你想库中有A表,那么就要恢复数据库到A表删除之前,也就是说,日志应用到A表删除之前的某个时间点——这个就是不完全恢复,当然这是有代价的:库中其他表的数据,也会恢复到这个时间点,这通常不是你想要的。
zcs_zzh 2018-01-22
  • 打赏
  • 举报
回复
备份文件中没有B表,Oracle在恢复时不但恢复了备份文件的数据,还要把归档日志的内容追加到时备份文件中,最后的状态就是数据库失败前的状态。 相关于备份文件是全量的,归档日志内容是增量的。
  • 打赏
  • 举报
回复
引用 3 楼 liuzhijian2008x 的回复:
楼上说的是对的,你用的是完全恢复。 restor tablespace sp1; 这时这个表空间恢复到了你备份的时候的状态。这时候是没有B表,有A表。 recover datafile sp1对应的datafile 运行这个recover会应用归档日志和redo日志及undo。 没有指定时间点或scn就是完全恢复,会恢复到最近的时间点。此时就有B表,没A表了。
不太明白其中道理。。。
liu志坚 2018-01-22
  • 打赏
  • 举报
回复
楼上说的是对的,你用的是完全恢复。 restor tablespace sp1; 这时这个表空间恢复到了你备份的时候的状态。这时候是没有B表,有A表。 recover datafile sp1对应的datafile 运行这个recover会应用归档日志和redo日志及undo。 没有指定时间点或scn就是完全恢复,会恢复到最近的时间点。此时就有B表,没A表了。
  • 打赏
  • 举报
回复
引用 1 楼 zcs_zzh 的回复:
你用的是完全恢复,就是把数据库恢复到失败时的状态,失败时有表B,没有表A。 如果要把表A恢复,就要执行不完全恢复,把数据库恢复到删除表A之前。可以基于时间点或者基于SCN,基于时间点用如下命令: run { allocate channel c1 type disk; allocate channel c2 type disk; sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"'; set until time = '2011-10-19 22:21:38'; restore database; recover database; alter database open resetlogs; } 基于SCN号 run { allocate channel c1 type DISK; allocate channel c2 type DISK; set until SCN = ****** ; restore database; recover database; alter database open resetlogs; } (scn号####)
主要是我不太明白 为什么我上面那个备份的数据文件里面应该是没有保 表B,不知道为啥有。是redo的机制吗? 还有 下面你都用了 resetlogs 那联机日志都清空了,这个清空前,他会自己做归档吗?
zcs_zzh 2018-01-22
  • 打赏
  • 举报
回复
你用的是完全恢复,就是把数据库恢复到失败时的状态,失败时有表B,没有表A。 如果要把表A恢复,就要执行不完全恢复,把数据库恢复到删除表A之前。可以基于时间点或者基于SCN,基于时间点用如下命令: run { allocate channel c1 type disk; allocate channel c2 type disk; sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"'; set until time = '2011-10-19 22:21:38'; restore database; recover database; alter database open resetlogs; } 基于SCN号 run { allocate channel c1 type DISK; allocate channel c2 type DISK; set until SCN = ****** ; restore database; recover database; alter database open resetlogs; } (scn号####)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧