利用ORACLE的闪回功能恢复数据
一、 闪回表数据
从9i开始,Oracle提供了闪回(FLASHBACK)功能。使用FLASHBACK TABLE语句从撤消段中(undo segment)读取该表的过去映像,并利用Oracle9i中引入的回闪查询重建表行。UNDO_RETENTION给出了闪回支持的最小时间。也就是说,FLASHBACK最少可以支持UNDO_RETENTION给出的时间,如果系统比较闲,则可以闪回更长的时间。(当然,如果回滚表空间的空间分配不足,当系统处于忙时,有可能重用还没有达到UNDO_RETENTION时间限制的数据的空间)。使用闪回的一个前提是表不能进行DDL操作。不但不能对DDL操作进行回闪,而且,也无法闪回到DDL操作以前的数据了。
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
--获得系统变更号
C:\Documents and Settings\linyuefeng>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 10月 26 20:41:28 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn scott/scott@ora10g;
已连接。
SQL> var scn number
SQL> exec :scn :=dbms_flashback.get_system_change_number
PL/SQL 过程已成功完成。
SQL> print scn
SCN
----------
914958
SQL> select count(*) from emp;
COUNT(*)
----------
14
SQL> delete f
一、 闪回表数据
从9i开始,Oracle提供了闪回(FLASHBACK)功能。使用FLASHBACK TABLE语句从撤消段中(undo segment)读取该表的过去映像,并利用Oracle9i中引入的回闪查询重建表行。UNDO_RETENTION给出了闪回支持的最小时间。也就是说,FLASHBACK最少可以支持UNDO_RETENTION给出的时间,如果系统比较闲,则可以闪回更长的时间。(当然,如果回滚表空间的空间分配不足,当系统处于忙时,有可能重用还没有达到UNDO_RETENTION时间限制的数据的空间)。使用闪回的一个前提是表不能进行DDL操作。不但不能对DDL操作进行回闪,而且,也无法闪回到DDL操作以前的数据了。
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
--获得系统变更号
C:\Documents and Settings\linyuefeng>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 10月 26 20:41:28 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn scott/scott@ora10g;
已连接。
SQL> var scn number
SQL> exec :scn :=dbms_flashback.get_system_change_number
PL/SQL 过程已成功完成。
SQL> print scn
SCN
----------
914958
SQL> select count(*) from emp;
COUNT(*)
----------
14
SQL> delete f