Flashback version/Transaction Query,FlashbackTable
Flashback version Query
相对于Flashback Query 只能看到某一点的对象状态, Oracle 10g引入的Flashback Version Query可以看到过去某个时间段内,记录是如何发生变化的。 根据这个历史,DBA就可以快速的判断数据是在什么时点发生了错误,进而恢复到之前的状态。
先看一个伪列 ORA_ROWSCN. 所谓的伪列,就是假的,不存在的数据列,用户创建表时虽然没有指定,但是Oracle为了维护而添加的一些内部字段,这些字段可以像普通文件那样的使用。
最熟悉的伪列就是 ROWID, 它相当于一个指针,指向记录在磁盘上的位置。ORA_ROWSCN 是Oracle 10g 新增的,暂且把它看作是记录最后一次被修改时的SCN。 Flashback Version Query 就是通过这个伪列来跟踪出记录的变化历史。
SQL> create table test (id number(2)); 表已创建。 SQL> insert into test values(1); 已创建 1 行。 SQL> insert into test values(2); 已创建 1 行。 SQL> insert into test values(3); 已创建 1 行。 SQL> select ora_rowscn,id from test; ORA_ROWSCN ID
---------- ----------
1161066 1
1161066 2
1161066 3
ORA_ROWSCN记录的是最后一次被修改时的SCN,注意是被提交的修改。如果没有提交,这个伪列不会发生变化。
ORA_ROWSCN 缺省是数据块级别的,也就是一个数据块内的所有记录都是一个ORA_ROWSCN,数据块内任意一条记录被修改,这个数据库块内的所有记录的ORA_ROWSCN都会同时改变。
SQL> INSERT INTO TEST VALUES(4); 已创建 1 行。
SQL> SELECT * FROM TEST; ID
----------
1
2
3
4 SQL> SELECT ORA_ROWSCN FROM TEST; ORA_ROWSCN
----------
1161066
1161066
1161066
1161066
SQL> COMMIT; 提交完成。 SQL> SELECT ORA_ROWSCN,ID FROM TEST; ORA_ROWSCN ID
---------- ----------
1161378 1
1161378 2
1161378 3
1161378 4
如果没有提交,ORA_ROWSCN值不会变。
=================Flashback Transaction Query=============================
Flashback Transaction Query也是使用UNDO信息来实现。利用这个功能可以查看某个事务执行的所有变化,它需要访问flashback_transaction_query 视图,这个视图的XID列代表事务ID,利用这个ID可以区分特定事务发生的所有数据变化。
SQL> create table test (id number(2)); 表已创建。 SQL> insert into test values(1); 已创建 1 行。 SQL> insert into test values(2); 已创建 1 行。
--------------------------------------------------------------
SELECT TABLE_NAME,OPERATION FROM flashback_transaction_query where table_name='TEST';
TABLE_NAME OPERATION
TEST UNKNOWN
TEST UNKNOWN
TEST UNKNOWN
TEST UNKNOWN
operation为什么都是unknown?解决方法:http://www.cnblogs.com/rusking/p/4215272.html
==========================================================================
FLASHBACK TABLE
Flashback Table也是使用UNDO tablespace的内容来实现对数据的回退。该命令相对简单,输入:flashback table table_name to scn(to timestamp) 即可。注意SYS用户不支持闪回。
注意:如果想要对表进行flashback,必须允许表的row movement.
要查看某表是否启用row movement,可以到user_tables 中查询(或all_tables,dba_tables).
例如:
SQL> select row_movement from user_tables where table_name='EMP2'; ROW_MOVE
--------
DISABLED
要启用或禁止某表row movement,可以通过下列语句:
--启用
SQL> ALTER TABLE table_name ENABLE ROW MOVEMENT;
表已更改。
--禁止
SQL> ALTER TABLE table_name DISABLE ROW MOVEMENT;
表已更改。
-------------------------------------------------------
SQL> ALTER TABLE EMP2 ENABLE ROW MOVEMENT; 表已更改。 SQL> SELECT ROW_MOVEMENT FROM USER_TABLES WHERE TABLE_NAME='EMP2'; ROW_MOVE
--------
ENABLED
====================
SQL> ALTER SESSION SET NLS_DATE_FORMAT=
2 "YYYY-MM-DD HH24:MI:SS"; 会话已更改。 SQL> SELECT SYSDATE FROM DUAL; SYSDATE
-------------------
2014-10-16 23:01:14 SQL> SELECT CURRENT_SCN FROM V$DATABASE; CURRENT_SCN
-----------
1164486 SQL> DELETE FROM EMP2; 已删除14行。 SQL> FLASHBACK TABLE EMP2 TO SCN 1164486; 闪回完成。 SQL> SELECT * FROM EMP2; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
……
Flashback table 命令支持同时操作多个表,表名中间以逗号分隔即可,如果你执行一条flashback table命令时同时指定了多个表,要记住单个flashback table 是在同一个事务中,因此这些表的恢复操作要么都成功,要么都失败。
如:
flashback table a,b ,c to scn 1103864;
一些注意事项:
(1)基于undo 的表恢复,需要注意DDL 操作的影响。修改并提交过数据之后,对表做过DDL 操作,包括:drop/modify 列, move 表, drop 分区(如果有的话), truncate table/partition,这些操作会另undo 表空间中的撤销数据失效,对于执行过这些操作的表应用flashback query 会触发ORA-01466 错误。
另外一些表结构修改语句虽然并不会影响到undo 表空间中的撤销记录,但有可能因表结构修改导致undo 中重做记录无法应用的情况,比如对于增加了约束,而flashback query 查询出的undo 记录已经不符合新建的约束条件,这个时候直接恢复显然不可能成功,你要么暂时disable 约束,要么通过适当逻辑,对要恢复的数据进行处理之后,再执行恢复。
(2)基于undo 的表恢复,flashback table 实际上做的也是dml 操作(会在被操作的表上加dml 锁),因此还需要注意triggers 对其的影响,默认情况下,flashback table to scn/timestamp 在执行时会自动disable 掉与其操作表相差的triggers,如果你希望在此期间trigger 能够继续发挥做用,可以在flashback table 后附加 ENABLE TRIGGERS 子句。
=====================Flashback Data Archive略=============
《FROM:http://blog.csdn.net/tianlesoftware/article/details/4677378》
Flashback version/Transaction Query,FlashbackTable的更多相关文章
- Flashback Version/Transaction Query
1.应用Flashback Version Query查询记修改版本 SQL> select dbms_flashback.get_system_change_number from dual; ...
- Flashback Version Query、Flashback Transaction Query快速闪回细粒度数据
Flashback Version Query 闪回版本查询 使用Flashback Version Query 返回在指定时间间隔或SCN间隔内的所有版本,一次commit命令就会创建一个版本. ...
- Oracle Flashback Transaction Query with Oracle Flashback Version Query
Oracle Flashback Transaction Query with Oracle Flashback Version Query In this example, a database a ...
- 闪回之 Flashback Query (dml表、过程、函数、包等)、Flashback version Query
Flashback Query 背景:Flashback 是 ORACLE 自 9i 就开始提供的一项特性,在 9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数 ...
- 利用flashback transaction query新特性进行事务撤销
具备了flashback version query查询的基础,我们就可以进行基于flashback version query的恢复.这就是flashback transaction query.f ...
- PLSQL_闪回操作3_Fashback Transaction Query
2014-12-09 Created By BaoXinjian
- Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration
Session接口: Session接口 Session 接口对于Hibernate 开发人员来说是一个最重要的接口.然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都 ...
- ocp 1Z0-043 131-205题解析
131. Which three methods can you use to run an Automatic Database Diagnostic Monitor (ADDM) analysis ...
- PLSQL_闪回操作2_Fashback Version Query
2014-12-09 Created By BaoXinjian
随机推荐
- mongodb 详解 error:10061 由于目标计算机积极拒绝,无法连接解决方法
mongodb下载地址(32位):下载地址 自己选择版本 建立如下与mongodb并行的两个文件夹data和log. 然后建立mongo.config. 在mongo.config配置文件中输入: # ...
- Asp.net MVC4 捆绑和压缩
减少加载JavaScript和css文件加载时间 减少http请求次数和数据大小 无需配置 允许自定义和扩展
- SQL 增加或删除一列
SQL 增加或删除一列 alter table tablename drop column columnname;alter table tabelname add columnname varcha ...
- 一个好玩的jq+php实现转盘抽奖程序
前台页面: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <met ...
- python文件批量改名
python对文件进行批量改名用到的是os模块中的listdir方法和rename方法. os.listdir(dir) :获取指定目录下的所有子目录和文件名 os.rename(原文件名,新文件名 ...
- 正式学习React(五) react-redux源码分析
磨刀不误砍柴工,咱先把react-redux里的工具函数分析一下: 源码点这里 shallowEqual.js export default function shallowEqual(objA, ...
- 递归实现全排列序列C语言实现
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下鄙人用递归回溯的办法,采用C语言实现了全排列序列,用以某些优化方案的原始方案的给定 #incl ...
- 关于android:focusable属性
http://www.cnblogs.com/Gaojiecai/archive/2013/06/18/3142783.html Android属性 android:focusableInTouchM ...
- 磁盘IO性能监控(Linux 和 Windows)
磁盘IO性能监控(Linux 和 Windows) 作者:终南 <li.zhongnan@hotmail.com> 磁盘的IO性能是衡量计算机总体性能的一个重要指标.Linux提供了i ...
- DJANGO学习一则
这个WEB框架,可以好好研究,相信很快就会用在工作上的. 相关文件: settings.py """ Django settings for djangoweb proj ...