flashback学习笔记
1.特性
作为10G提供的一个新特性,可以通过flashback查看过去的数据,并且可以恢复数据到以前的状态,如果没有这个特性,想查看
过去的数据,可能需要做一个介质恢复才可以。
2.两种用法
flashback database --- 需要flash recovery area
flashback table --- 恢复行数据,需要足够的undo信息,row movement 必须是enable状态
--- 删除对象后,会放在recyclebin中,如果空间不够用会覆盖recyclebin
3.具体用法
Oracle Flashback Query ---- 可以直接查询之前的数据
Oracle Flashback Version Query ---- 可以查看一段时间范围或SCN范围之内数据的变化
Oracle Flashback Transaction Query ---- 通过Version Query查询到的XID查找FLASHBACK_TRANSACTION_QUERY视图来回退事务
DBMS_FLASHBACK ---- flashback 包
4.使用这些新特性的前提
a.创建一个足够大的undo表空间
b.自动管理undo表空间
c.都undo 表空间指定RETENTION GUARANTEE特性,保重undo block在retention期间内不会被覆盖,这样就需要较大的undo空间。
d.授予相关用户该权限 包dbms_flashback,flashback,select,SELECT ANY TRANSACTION
还要授予SELECT, UPDATE, DELETE权限给要flashback的表。
e.仅限于10G
f.对lob列要特别指定
5 例子
5.1 Oracle Flashback Query
使用select ... as of 方法, of后面可以跟timestamp或者scn
1.恢复删除的数据
2.比较现在的数据和过去的数据的不同
3.检查事务数据在不同时间的状态
查看一下当前的时间
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2009-07-23 01:09:13
过一会儿,执行一个update操作
SQL> update test set owner='abc' where object_id=123;
1 row updated.
执行commit,如果没有select .. as of这个特性,除非做一个介质恢复,否则数据可能就无法找到了
SQL> commit;
Commit complete.
执行select .. as of方法,如下可以看到已经看到原来的owner值是sys
SQL> select owner from test as of timestamp to_timestamp('2009-07-23 01:09:59','yyyy-mm-dd hh24:mi:ss') where object_id=123;
OWNER
------------------------------------------------------------
SYS
数据库中实际的值是
SQL> select owner from test where object_id=123;
OWNER
------------------------------------------------------------
abc
如果想把以前的值写会数据库,可以执行insert或者update,下面举一个update的列子
update test set owner=(select owner from test as of timestamp to_timestamp('2009-07-23 01:09:59','yyyy-mm-dd hh24:mi:ss') where object_id=123) where object_id=123;
5.2 flashback version query 和 flashback transaction query的用法
这两个特性一般是配合使用,先通过flashback version query查到事务id,也就是xid,
然后通过xid查找flashback_transaction_query视图来确定undo sql语句。
SQL> l
1 SELECT versions_startscn, versions_starttime,
2 versions_endscn, versions_endtime,
3 versions_xid, versions_operation,
4 owner
5 FROM test.test
6 VERSIONS BETWEEN TIMESTAMP
7 TO_TIMESTAMP('2009-07-23 01:09:00','YYYY-MM-DD HH24:MI:SS')
8 AND TO_TIMESTAMP('2009-07-23 02:07:00','YYYY-MM-DD HH24:MI:SS')
9* WHERE object_id=123
SQL> /
VERSIONS_STARTSCN VERSIONS_STARTTIME VERSIONS_ENDSCN VERSIONS_ENDTIME VERSIONS_XID VE OWNER
----------------- ------------------------------ --------------- ------------------------------ ---------------- -- ----------
1333419 23-JUL-09 02.06.21 AM 00090015000002BB U asd
1331780 23-JUL-09 01.17.53 AM 1333419 23-JUL-09 02.06.21 AM 0006000D000002B4 U SYS
1331546 23-JUL-09 01.10.10 AM 1331780 23-JUL-09 01.17.53 AM 00090020000002BA U abc
1331546 23-JUL-09 01.10.10 AM SYS
SELECT xid, operation, start_scn,commit_scn, logon_user, undo_sql
FROM flashback_transaction_query
WHERE xid = HEXTORAW('00090015000002BB');
阅读(1393) | 评论(0) | 转发(0) |