基于时间点的闪回

1、 模拟用户误删除数据

SQL> select count(*) from kel;

  COUNT(*)
----------
	 1

SQL> truncate table kel;

Table truncated.

SQL> select count(*) from kel;

  COUNT(*)
----------
	 0

2、查看当前时间--(根据此时间来进行数据库闪回操作)

SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY-MM-DDHH24:MI:S
----------------------------------
14-07-22 19:24:23

3、确认能恢复的时间点

根据视图v$flashback_database_log或者v$flashback_database_logfile中的内容来确定能恢复的时间

SQL> col oldest_flashback_scn format 999999 heading 'oldest|flashback|scn #';--表示数据库能回退到最早的SCN号
SQL> col oldest_flashback_time format a20 heading 'oldest|flashback|time';--表示数据库能回退到最早的时间
SQL> col retention_target format 999999 heading 'retention|target';--表示当前系统参数值的设定
SQL> col flashback_size format 9999999 heading 'flashback|size'; --表示目前flashback日志的大小
SQL> col estimated_flashback_size format 999999 heading 'estimated|flashback|size'; --表示为了达到retention target,预计需要多大的日志空间,可以用来参考设置flash recover area的大小

SQL> select oldest_flashback_scn,to_char(oldest_flashback_time,'yy-mm-dd hh24:mi:ss') oldest_flashback_time,retention_target,flashback_size,estimated_flashback_size from v$flashback_database_log;

   oldest oldest				   estimated
flashback flashback	       retention flashback flashback
    scn # time			  target      size	size
--------- -------------------- --------- --------- ---------
   759066 14-07-22 00:24:49	    1440   8192000	   0

flashback database 能回退的最早的时间,取决于保留在flashback recover area中的flashback database 日志的多少。

在另外一个试图中叶可以查看到相关的信息:

SQL> col log# format 9999 heading 'flashback|log #';
SQL> col bytes format 9999999 heading 'flashback|log size';
SQL> col first_change# format 9999999 heading 'flashback|scn #';
SQL> col first_time format a24 heading 'flashback start time';
SQL> select log#,bytes,first_change#,first_time from v$flashback_database_logfile;

flashback flashback flashback
    log #  log size	scn # flashback start time
--------- --------- --------- ------------------------
	1   8192000    759120 22-JUL-14

4、重新启动数据库到mount阶段

闪回数据库实际上是一个不完全恢复数据库的过程,因此需要关闭数据库,重启数据库到mount阶段,闪回数据库与不完全恢复数据库不同的是,闪回不需要进行restore的操作

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size		    2019320 bytes
Variable Size		  113246216 bytes
Database Buffers	   50331648 bytes
Redo Buffers		    2174976 bytes
Database mounted.

5、 进行闪回数据库

基于时间的恢复,参考的时间点为查询的时间点

SQL> flashback database to timestamp to_timestamp('14-07-22 19:53:04','yy-mm-dd hh24:mi:ss'); --此时间点是根据第二步来的

Flashback complete.

6、 查看是否恢复成功

SQL> alter database open read only;

Database altered.

SQL> select count(*) from kel.kel;

  COUNT(*)
----------
	 0
在查看恢复是否成功的时候,将数据库打开到只读的状态,这样如果未完全恢复,还是可以进行第二次基于时间点的恢复,从上可以看到数据并未恢复,从而选择一个靠前的时间来进行恢复。

7、 第二次基于时间点的恢复

SQL> flashback database to timestamp to_timestamp('14-07-22 19:50:00','yy-mm-dd hh24:mi:ss');

Flashback complete.

SQL> alter database open read only;

Database altered.

SQL> select count(*) from kel.kel;

  COUNT(*)
----------
	 1

数据恢复之后,关闭数据库,打开数据库的时候用resetlog打开

8.、打开数据库

SQL> alter database open resetlogs;

Database altered.

在数据库打开之后,最好对数据库做一个全备,从而防止数据丢失。

9、相关视图

SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------------------------
YES

SQL> select * from v$flashback_database_stat;

BEGIN_TI END_TIME FLASHBACK_DATA    DB_DATA  REDO_DATA ESTIMATED_FLASHBACK_SIZE
-------- -------- -------------- ---------- ---------- ------------------------
21:12:52 21:54:34	  843776    2326528	411136			      0
20:05:44 21:12:52	 5939200    8683520    2643456		      127377408

10、相关命令

FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] SCN <system_change_number>   --基于SCN闪回            
FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] TIMESTMP <system_timestamp_value>--基于时间戳闪回           
FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] RESTORE POINT <restore_point_name>--基于时点闪回
下面的示例:
            SQL> flashback database to timestamp('2014-07-23 13:04:30','yyyy-mm-dd hh24:mi:ss');           
            SQL> flashback database to scn 8190000;
            SQL> flashback database to restore point kel;
          备注:创建闪回点语法:create restore point 闪回点名称;


posted @ 2014-07-23 12:43  KEL  阅读(392)  评论(0编辑  收藏  举报