上一篇中讲诉了Oracle中一些闪回查询(Flashback Query),这是利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照)。要注意的是,Flashback Query仅仅是查询以前的一个快照点而已,并不改变当前表的状态。 下面就来看看其他的闪回。

1.Flashback Table 
Oracle Flashback Table特性允许利用Flashback Table语句,确保闪回到表的前一个时间点。与Oracle 9i中的Flashback Query相似。要注意的是,Flashback Table不等于Flashback Query,Flashback Query不改变当前表的状态,而Flashback Table将改变当前表及附属对象一起回到以前的时间点。

flashback table tablename to timestamp xxx或 
flashback table tablename to scn xxx ;

需要注意的是如果需要闪回一个表,需要以下条件:

·需要有flashback any table的系统权限或者是该表的flashback对象权限; 
·需要有该表的select,insert,delete,alter权限; 
·必须保证该表row movement( alter table tablename enable row movement;)。

2.Flashback Drop 
Oracle Flashback Drop特性提供一个类似回收站的功能,用来恢复不小心被删除的表。当删除表时,Oracle 10g并不立刻释放被删除的表所占用的空间,而是将这个被删除的表进行自动重命名(为了避免同类对象名称的重复)并放进回收站中。所谓的回收站类似于Windows系统中的回收站,是一个虚拟的容器,用于存放所有被删除的对象,在回收站中被删除的对象将占用创建时的同样的空间。如果这个被删除的表需要进行恢复,就可利用Flashback Drop功能。 
进行一个删除表后恢复的简单测试。

(1)查看是否开启回收站功能?

on:表示表空间启用的回收站功能,建议所有数据都开启这个功能,百利而无一害!

备注:该参数可以设置成session级别打开,也可以设置成system级别,不用重启就可以生效

(2)对被删除的表进行恢复

select * from recyclebin;--显示回收站信息 ,可以看到第一次回收站中是没有任何结果的,表示没有任何表在回收站中。

创建一个表,并删除,再次显示回收站信息 则有一条记录,此时可以通过此记录进行Flashback

flashback table test_drop to before drop;
flashback table "BIN$CDLY2FEzAJ7gUwr4GJgAng==$0" to before drop;

这两个语句是一样的结果,这时如果同一对像多次删除怎在recyclebin中识别具体哪条记录去还原呢?

dba_recyclebin中对每删除一个对像都会以BIN$进行命名,同时会有相应的dropscn、createtime、droptime可以跟据这些对像进行定位,然后进行恢复

(3)管理回收站

purge table hr.test_drop --清除回收站中的单个表.注意:如果此时是DBA用户操作其它用户数据,清除回收站中的表时要加上用户名,否则报表不在回收站中

purge tablespace ORAPEL   --清除指定的表空间对像

purge tablespace ORAPEL userhr--删除表空间指定用户下的所有对像

purge recyclebin --清空整个回收站
purge user_recyclebin或purge dba_recyclebin ;--清除不同的对象回收站:

如果你希望不通过回收站直接删除一个表 :
drop table test_drop purge; --删除一个表且不放到回收站中不能进行恢复,在drop语句中可以利用purge选项。

注意:此命令相当于truncate+drop操作,一般不建议这么操作!

在此需要说明一下ORACLE空间利用原则:

使用现有的表空间的未使用空间;如果没有了空闲空间,则检查回收站,对于回收站的对象按照先进先出的原则,对于最先删除的对象,oracle在空间不足之时会最先从回收站删除以满足新分配空间的需求;如果回收站也没有对象可以清理,则检查表空间是否自扩展,如果自扩展则扩展表空间,然后分配新空 间; 如果表空间非自扩展,或者已经不能自扩展(到达最大限制),则直接报表空间不足错误,程序终止

同时对于DROP掉的对像是不是都会经过回收站?

以下几种drop不会将相关对像放进回收站recyclebin中

* drop tablespace :会将recyclebin中所有属于该tablespace的对像清除

* drop user :会将recyclebin中所有属于该用户的对像清除

* drop cluster : 会将recyclebin中所有属于该cluster的成员对像清除

* drop type : 会将recyclebin中所有依赖该type对像清除

另外还需要注意一种情况,对像所在的表空间要有足够的空间,不然就算drop掉经过recyclebin由于空间不足oracle会自动删除的(切记)!

3.Flash Version Query 
Flashback Version Query在上一篇末尾已经提过了,它是利用保存的回滚信息,可以看到特定的表在时间段内的任何修改,如电影的回放一样,可以了解表在该期间的任何变化。Flashback version query一样依赖于AUM,提供了一个查看行改变的功能,能找到所有已经提交了的行的记录,分析出过去时间都执行了什么操作。Flashback version query采用VERSIONS BETWEEN语句来进行查询,常用的方法: 
·VERSIONS_SCN - 系统改变号 
·VERSIONS_TIMESTAMP - 时间 
例如:在test表中,时间1插入一条记录,时间2删除了这条记录,对于时间3执行select * from test当然查询不到这条记录,只能看到该表最后的提交记录。这时如果利用Flash Table或者是Flash Query,只能看到过去的某一时间点的一个快照,而利用Flashback Version Query,能够把时间1、时间2的操作给记录下来,并详细的查询出对表进行的任何操作。 
select versions_starttime,
       versions_endtime,
       versions_xid,
       versions_operation,
       test
  from t_flash versions between timestamp minvalue and maxvalue
 order by versions_starttime;; 
在上述查询中,列 versions_starttime、versions_endtime、versions_xid、versions_operation是伪列,还有一些伪列,如versions_startscn和versions_endscn显示了该时刻的系统更改号。列versions_xid显示了更改该行的事务标识符。 测试时出现“ORA-30052: 下限快照表达式无效”错误,原因是指定的时间范围不在 UNDO_RETENTION 的撤销范围内(比如说你指定了是2小时之前的时间,而 UNDO_RETENTION < 7200)。 这也是我为什么上篇SCN会重新取值的原因。

这时也许会有疑问versions_xid是做什么用的,这时标识一个事务操作的ID,在一个事务commit前,我们可以通过

select xid from v$transaction;

来查询此事务的ID,在提交之后如果还想知道就需要查询versions_xid。versions_xid更多的现在用于进行诊断问题、性能分析和审计事务。

Flashback Version Query说明了可以审计一段时间内表的所有改变,但是也仅仅是能发现问题,对于错误的事务,没有好的处理办法。而通过versions_xid从FLASHBACK_TRANSACTION_QUERY视图中获得事务的历史以及Undo_sql(回滚事务对应的sql语句),也就是说审计一个事务到底做了什么,甚至可以回滚一个已经提交的事务。

注意:这个UNDO_SQL语句对应的是1个update语句,如果想回滚这个事务,执行这个update语句即可。

可以看到,此时审计一个事务,并可以回滚一个已经提交的事务。如果确定出错的事务是最后一个事务,我们利用Flashback Table或者Flashback Query就可以解决问题。但是,如果执行了一个错误的事务之后,又执行了一系列正确的事务,那么上面的方法就无能为力,用这个方法就可以查看或回滚这个错误的事务。

通过versions_xid来实现的技术,现在也可以称之为Flashback Transaction Query (闪回事务查询)

4.Flashback Database 
Oracle Flashback Database特性允许通过SQL语句Flashback Database语句,让数据库前滚到当前的前一个时间点或者SCN,而不需要做时间点的恢复。闪回数据库可以迅速将数据库回到误操作或人为错误的前一个时间点,可以不利用备份就快速的实现基于时间点的恢复,这样就可以节省时间。Oracle通过创建新的Flashback Logs(闪回日志),记录数据库的闪回操作。如果希望能闪回数据库,需要设置如下参数:DB_RECOVER_FILE_DEST日志的存放位置,DB_RECOVER_FILE_DEST_SIZE恢复区的大小。在创建数据库的时候,Oracle将自动创建恢复区,但默认是关闭的,需要执行alter database flashback on命令。 
flashback database to time to_timestamp(xxx); 
flashback database to scn xxx ;

Oracle的回收站和闪回查询机制(二)相关推荐

  1. oracle中闪回和回滚,Oracle Flashback 闪回查询功能9i和10g的区别

    Oracle从9i开始提供了基于回滚段的闪回查询(Flashback Query)功能,可用于恢复错误的DML操作.在Oracle 10g中对闪回查询做了较大改进,不再局限于闪回查询,还可用于恢复错误 ...

  2. oracle9i能闪回吗,[转]Oracle 9i的闪回查询概述

    key words: Oracle闪回 flash 1.Oracle 9i的闪回查询功能 在Oracle 9i之前,如果用户错误操作数据后,除了不完全恢复外,没有好的解决办法.Oracle 9i中提供 ...

  3. Oracle Database 9i, 10g闪回版本查询

    不需要设置,立即识别对行的所有更改 在 Oracle9i Database 中,我们看到它推出了以闪回查询形式表示的"时间机器".该特性允许 DBA 看到特定时间的列值,只要在还原 ...

  4. Oracle 临时表、数据闪回、查询被锁表、系统常用表、及常用操作

    目录 Oracle 系统常用表/视图 Oracle 临时表概述与创建 flashback  闪回表中被删除的数据 flashback  闪回整个被 drop 的表 查询 Oracle 中被锁定的表 查 ...

  5. oracle 闪回查询,闪回版本查询,闪回事务查询,闪回表,闪回删除,闪回数据库

    文章目录 1. 闪回查询 1.1. 闪回时间查询 1.2. 闪回scn查询 (1) 获取scn号的方法 (2) 闪回scn查询命令 2. 闪回版本查询 3. 闪回事务查询 4. 闪回表 5. 闪回删除 ...

  6. oracle查询闪回点,oracle 闪回查询

    设置闪回 alter database archivelog;(闪回必须运行在归档模式) SQL>  alter database FLASHBACK on;(闪回启动) SQL> alt ...

  7. oracle9i 恢复数据库,oracle 9i使用闪回查询恢复数据库误删问题

    如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善.Oracle 9i中提供了一项新的技术手段--闪 ...

  8. oracle闪回某个时间点的数据库,oracle11g 使用闪回查询恢复表到过去某一个时间点...

    一.新建测试表并插入数据:oracle 二.模拟表数据误删并提交:测试 三.使用闪回查询来查误删前表的数据:(表误删是在15:08分左右误删,所以在15:08分以前表的数据仍是在的):spa 四.用如 ...

  9. oracle 9i闪回schema,Oracle 9i闪回查询的新特性

    从Oracle9i开始,Oracle开始提供闪回查询特性(flashback query),允许将回滚段中的数据进行闪回.通过这个例子我们来看一下这个从Oracle9i开始提供的新特性. 首先我们注意 ...

最新文章

  1. 2022-2028年中国企业核心路由交换机行业市场前瞻与投资分析报告
  2. python适合做后端开发吗-想从事Python 后端开发?
  3. 【CIC滤波器】基于MATLAB/FPGA的数字CIC滤波器的设计
  4. C++ 类的const成员函数
  5. java生产者消费者gui_java理论之java--GUI(图形用户管理)与 IO/流
  6. android多个水波球,android球形水波百分比控件代码
  7. 如何在电话中交谈_11
  8. Confirm Hosts Registration with the server failed
  9. 应急响应之ARP欺骗
  10. 【译】Input Method Manager (IMM):输入法管理器
  11. c语言最小二乘求解超定方程,超定方程用最小二乘法求解
  12. 网页服务器阿帕奇怎么启动服务,阿帕奇服务器使用教程
  13. Java线程池ThreadPoolExecutor详解(一篇就够了)
  14. cocos2dx2.2添加音乐音效以及设置音量
  15. 各大互联网软件公司校招时间表大盘点
  16. 银河麒麟 ARM架构 Qemu虚拟机
  17. 猎豹极速wifi驱动 v3.0 官方版
  18. BCompare 4 key SN 亲测可用
  19. 空旷的室外如何安装摄像头?室外线缆布置十项细则
  20. IC芯片制造过程简介

热门文章

  1. 当心币圈高仿号!也别指望AI,它有心无力
  2. 报名啦!旷视研究院解读COCO 2017物体检测夺冠算法 | 吃瓜社
  3. 李飞飞最新研究成果!斯坦福正在用算法判断政治倾向
  4. DotNetty网络通信框架学习
  5. 去除Many2one字段的“创建并编辑”选项
  6. 腾讯首发汽车解决方案 助力广汽打造新智能网联云平台
  7. 静态代码块和单例混合
  8. 两种简单高效的“反人脸识别”方法
  9. Linux系统管理和维护常用命令
  10. jquery组件WebUploader文件上传用法详解