闪回事务查询

  • 原理:基于undo
  • 闪回事务查询可以看作一个在事务级别查询数据库改变的一个诊断工具
  • FLASHBACK_TRANSACTION_QUERY
    • retrieve transaction information for all tables involved in a transaction.
    • provides the SQL statements that you can use to undo the changes made by a particular transaction
  • 需要打开最小附加日志:
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

例:

  1. \**查询所有事务信息*\
  2. SQL> SELECT operation, undo_sql, table_name FROM flashback_transaction_query;
  1. \**返回指定事务的信息*\
  2. SQL> SELECT operation, undo_sql, table_name FROM flashback_transaction_query WHERE xid = HEXTORAW(‘8C0024003A000000‘) ORDER BY undo_change#;
  3. SELECT xid,
  4. operation,
  5. start_scn,
  6. commit_scn,
  7. logon_user,
  8. undo_sql
  9. FROM flashback_transaction_query
  10. WHERE xid = HEXTORAW(‘000400070000004F‘);
  1. \**返回指定时间间隔的事务信息*\
  2. SQL> SELECT operation, undo_sql, table_name FROM flashback_transaction_query WHERE start_timestamp >= TO_TIMESTAMP (‘2003-10-21 11:00:00‘,‘YYYY-MM-DD HH:MI:SS‘)
  3. AND commit_timestamp <= TO_TIMESTAMP(‘2003-10-21 11:30:00‘,‘YYYY-MM-DD HH:MI:SS‘);
  4. SELECT xid,
  5. logon_user
  6. FROM flashback_transaction_query
  7. WHERE xid IN ( SELECT versions_xid
  8. FROM personnel
  9. VERSIONS BETWEEN
  10. TIMESTAMP TO_TIMESTAMP(‘2007-03-21 19:30:00‘, ‘YYYY-MM-DD HH24:MI:SS‘)
  11. AND TO_TIMESTAMP(‘2007-03-22 04:30:00‘, ‘YYYY-MM-DD HH24:MI:SS‘) );

实操场景

1.打开附加日志,并授权

  1. alter database add supplemental log data;
  2. grant SELECT ANY TRANSACTION to hr;

2.产生事务

  1. insert into hr.departments
  2. (department_id,department_name,manager_id,location_id)
  3. values (999,‘SETI‘,100,1700);
  4. update hr.employees set department_id=999
  5. where employee_id=200;
  6. commit;

3.获取事务号并且通过事务号得到undo sql

  1. select
  2. versions_xid,versions_startscn,department_id,department_name
  3. from hr.departments
  4. versions between timestamp minvalue and maxvalue
  5. where department_id=999
  6. order by 2 nulls first;
  7. set line 200
  8. col undo_sql for a90
  9. SELECT operation, undo_sql, table_name FROM flashback_transaction_query WHERE xid = HEXTORAW(‘10000A0039030000‘) ORDER BY undo_change#;
  10. OPERATION UNDO_SQL TABLE_NAME
  11. ---------- ------------------------------------------------------------------------------------------ ------------------------------
  12. UPDATE update "HR"."EMPLOYEES" set "DEPARTMENT_ID" = ‘10‘ where ROWID = ‘AAAWXeAAEAAAAZtAAC‘; EMPLOYEES
  13. INSERT delete from "HR"."DEPARTMENTS" where ROWID = ‘AAAWXZAAEAAAAZMAAb‘; DEPARTMENTS
  14. BEGIN
  15. ----如果需要回退,执行上面的undo_sql即可

使用下面的pl/sql语句回退事务

  1. begin
  2. for rec in
  3. (select undo_sql
  4. from flashback_transaction_query
  5. where xid=‘10000A0039030000‘)
  6. loop
  7. if rec.undo_sql is not null then
  8. execute immediate substr(rec.undo_sql,1,length(rec.undo_sql)-1);
  9. end if;
  10. end loop;
  11. commit;
  12. end;
  13. /

来自为知笔记(Wiz)

时间: 2024-08-24 10:06:59

闪回事务查询的相关文章

[课]10.1闪回查询的三种方式:闪回查询/闪回版本查询/闪回事务查询

数据库版本 1.1闪回查询演示 1.2闪回版本查询演示 1.3闪回事务查询演示 在做闪回事务查询时候,我们需要使用ORACLE提供的一个系统视图FLASHBACK_TRANSACTION_QUERY.闪回事务查询与闪回版本查询之间有着密切的关系,从刚才我们实验的闪回版本查询中可以知道有一个伪列VERSIONS_XID,那么闪回事务查询就是通过这个伪列与闪回版本查询发生关联. 我们现在查看一下该表的表结构: 开始演示:

闪回事务(Flashback Transaction)

到目前为止,介绍的所有功能均不会直接将数据恢复为"以前"的样子.闪回查询只是查看,闪回数据归档只是延伸了闪回查询的时间窗口,闪回事务查询虽然提供了撤销SQL,但是否执行及如何执行还需要管理员进一步手动操作. 若是管理员决定撤销某个或某些事务,Oracle提供一个专门用来撤销事务的工具--闪回事务. 闪回事务又名撤销事务(Backout Transaction),能够撤销一个或多个事务的修改,其功能由一个名为DBMS_FLASHBACK.TRANSACTION_BACKOUT的存储过程实

闪回版本查询

DBAs can use Oracle Flashback Version Query to retrieve the different versions of specific rows that existed during a given time interval. A row version is created whenever a COMMIT statement is executed.闪回版本的作用是查询指定行的不同的版本数据,也就是指定行在过去的不同值 规则:(查询真实表)

闪回flashback

1.flashback query(使用UNDO)查询某个scn时该表的内容 SQL> select * from t1; ID----------         1         2 SQL> select current_scn from v$database; CURRENT_SCN-----------   10517036 SQL> update t1 set id=11 where id=1; 已更新 1 行. SQL> commit; 提交完成. SQL>

ORACLE 10G 闪回建议

Flashback Tips The following tips and restrictions apply to using flashback features. Flashback Tips – Performance For better performance, generate statistics on all tables involved in a Flashback Query by using the DBMS_STATS package, and keep the s

oracle闪回那些事

开启闪回数据库 alter database flashback on; alter database open; 修改日期时间显示格式: alter session  set nls_date_format='yyyy-mm-dd hh24:mi:ss'; 查看系统视图 v$flashback_database_log中查看闪回数据库日志信息: select * from v$flashback_database_log; 闪回数据库: flashback database to timest

Oracle OCP笔记(31)使用闪回功能

Oracle OCP笔记(31)使用闪回功能 Oracle的闪回功能受到3个数据库结构之一的支持: 撤消数据.闪回恢复区和回收站. 撤消表空间中的撤销数据不仅支持事务回滚,也支持大多数闪回表操作.Flashback Data Archives允许查询先前版本的表行,它在撤销表空间之外的一个或多个表空间中提供一个区域,支持的保留期比撤销表空间还长.闪回日志保存在闪回恢复区中,从而无需执行传统的还原和恢复操作,即可方便地将整个数据库回滚到过去的时间点.每个表空间中的回收站包含一个或多个版本的已删除的

Oracle学习(15)【DBA向】:闪回

闪回Flashback 什么是闪回 l在Oracle的操作工程中,会不可避免地出现操作失误或者用户失误,例如不小心删除了一个表等,这些失误和错误可能会造成重要数 据的丢失,最终导致Oracle数据库停止. l在传统意义上,当发生数据丢失.数据错误问题时,解决的主要办法是数据的导入导出.备份恢复技术,这些方法都需要在发生错误 前,有一个正确的备份才能进行恢复. l为了减少这方面的损失,Oracle提供了闪回技术.有了闪回技术,就可以实现数据的快速恢复,而且不需要数据备份. 闪回的好处 恢复中,闪回

Oracle学习(十三):闪回

1.知识点:能够对比以下的录屏进行阅读 SQL> --1. 错误地删除了记录 SQL> --2. 错误地删除了表 SQL> --3. 查询历史记录 SQL> --4. 怎样撤销一个已经提交的事务 SQL> SQL> --闪回的类型 SQL> --1. 闪回表:将表回退到过去的一个时间上 SQL> --2. 闪回删除:Oracle回收站 SQL> --3. 闪回版本号查询:全部历史记录 SQL> --4. 闪回事务查询:通过select语句得到一个