加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flashback table

发布时间:2020-12-15 17:43:07 所属栏目:百科 来源:网络整理
导读:??????????????????????????????????????????????????????FLASHBACK?TABLE 1???flashback?table 语法 1 ) alter?table?test_flash?enable?row?movement;-- 使用 flashback?table 要先开启 row?movement ,负责会 抛ORA-08189错误 2 ) flashback?table?test

??????????????????????????????????????????????????????FLASHBACK?TABLE

1???flashback?table语法

1alter?table?test_flash?enable?row?movement;--使用flashback?table要先开启row?movement,负责会抛ORA-08189错误

2flashback?table?test_flash?to?scn?313101;--闪回表到313101系统变更号

--闪回到某scn

3flashback?table?tab_test?to?timestamp?to_timestamp('2010-06-30?23:02:37',?'yyyy-mm-dd?hh24:mi:ss')?enable?triggers;

--闪回到某个时间点,enable?triggers为可选项

flashback?table?test_flash1?to?timestamp?sysdate-3/1440;?--闪回表到三分钟前

4flashback?table?a,b?,c?to?scn?1103864;

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

?

--可以通过对Flashback?TableSQL?Trace来进一步观察。通过Trace,我们不难发现,Flashback?Table实际是通过Flashback?Query将表中数据进行了一次删除、插入操作,因此ROWID会发生变化。

2???flashback?table使用注意事项

1sys用户所有的表不支持flashback?table功能

SQL>?flashback?table?test_flash?to?scn?313615;

flashback?table?test_flash?to?scn?313615

*

ERROR?at?line?1:

ORA-08185:?Flashback?not?supported?for?user?SYS

--注意sys用户所有的表不支持flashback?table功能(同system表空间对象不支持flashback?drop区分开)

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?子句。

SQL>?flashback?table?test_flash?to?scn?315760?enable?triggers;

Flashback?complete.

--注意加上enable?triggers选项是让触发器在flashback?table过程中起作用,并不能让触发器触发的表也闪回到之前状态,所以如果一个表上建有触发器,那么我们在flashback?table该表时同时要考虑是否需要把触发的表也恢复的之前的状态()

alter?table?test_flash?enable?row?movement;

flashback?table?test_flash?to?scn?315760;

--flashback?table有触发器的表时不加enable?triggers

alter?table?test_flashbak?enable?row?movement

flashback?table?test_flashbak?to?scn?315760;

--同时把触发器影响的表也恢复到相同的scn

?

flashback?table?会对闪回的表加排他锁

SQL>?select?l.object_id,d.object_name,l.session_id,l.locked_mode?from?v$locked_object?l,dba_objects?d?where?d.object_id=l.object_id;

OBJECT_ID?OBJECT_NAM?SESSION_ID?LOCKED_MODE

----------?----------?----------?-----------

13952?TEST_FLASH306

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读