- 浏览: 785066 次
- 性别:
- 来自: 广州
文章分类
最新评论
闪回事务查询有别于闪回查询的特点有以下3个:
(1)其正常工作不但需要利用撤销数据,还需要事先启用最小补充日志。
(2)返回的结果不是以前的“旧”数据,而是能够将当前数据修改为以前的样子的撤销SQL(Undo SQL)语句。
(3)集中地在名为flashback_transaction_query表上查询,而不是在各个表上通过“as of”或“versions between”子句查询。
了解了以上特点之后,使用闪回事务查询就没有任何困难了,首先打开最小补充日志:
SQL> alter database add supplemental log data;
Database altered.
从此以后,只要在闪回查询的查询窗口内,管理员就可以通过flashback_transaction _query表获得相关事务的撤销SQL。下面列举一个典型的闪回事务查询的使用方法。
场景:用户在一个事务中分别使用insert和update命令修改了hr.departments和hr.employees表,命令细节如下所示:
SQL> insert into hr.departments
2 (department_id,department_name,manager_id,location_id)
3 values (999,'SETI',100,1700);
1 row created.
SQL> update hr.employees set department_id=999
2 where employee_id=200;
1 row updated.
SQL> commit;
Commit complete.
该事务创建了一个新的999号部门,并且将200号员工指派入该新部门,该员工在此之前在10号部门上班。可惜这个事务是人为错误!且看如何利用闪回事务查询恢复原始状态。首先通过闪回版本查询获得该事务的XID,比如从错误的999号部门入手:
SQL> 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;
VERSIONS_XID VERSIONS_STARTSCN DEPARTMENT_ID DEPARTMENT_NAME
--------------- ----------------- ------------- ------------------------------
090010002B030000 1037789 999 SETI
然后使用结果中的事务号090010002B030000查询flashback_transaction_query表以获得撤销SQL:
SQL> select undo_sql
2 from flashback_transaction_query
3 where xid='090010002B030000';
UNDO_SQL
--------------------------------------------------
update "HR"."EMPLOYEES" set "DEPARTMENT_ID" = '10'
where ROWID = 'AAAR5pAAFAAAADLAAC';
delete from "HR"."DEPARTMENTS"
where ROWID = 'AAAR5kAAFAAAACtAAA';
2 rows selected.
结果得到了两句dml命令,如果遵循给出的ROWID不难发现撤销SQL试图将hr.employees表中200号员工的部门从999修改为10:
SQL> select employee_id,department_id
2 from hr.employees where rowid='AAAR5pAAFAAAADLAAC';
EMPLOYEE_ID DEPARTMENT_ID
----------- -------------
200 999
并且试图删除999号部门:
SQL> select * from hr.departments where ROWID = 'AAAR5kAAFAAAACtAAA';
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
999 SETI 100 1700
如果根据撤销SQL的手段处理,那不是正好将一开始的新部门创建及修改200号员工部门的insert和update命令抵消。笔者利用一个简单的PL/SQL匿名块来执行undo_sql:
SQL> begin
2 for rec in
3 (select undo_sql
4 from flashback_transaction_query
5 where xid='090010002B030000')
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 /
PL/SQL procedure successfully completed.
检查一下效果,应该发现200号员工不在999号部门了:
SQL> select department_id from hr.employees where employee_id=200;
DEPARTMENT_ID
-------------
10
并且999号部门也不存在了:
SQL> select department_name from hr.departments where department_id=999;
no rows selected
闪回事务查询可以将同一事务的所有撤销SQL列出,这是闪回查询做不到的,如有必要,管理员还能够执行对应一个事务的部分撤销SQL以一种破坏事务原子性的方式恢复一部分数据,如此行事正确与否完全取决于应用的逻辑。
最后,因为ddl命令的撤销SQL包括对数据字典表的DML操作,并且人为地直接修改数据字典表是非常危险的,况且某些DDL操作不仅仅是对数据字典的DML操作,它们还涉及撤销SQL无法影响到的领域,所以不要指望通过直接执行撤销SQL恢复错误的ddl命令造成的影响。
发表评论
-
Oracle 10g 的clusterware 32位 下载地址
2013-04-19 23:03 1208Oracle 10g 的clusterware 32位 下载地 ... -
oracle 分析函数 RANK()
2013-04-11 00:05 1099RANK()既是一个聚合函数,也是一个分析函数 其具体的语法 ... -
oracle 分析函数
2013-04-09 23:25 1172分析函数是用于计算一组中多行的聚合值,与聚合函数的区别在于聚合 ... -
批量执行 bulk collect与forall用法
2013-04-08 23:49 1389BULK COLLECT 子句会批量检 ... -
pl/sql集合类型
2013-03-26 10:12 1573--集合类型 /* 单行单列的数据,使用标量变量 单行 ... -
oracle 行链接与行迁移
2013-03-16 01:06 1105表里的一行对于一个数据块太大的情况有二种(一行在一个数据块里放 ... -
oracle Health Monitor
2013-01-20 00:02 1611About Health Monitor Beginning ... -
oracle moving window size与 AWR retention period关系
2013-01-19 15:58 8486转自: http://tomszrp.itpub.net/po ... -
Oracle11.2新特性之INSERT提示IGNORE_ROW_ON_DUPKEY_INDEX
2013-01-12 00:20 2914insert提示IGNORE_ROW_ON_DUPKEY_IN ... -
oracle 11g新特性Flashback data archive
2013-01-09 22:52 30861. 什么是flashback data archive F ... -
RMAN List和report 命令
2012-12-25 00:07 2897LIST 命令 使用RMAN LIST 命令显示有关资料档案库 ... -
oracle ASM中ASM_POWER_LIMIT参数
2012-12-24 23:46 6428ASM_POWER_LIMIT 该初始化参数用于指定ASM例程 ... -
oracle I/O 从属进程
2012-12-24 23:24 1418I/O 从属进程 I/O从 ... -
easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符
2012-12-19 23:43 5640用easy connect连接出现“tns无法解析指定的连接标 ... -
Flashback Database --闪回数据库
2012-12-19 23:38 1390Flashback 技术是以Undo segment中的内容为 ... -
Oracle 11g新特性:Automatic Diagnostic Repository
2012-12-19 22:35 1393Oracle Database 11g的FDI(Fault D ... -
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
2012-12-19 22:09 2689RMAN配置中通道(CHANNEL)相 ... -
oracle 空间RESUMABLE
2012-12-14 22:05 3060空间RESUMABLE操作 转 Oracle从9i开始 ... -
oracle 创建视图 with check option
2012-12-13 23:14 1524我们来看下面的例子: create or replace vi ... -
pl/sql连不上oracle数据库
2012-11-21 22:56 3749pl/sql 9.2版本连不上oracle数据库 当系统安装 ...
相关推荐
该技术允许选择性地复原某些对象,在 Oracle 11g 中,闪回技术包括闪回数据库、闪回表、闪回查询、闪回版本查询、闪回事务查询和闪回丢弃等方面。 2. 闪回数据库(Flashback Database) 闪回数据库允许用户通过 ...
1. **闪回查询**:使用`SELECT * FROM table_name AS OF TIMESTAMP TO_TIMESTAMP('YYYY-MM-DD HH24:MI:SS', 'YYYY-MM-DD HH24:MI:SS');`查询某个时间点的数据。 2. **闪回表**:使用`FLASHBACK TABLE table_name TO ...
Flashback Query 是 Oracle Flashback 特性中最基本的部分,它允许用户通过闪回查询来查看过去的数据状态。Flashback Query 通过使用多版本读一致性的 undo 表空间来读取操作前的记录数据。Flashback Query 有多种...
使用Flashback Transaction Query,可以查看历史事务的详细信息,然后使用ROLLBACK TRANSACTION TO SAVEPOINT或ALTER SYSTEM ROLLBACK TRANSACTION命令来撤销特定事务。 在提供的"恢复oracle中用plsql误删除drop掉...
5. 闪回事务查询(Flashback Transaction Query):查看某个事务或所有事务在过去一段时间对数据进行的修改。 6. 闪回表(Flashback Table):将表恢复到过去的某个时间点或某个 SCN 值时的状态。 闪回数据库的结构...
Flashback 系列是 Oracle 数据库中的一组功能强大且实用的闪回机制,旨在帮助数据库管理员和开发者快速恢复数据库中的各种对象,包括表、数据、事务等。Flashback 系列的功能可以追溯到 Oracle 9i 版本,并在后续...
闪回查询允许用户通过SQL语句查看数据库在某个时间点或事务快照的状态。这主要通过`AS OF TIMESTAMP`或`AS OF SCN`子句实现。例如,可以使用`SELECT * FROM table AS OF TIMESTAMP to_timestamp('2022-03-01 12:00:...
1. Flashback Query(闪回查询):它允许用户通过SQL语句查询数据库的过去状态,仿佛回到了特定的时间点。使用`AS OF`或`FOR UPDATE OF`子句,我们可以查看到特定时间点的表数据或锁定记录。 2. Flashback Table...
Oracle 闪回(Flashback)技术是Oracle数据库提供的一种强大工具,主要用于数据恢复和时间点一致性查询。这一技术的核心在于Undo Segment,它记录了数据库中事务的撤销信息。Oracle 10g引入了多种闪回功能,包括...
在Oracle 10g中,闪回查询得到了增强,增加了闪回版本查询(Flashback Version Query)和闪回事务查询(Flashback Transaction Query)。 1. 闪回版本查询 闪回版本查询允许用户查询一段时间内数据表的不同版本。...
1. **闪回查询(Flashback Query)** 闪回查询允许我们查看数据库在某个特定时间点的状态,就像时间倒流一样。通过SQL的`AS OF`子句,我们可以查询到过去某个时刻的数据。例如: ```sql SELECT * FROM employees ...
这一技术在Oracle 10g中得到了显著增强,不仅扩展了闪回查询,还引入了闪回版本查询、闪回事务查询、闪回表、闪回删除以及闪回数据库等功能。 1. **闪回查询**: - 闪回查询(Flashback Query)允许用户查看过去某...
Oracle闪回技术主要包括以下几种类型:闪回查询(Flashback Query)、闪回表(Flashback Table)、闪回事务查询(Flashback Transaction Query)、闪回数据库(Flashback Database)和闪回删除(Flashback Drop)。...
- **闪回事务处理查询 (Flashback Transaction Query):** 展示事务处理对行的影响历史。 - **闪回表 (Flashback Table):** 将表的内容恢复到过去的某个特定时间点。 - **配置闪回数据库 (Configuring Flashback ...
10g_flashback(数据恢复).txt"以及"oracle_10g_flashback.txt"这三份文档可能提供了一个全面的概述,包括Flashback日志、闪回数据库(Flashback Database)、闪回事务查询(Flashback Transaction Query)和闪回版本...
- 闪回事务查询(Flashback Transaction Query):追踪特定事务或所有事务在过去对数据的修改。 - 闪回表(Flashback Table):将表恢复到过去的某个状态。 - 闪回删除(Flashback Drop):恢复已被删除的表及其...
闪回功能包括闪回查询(Flashback Query)、闪回表(Flashback Table)、闪回事务(Flashback Transaction)以及闪回数据库(Flashback Database)。这些功能基于Oracle的重做日志(Redo Log)和 undo 表空间,它们...
- **闪回查询(Flashback Query)**:允许用户查看过去某个时间点或SCN(System Change Number)下的表数据,帮助恢复错误的DML(Data Manipulation Language)操作。 - **闪回版本查询(Flashback Version Query)*...
在实际应用中,当发生误操作时,例如误删了表中的记录,可以首先确认有无开启闪回功能,然后使用闪回查询验证能否恢复所需数据,最后执行相应的闪回操作,如闪回表或闪回事务。在完成恢复后,记得分析并修复导致问题...