博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PLSQL_闪回操作5_Flashback Table
阅读量:6376 次
发布时间:2019-06-23

本文共 2437 字,大约阅读时间需要 8 分钟。

2014-12-09 Created By BaoXinjian

一、摘要


Flashback Table注意SYS用户不支持闪回,这点前面已经说明过。

Flashback Table也是使用UNDO tablespace的内容来实现对数据的回退。该命令相对简单,输入:flashback table table_name to scn(to timestamp) 即可。

注意:如果想要对表进行flashback,必须允许表的row movement.

Alter table table_name row movement;

要查看某表是否启用row movement,可以到user_tables 中查询(或all_tables,dba_tables),

例如:

SQL> select row_movement from user_tables where table_name='C';ROW_MOVE--------ENABLED

要启用或禁止某表row movement,可以通过下列语句:

--启用JSSWEB> ALTER TABLE table_name ENABLE ROW MOVEMENT;表已更改。--禁止JSSWEB> ALTER TABLE table_name DISABLE ROW MOVEMENT;表已更改。

 

二、案例


Step1. 创建数据

SQL> create table C (id number(2));表已创建。SQL> insert into C values(1);已创建 1 行。SQL> insert into C values(2);已创建 1 行。SQL> commit;提交完成。SQL> select * from c;        ID----------         1         2

Step2. 查询SCN和Timestamp

SQL> alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss";会话已更改。SQL> select sysdate from dual;SYSDATE-------------------2009-10-15 21:17:47SQL> select current_scn from v$database;CURRENT_SCN-----------      1103864

Step3. 删除数据并恢复

SQL> delete from C;已删除2行。SQL> commit;提交完成。
SQL> alter table c enable row movement;表已更改。
SQL> flashback table c to scn  1103864;闪回完成。

或者:

SQL> flashback table c to timestamp to_timestamp('2009-10-15 21:17:47','yyyy-mm-dd hh24:mi:ss');SQL> select * from c;        ID----------         1         2

Step4. Flashback table 命令支持同时操作多个表

表名中间以逗号分隔即可,如果你执行一条flashback table命令时同时指定了多个表,要记住单个flashback table 是在同一个事务中,因此这些表的恢复操作要么都成功,要么都失败。

flashback table a,b ,c to scn 1103864;

 

三、其他


1. 可以Flashback Table的时间点是根据Undo数据保留时间来确定的

因为flashback table是基于undo进行的回退,因此受undo_retention参数的影响。

为了保证能成功回退数据,在undo表空间中,你必须有足够的信息用于回退。

show parameter undo_retention

 

2. 基于undo 的表恢复,需要注意DDL 操作的影响

第三个就是修改并提交过数据之后,对表做过DDL 操作,包括:

drop/modify 列, move 表, drop 分区(如果有的话), truncate table/partition,

这些操作会另undo 表空间中的撤销数据失效,对于执行过这些操作的表应用flashback query 会触发ORA-01466 错误。

另外一些表结构修改语句虽然并不会影响到undo 表空间中的撤销记录,但有可能因表结构修改导致undo 中重做记录无法应用的情况,

比如对于增加了约束,而flashback query 查询出的undo 记录已经不符合新建的约束条件,这个时候直接恢复显然不可能成功,你要么暂时disable 约束,要么通过适当逻辑,对要恢复的数据进行处理之后,再执行恢复。

另外,flashback query 对v$tables,x$tables 等动态性能视图无效,不过对于dba_*,all_*,user_*等数据字典是有效的。同时该特性也完全支持访问远端数据库,比如select * from tbl@dblink as of scn 360;的形式。

 

3. 基于undo 的表恢复

flashback table 实际上做的也是dml 操作(会在被操作的表上加dml 锁),因此还需要注意triggers 对其的影响,

默认情况下,flashback table to scn/timestamp 在执行时会自动disable 掉与其操作表相差的triggers,

如果你希望在此期间trigger 能够继续发挥做用,可以在flashback table 后附ENABLE TRIGGERS 子句。

 

Thanks and Regards

转载地址:http://jftqa.baihongyu.com/

你可能感兴趣的文章
Resolve PSExec "Access is denied"
查看>>
C语言局部变量和全局变量问题汇总
查看>>
android 下的网络图片加载
查看>>
Paip.语义分析----情绪情感词汇表总结
查看>>
Linux下软件安装,卸载,管理
查看>>
View Programming Guide for iOS_读书笔记[正在更新……]
查看>>
排查VMWare虚拟机的性能问题
查看>>
yum安装Apache Web Server后各个文件存放位置
查看>>
一些基础密码算法的实现
查看>>
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
查看>>
Android于JNI调用列出的程序
查看>>
CSS3-border-radius 属性
查看>>
相似图片搜索的原理(二)(转)
查看>>
(转)Spring并发访问的线程安全性问题(高度总结)
查看>>
解决Activity启动黑屏和设置android:windowIsTranslucent不兼容activity切换动画的问题
查看>>
TextBox 英文文档
查看>>
linux系统调用函数---12
查看>>
C#开发SQLServer的Geometry和Geography存储
查看>>
GPUImage API文档之GPUImageInput协议
查看>>
EBS R12.2应用层关闭脚本的执行过程
查看>>