Oracle闪回技术2

1. 利用基于AS OF TIMESTAMP和基于AS OF SCN的闪回查询,分别查询第一次更新操作进行之前exercise中的数据。

13:41:52 SQL> select sno,sname from exercise as of timestamp to_timestamp('2011-6-19 13:39:08','YYYY-MM-DD HH24:MI:SS');

       SNO SNAME                                                               

---------- --------------------                                                 

       100 zhangsan                                                            

       200 lisi                                                                

       300 wangwu    

13:43:00 SQL> select sno,sname from exercise as of scn 1477049;

 

       SNO SNAME                                                               

---------- --------------------                                                

       100 zhangsan                                                            

       200 lisi                                                                

       300 wangwu   

分析:闪回查询利用了数据库回滚段存放的信息查看指定表中过去某个时间点的数据信息,上例中分别用时间戳和SCN来表示特定的时间点,查看了该时间exercise表字段的值。‘2011-6-19 13:39:08’为第一次更新事务cimmit的时间,所以查看到的是第一次更新前的值。

2. 利用基于VERSIONS BETWEEN TIMESTAMP和基于VERSIONS BETWEEN SCN的闪回版本查询,分别查询sno = 100 的记录版本信息。

   下午 01:51:50 SQL> select versions_xid XID,versions_starttime STARTTIME,versions_endtime ENDTIME,versions_operation OPERATION from exercise VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE where sno=100 order by starttime;

 

XID              STARTTIME                                                                        ENDTIME                                                                          OPERATION

---------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------

06000B00FB030000 19-6 -11 01.38.40 下午                                                         19-6 -11 01.39.22 下午                                                         I

05002000CA030000 19-6 -11 01.39.22 下午                                                         19-6 -11 01.40.08 下午                                                         U

05000C00CB030000 19-6 -11 01.40.08 下午                                                                                                                                          U

 

下午 01:53:32 SQL> select versions_xid XID,versions_startscn STARTSCN,versions_endscn ENDSCN,versions_operation OPERATION from exercise VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE where sno=100;

 

XID                STARTSCN     ENDSCN OPERATION

---------------- ---------- ---------- ---------

05000C00CB030000    1477090            U

05002000CA030000    1476964    1477090 U

06000B00FB030000    1476947    1476964 I    

分析:利用闪回版本查询,可以查看一行记录在一段时间内的变化情况,即一行记录的多个提交的版本信息,从而可以实现数据的行级恢复。上例中查询了sno=100的特定行记录的变化版本信息。XID为操作所在事务的IDSTARTSCN为操作发生的时刻,而OPERATION项则表示操作的类型,U为更新操作,I为插入操作。

     3. 使用闪回事务查询查看最后一个事务的详细操作信息并闪回这个事务

下午13:54:15 SQL> select operation,undo_sql from FLASHBACK_TRANSACTION_QUERY

WHERE xid=HEXTORAW('06000B00FB030000');

 

OPERATION                        UNDO_SQL

-------------------------------- --------------------------------------------------------------------------------

UPDATE                           update "SYS"."EXERCISE" set "SNAME" = 'newname             ' where ROWID = 'AAAR

DELETE                           insert into "SYS"."EXERCISE"("SNO","SNAME") values ('200','lisi                '

BEGIN

分析:闪回事务查询,可以查到某个指定事务操作的相关信息,如上例中指定了事务ID06000B00FB030000,从问题2闪回版本信息查询中可以看出该事务进行的是更新操作,利用该事务的ID可以查看该事务执行了那些语句。

4. 利用闪回表技术,将exercise表恢复到删除操作进行之前的状态。

下午 02:04:23 SQL> alter table exercise enable row movement;

下午 02:04:50 SQL> flashback table exercise to timestamp TO_TIMESTAMP('2011-6-19 13:39:35',

'YYYY-MM-DD HH24:MI:SS');

闪回完成。

下午 02:05:15 SQL> select * from exercise;

       SNO SNAME

---------- --------------------

       100 zhangsan

       200 lisi

    300 wangwu

分析:闪回表技术可以恢复到某个时刻数据表的状态,上例中,'2011-6-19 13:39:35',是删除操作所在事务提交前的某个时刻,通过闪回表技术可以将表的状态恢复到删除操作前的状态,所以在闪回操作后,exercise表中sno=100的记录没被删除。

5. 执行“DROP TABLE exercise”语句,然后利用闪回删除技术恢复exercise表。

下午 02:05:30 SQL> show parameter recyclebin;

NAME              TYPE      VALUE

――――――――――――――――――――――

recyclebin            string      on

下午 02:06:37 SQL> DROP TABLE exercise;

下午 02:07:22 SQL> flashback table exercise to before drop;

分析:闪回表技术可以将表闪回到某个操作之前,如上例中,将表恢复到删除操作前。进行该操作,需要具备几个前提条件,如拥有闪回表的权限,撤销表空间进行回滚信息的自动管理等。

6. 利用闪回数据库技术,将数据库恢复到创建表之前的状态。

      1)设置数据库的归档模式:

16:44:33 SQL> conn sys/yaoxw as sysdba;

已连接。

16:44:50 SQL>  archive log list;

数据库日志模式             非存档模式

自动存档             禁用

存档终点            USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列     10

当前日志序列           12

16:45:43 SQL> shutdown immediate

16:46:18 SQL> startup mount

16:46:32 SQL> alter database archivelog;

16:46:47 SQL> alter database open;

16:47:03 SQL> alter system archive log start;

16:47:23 SQL> archive log list;

数据库日志模式            存档模式

自动存档             启用

存档终点            USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列     10

下一个存档日志序列   12

当前日志序列           12

2)设置数据库的闪回恢复区:

SQL> show parameter db_recovery_file;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string      F:/app/Administrator/flash_recovery_area

db_recovery_file_dest_size           big integer 2G

 

3)启动数据库FLASHBACK特性:

16:50:15 SQL> shutdown immediate

16:51:01 SQL> startup mount

16:51:15 SQL> alter database flashback on;

16:51:27 SQL> alter database open;

16:51:44 SQL> alter system set DB_FLASHBACK_RETENTION_TARGET=2880;

4)闪回数据库操作:

 

16:52:46 SQL> shutdown immediate

16:55:20 SQL> startup mount exclusive

16:55:46 SQL> flashback database to timestamp(TO_TIMESTAMP('2011-6-16 15:00:00','YYYY-MM-DD HH24:MI:SS'));

5)验证数库的状态(exercise表不存在)

SQL> select * from exercise;

select * from exercise

ORA-00942: 表或视图不存在

   分析:闪回数据库技术可以在数据库文件的基础上进行回滚操作,但是,进行闪回数据库操作必须满足以下条件:数据库处于归档模式下;数据库设置了闪回恢复区(默认已设置);启用了FLASHBACK DATABASE特性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值