Flashback Version Query、Flashback Transaction Query快速闪回细粒度数据
Flashback Version Query 闪回版本查询
使用Flashback Version Query 返回在指定时间间隔或SCN间隔内的所有版本,一次commit命令就会创建一个版本。
语法如下:
SELECT .....FROM tablename VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end}
--start,end可以是时间也可以是scn
Flashback Version Query伪列说明
versions_start{scn|time} 版本开始的scn或时间戳
versions_end{scn|time} 版本结束scn或时间戳,如果有值表明此行后面被更改过是旧版本,如果为null,则说明行版本是当前版本或行被删除(即versions_operation值为D)。
versions_xid 创建行版本的事务ID
versions_operation 在行上执行的操作(I=插入,D=删除,U=更新)
示例说明:
SQL> create table xyc_t1 as select * from emp where 1=2; --创建表xyc_t1
Table created.
SQL> select to_date(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; --查询时间作为timestamp开始时间
TO_DATE(SYSDATE,'YY
-------------------
2013-10-06 08:17:58
SQL> insert into xyc_t1 select * from emp where empno=7902; --插入empno=7902
1 row created.
SQL> commit; --插入一行提交作为一个版本
Commit complete.
SQL> insert into xyc_t1 select * from emp where empno=7788;
1 row created.
SQL> insert into xyc_t1 select * from emp where empno=7698;
1 row created.
SQL> commit; --插入两行提交作为一个版本
Commit complete.
SQL> update xyc_t1 set sal=8888 where empno=7788;
1 row updated.
SQL> commit; --再次更改empno=7788的行提交,使这行有旧版本
Commit complete.
SQL> select to_date(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; --查询时间作为timestamp结束时间
TO_DATE(SYSDATE,'YY
-------------------
2013-10-06 08:20:01
/*
select versions_startscn,versions_starttime,versions_endscn,versions_endtime,versions_xid,versions_operation,empno
from xyc_t1 versions between timestamp to_timestamp('2013-10-06 10:14:04','YYYY-MM-DD HH24:MI:SS') and to_timestamp('2013-10-06 10:14:23','YYYY-MM-DD HH24:MI:SS');
*/
SQL> select versions_startscn,versions_starttime,versions_endscn,versions_endtime,versions_xid,versions_operation,empno
2 from xyc_t1 versions between timestamp to_timestamp('2013-10-06 08:17:58','YYYY-MM-DD HH24:MI:SS') and to_timestamp('2013-10-06 08:20:01','YYYY-MM-DD HH24:MI:SS');
VERSIONS_STARTSCN VERSIONS_STARTTIME VERSIONS_ENDSCN VERSIONS_ENDTIME VERSIONS_XID VERSIONS_OPERATION EMPNO
----------------- ------------------------------ --------------- ------------------------------ ---------------- -------------------- ----------
1032654 06-OCT-13 08.19.51 AM 08000E0016030000 U 7788
1032637 06-OCT-13 08.19.14 AM 0600180017030000 I 7698
1032637 06-OCT-13 08.19.14 AM 1032654 06-OCT-13 08.19.51 AM 0600180017030000 I 7788
1032628 06-OCT-13 08.18.47 AM 090014002C030000 I 7902
--可以看出,一次commit是一个版本,当前版本的versions_endscn和versions_endtime值为空,旧版本则有值。
Flashback Transaction Query闪回事务查询
Flashback Transaction Query实际上是查询的数据字典flashback_transaction_query。可以根据flashback_transaction_query 的undo_sql列值返回数据以前版本。
flashback_transaction_query 列说明:
SQL> desc flashback_transaction_query
Name Null? Type
----------------------------------------- -------- ----------------------------
XID RAW(8) --事务ID
START_SCN NUMBER --事务起始SCN,即第一个dml的SCN
START_TIMESTAMP DATE --事务其实时间戳,即第一个dm的时间戳
COMMIT_SCN NUMBER --提交事务时的SCN
COMMIT_TIMESTAMP DATE -- 提交事务时的时间戳
LOGON_USER VARCHAR2(30) --本次事务的用户
UNDO_CHANGE# NUMBER --撤销SCN
OPERATION VARCHAR2(32) --执行的dml操作:DELETE,INSERT,UPDATE,BEGIN,UNKNOWN
TABLE_NAME VARCHAR2(256) --dml更改的表
TABLE_OWNER VARCHAR2(32) --表的所有者
ROW_ID VARCHAR2(19) --修改行的ROWID
UNDO_SQL VARCHAR2(4000) --撤销dml的sql语句
--使用闪回事务查询前,必须启用重做日志流的其他日志记录,重做日志流与Log Miner使用的数据相同,只是接口不同。
示例说明:
SQL> conn / as sysdba;
SQL> alter database add supplemental log data;
Database altered.
SQL> alter database add supplemental log data (primary key) columns;
Database altered.
SQL> grant select any transaction to scott;
Grant succeeded.
SQL> conn scott/xyc
SQL> update xyc_t1 set sal=9999 where empno=7902; --更改值sal=9999
1 row updated.
SQL> commit;
Commit complete.
SQL> select to_date(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
TO_DATE(SYSDATE,'YY
-------------------
2013-10-06 10:14:04
SQL> update xyc_t1 set sal=99999 where empno=7902; --更改值sal=99999
1 row updated.
SQL> commit;
Commit complete.
SQL> select to_date(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
TO_DATE(SYSDATE,'YY
-------------------
2013-10-06 10:14:23
SQL> select versions_startscn,versions_starttime,versions_endscn,versions_endtime,versions_xid,versions_operation,empno
2 from xyc_t1 versions between timestamp to_timestamp('2013-10-06 10:14:04','YYYY-MM-DD HH24:MI:SS') and to_timestamp('2013-10-06 10:14:23','YYYY-MM-DD HH24:MI:SS');
VERSIONS_STARTSCN VERSIONS_STARTTIME VERSIONS_ENDSCN VERSIONS_ENDTIME VERSIONS_XID VERSIONS_OPERATION EMPNO
----------------- ------------------------------ --------------- ------------------------------ ---------------- -------------------- ----------
1035726 06-OCT-13 10.14.17 AM 0400040097020000 U 7902
7698
1035726 06-OCT-13 10.14.17 AM 7902
--查询事务id
SQL> select start_scn,commit_scn,logon_user,operation,table_name,undo_sql
2 from flashback_transaction_query
3 where xid=hextoraw('0400040097020000');
START_SCN COMMIT_SCN LOGON_USER OPERATION TABLE_NAME UNDO_SQL
---------- ---------- -------------------- -------------------- -------------------- --------------------------------------------------
1035724 1035726 SCOTT UPDATE XYC_T1 update "SCOTT"."XYC_T1" set "SAL" = '9999' where R
OWID = 'AAASNYAAEAAAAIVAAD';
--查出undo sql
SQL> update "SCOTT"."XYC_T1" set "SAL" = '9999' where ROWID = 'AAASNYAAEAAAAIVAAD';
1 row updated.
SQL> select * from xyc_t1;
select * from xyc_t1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- ------------------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 9999 20
--返回到上一版本,即sal值为9999
Flashback Version Query、Flashback Transaction Query快速闪回细粒度数据的更多相关文章
- oracle_利用闪回功能恢复数据
方便起见一般:执行如下即可不用往下看: ① 启用行移动功能 alter table tbl_a enable row movement; ② 闪回表数据到某个时间点 flashback table t ...
- Oracle 闪回 找回数据的实现方法
Oracle 闪回 找回数据的实现方法 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复.这篇文章主要介绍了Oracle 闪回 找回 ...
- Flashback Query、Flashback Table(快速闪回查询、快速闪回表)
Flashback Query闪回查询 flashback query是基于undo表空间的闪回,与之相关的参数如下: SQL> show parameter undo NAME ...
- oracle flashback data archive闪回数据归档天坑之XID重用导致闪回查询数据重复
我们有个系统使用了Oracle flashback data archive闪回数据归档特性来作为基于时间点的恢复机制,在频繁插入.更新期间发现SYS_FBA_HIST_NNNN表中的XID被两个事务 ...
- binlog2sql快速闪回
https://github.com/danfengcao/binlog2sql 一.说明: DML(data manipulation language): 它们是SELECT.UPDA ...
- 利用MyFlash闪回丢失数据
MyFlash is an open source tool released by Meituan-Dianping which can be used to flashback MyS ...
- binlog2sql闪回恢复数据
用途: .数据快速回滚 .从binlog生成标准sql 使用限制: .必须设置binlog_format=ROW .binlog_row_image=full,该参数默认为FULL .恢复用户拥有的最 ...
- Oracle 闪回 找回数据
使用闪回技术,实现基于磁盘上闪回恢复区的自动备份与还原. 一.恢复表对象 1.创建学生表 create table STUDENT ( idno INTEGER, name VARCHAR2(30), ...
- Orcale-利用闪回恢复数据方法
一.delete误删 方法1:如果表结构没有改变,直接闪回整个表,具体步骤: --首先需要表闪回权限,开启行移动功能 alter table 表名 enable row movement; --执行闪 ...
随机推荐
- Webview Android与js交互
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true Android(Java)与JavaScript(HTML) ...
- Character Encoding tomcat.
default character encoding of the request or response body: If a character encoding is not specified ...
- IMP数据文件时ORA-00959错误分析
有时间模拟一下ORA-00959的测试分析.
- Javascript深度克隆一个对象
Javascript中的对像赋值与Java中是一样的,都为引用传递.就是说,在把一个对像赋值给一个变量时,那么这个变量所指向的仍就是原来对 像的地址.那怎么来做呢?答案是“克隆”. 克隆有两种方法:一 ...
- windows下apache配置ssl(https)服务器
SSl是为Http传输提供安全的协议,通过证书认证来确保客户端和网站服务器之间的数据是安全, 可以通过apache自带的openssl进行配置: 步骤如下: 1.安装有openssl模板的apache ...
- python中的几种遍历列表的方法比较
python的内容非常丰富,给我们带来的便利很多,很多事情的表达方法有很大的多样性,比如我经常需要遍历一个列表,取它的下标和值,这个时候就有很多方法需要取舍一下才行. for循环遍历 l = [1,2 ...
- lua curl动态链接库编译安装
关于lua curl的资料网上并不是很多.找来找去就那么几个,所以我绝得很有必要把我的经验记下来,以防下次忘记 ...
- soket客户端程序(一)
soket客户端主要完成以下步骤: 1.建立soket套接字(将套接字理解为一个通道) 2.建立连接 3.向服务器发送http请求 4.接收得到的数据 5.关闭连接 6.本地处理得到的数据 http: ...
- PHP之路——微信公众号授权获取用户信息
官方文档链接:http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html /** * 获取code */ public f ...
- 完整的struts.xml文件骨架
完整的struts.xml文件骨架可以直接拿来用,修改一下就可以啦. <?xml version="1.0" encoding="UTF-8"?> ...