求教闪回用法!!!

kahong 2005-11-09 11:08:04
各位高手,我在客户处进行操作数据时,误删除了几条纪录,而且提交了,oracle9i的库,虽然作了dmup,可如果恢复了,前面的操作就全部废了,用户这里没有日志归档,我查了下,可以利用闪回功能进行恢复,有高手能帮帮忙么?在线等啊!!!!谢谢~~~
...全文
204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
developer2002 2005-11-09
  • 打赏
  • 举报
回复
不需要那么复杂。
SELECT * FROM table AS OF TIMESTAMP (to_timestamp('20051108 08:00:33','yyyymmdd hh24:mi:ss'));
liuyi8903 2005-11-09
  • 打赏
  • 举报
回复
我把piner的帖子贴一下:

1、创建FLASH用户
SQL> create user flash identified by flash;
SQL> grant connect, resource to flash;
SQL> grant execute on dbms_flashback to flash;
SQL> connect flash/flash
2、创建一个测试表
SQL> CREATE TABLE tst(t number(5));
Table created.
SQL> INSERT INTO tst VALUES(1);
1 row created.
SQL> INSERT INTO tst VALUES(2);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> CREATE TABLE keep_date (date_scn_tracking date);
Table created.
SQL> SELECT * FROM tst;
T
----------
1
2
注意:在执行步骤3或者步骤4之前,等待5分钟。
3. 删除记录
SQL> execute dbms_flashback.disable;
PL/SQL procedure successfully completed.
SQL> INSERT INTO keep_date select sysdate from dual;
1 row created.
SQL> COMMIT;
Commit complete.
SQL> DELETE FROM tst WHERE t = 1;
1 row deleted.
SQL> COMMIT;
Commit complete.
SQL> SELECT * FROM tst;
T
----------
2
通过以上的操作,我们插入了两条记录,并删除了其中一条记录,现在的结果是,我们这里只有一条记录了。在以下的操作中,我们将通过flashback query找到删除的记录
4. 闪回查询
SQL> declare
2 restore_scn date;
3 begin
4 select date_scn_tracking into restore_scn from keep_date;
5 dbms_flashback.enable_at_time(restore_scn);
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> SELECT * FROM tst;
T
----------
1
2
可以看到,虽然我们删除记录并提交了,但是通过特定操作,我们还能查询到删除前的两条记录,
这里需要特别注意的是,Oracle 9i是每五分钟记录一次SCN的,并将SCN和对应时间的映射做个纪录。如果原来插入的记录到做闪回的时间在5分钟之内,用基于时间的flashback可能并查询不到记录,因为如果是基于时间点的查询,也是转化为最近的一次SCN,然后从这个SCN开始进行恢复,因此,如果需要精确的查询,我们可以采用基于SCN的flashback,它将能精确的闪回到需要恢复的时间,关于获取SCN,我们可以通过DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER或者LOGMNR。如
DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(SCN_NUM);
来定位你的恢复时间点,下面是使用方法:
SQL> VARIABLE SCN_SAVE NUMBER;
SQL>EXECUTE :SCN_SAVE := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;
PL/SQL procedure successfully completed.

SQL> print SCN_SAVE;
SCN_SAVE
----------
2.1202E+11

SQL>execute DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(:SCN_SAVE);

最后注意,Oracle 9i的Flashback有如下限制。
·采用时间点的恢复,不能精确到最近5分钟,如果需要更精确的查询,需要采用SCN。
·不能flashback5天以前的数据,这个并不是undo_retention所能决定的。
·闪回查询无法恢复到表结构改变之前,因为闪回查询使用的当前的数据字典。
·由于受到undo_retention的影响,对于undo_retention之前的时间,flashback不保证能成功
·对于drop,truncate等不记录回滚的操作,flashback是无能为力的。
bierbin 2005-11-09
  • 打赏
  • 举报
回复
关注,回头看看处理方法。
kahong 2005-11-09
  • 打赏
  • 举报
回复
楼上的能帮忙写出来么?谢谢~~~~!!
developer2002 2005-11-09
  • 打赏
  • 举报
回复
用select语句的flash back子句。很简单的。
kahong 2005-11-09
  • 打赏
  • 举报
回复
一楼推荐的文章是10g的,和9i还有差别啊
haifeng1012 2005-11-09
  • 打赏
  • 举报
回复
http://blog.csdn.net/emag_oracle/archive/2005/02/01/276707.aspx

17,377

社区成员

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

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