Oracle恢复表数据到任意时间点以前(求大神解答)

zh_yiyue 2014-11-12 05:02:04
因误更新操作,现在想将表数据恢复到任意时间点以前。
注:1.该表一直在被写入数据,也就是说改变数据一直在变化。
2.create table 新表
as select * from 需要恢复的表
as of timestamp to_timestamp('2014-11-12 11:27:01','yyyy-mm-dd hh24:mi:ss');
使用这个SQL语句没用,提示为“snashot too old: rollback segment number 10 with name 'SYSSMU10$' too small”。
3.没有使用flashback功能。
求大神解答。
...全文
2267 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
flashback 是有时间限制的
binsweet 2014-11-19
  • 打赏
  • 举报
回复
看运气了 select dbms_flashback.get_system_change_number FROM dual; 得到scn 号, 例如94735909 查询你的表 SELECT * FROM t_table AS OF SCN 94735909 可以修改scn号,94735909--->94735000 相当于把时间往前推,一次尝试,知道报错,看最远能否推到你要的数据时间; Scn转换成时间: select to_char(scn_to_timestamp(3998591352171),'YYYY-MM-DD HH24:MI:SS') from dual; 时间转换成scn: select timestamp_to_scn(to_date('2011-04-14 11:10:25','YYYY-MM-DD HH24:MI:SS')) from dual
猿人林克 2014-11-19
  • 打赏
  • 举报
回复
引用 1 楼 wildwave 的回复:
闪回查询需要回滚段支持,能查询到数据的前镜像。但是回滚段大小不够时,老的数据会被覆盖,因此能闪回的是有个时间范围,不可能做到任意时间 修改undo_retention的时间值 及分配足够大的空间
正解,楼主这种需求只能自己处理了,自建表加上时间戳,用触发里copy原表操作存到自建表。然后就去查你的自建表吧
  • 打赏
  • 举报
回复
引用 2 楼 bw555 的回复:
建日志表,建触发器记录表的更新日志吧,利用自带的方法没办法实现你的功能
正解,但是消耗相应要大很多。 利用闪回的话范围有限。 楼主自己把握
bw555 2014-11-12
  • 打赏
  • 举报
回复
建日志表,建触发器记录表的更新日志吧,利用自带的方法没办法实现你的功能
小灰狼W 2014-11-12
  • 打赏
  • 举报
回复
闪回查询需要回滚段支持,能查询到数据的前镜像。但是回滚段大小不够时,老的数据会被覆盖,因此能闪回的是有个时间范围,不可能做到任意时间 修改undo_retention的时间值 及分配足够大的空间

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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