您的位置:首页 > 数据库 > Oracle

Oracle闪回技术2

2011-06-21 23:00 429 查看
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为操作所在事务的ID。STARTSCN为操作发生的时刻,而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
分析:闪回事务查询,可以查到某个指定事务操作的相关信息,如上例中指定了事务ID为06000B00FB030000,从问题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特性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: