`
gip666
  • 浏览: 39198 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle闪回

 
阅读更多
闪回表,实际上是将表中的数据恢复到过去的一个焦点或者系统改变号SCN上,实现表的闪回。用户对表的修改操作都记录在撤销表空间中,这为表的闪回提供了恢复基础。
1参数
1首先查看UNDO参数信息,sys用户登录。
SQL> show parameter undo
NAME                                 TYPE        VALUE
------------------------------------                -----------     ----------
undo_management                      string       AUTO
undo_retention                         integer       900
undo_tablespace                        string       UNDOTBS1
如上参数,可以在900秒内对数据进行恢复。

可将时间设置大一些
SQL> alter  system set undo_retention=1200 scope=both;
系统已更改。

2相应执行闪回的用户要有权限
SQL> grant flashback any table to ruiyuan;
授权成功。
2查看已经修改的数据

若数据被delete掉,可用以下语句查看版本信息
select empno,ename,sal from  empsal
as of timestamp to_timestamp('2013-03-24 13:00:00', 'yyyy-mm-dd hh24:mi:ss');

3 DELETE闪回
1查看某一时间点SCN号
select '2013-03-26 11:30:00' 时间,
timestamp_to_scn(to_date('2013-03-26 11:30:00','yyyy-mm-dd hh24:mi:ss')) SCN
from dual;
也可使用以下方式查看当前SCN号
select dbms_flashback.get_system_change_number scn from dual;

2要对表进行闪回,首先对标开启行移动功能。开启行移动功能是为了应对rowid变化,是指可以从回滚段写数据。
alter table emp enable row movement;

对表进行闪回
flashback table emp to scn 2087054;

也可重新创建一个表插入原数据,适用于数据量较小,可以不用开启行移动
create table t as
select * from emp
as of timestamp to_timestamp('2013-03-26 13:50:00', 'yyyy-mm-dd hh24:mi:ss');

3关闭行移动功能
Alter  table emp   disable row  movement;

4 DROP闪回
被drop的表闪回不需要row movement
1直接通过表名闪回
Flashback table empsal to before drop;

2通过回收站闪回
SQL> select object_name,original_name  from user_recyclebin;

OBJECT_NAME                            ORIGINAL_NAME
------------------------------                      --------------------------------
SYS_LOB0000076510C00001$$               SYS_LOB0000076510C00001$$
BIN$gHyQWGdcRA+TjuR8pnh7KA==$0         DDD
BIN$W9E+vtRKTHitj4UWr80a1Q==$0          SYS_C0011515
BIN$YDEeZZtdTwShdEdSbr7NLw==$0          SYS_FK0000076410N00003$
BIN$O8tpFWQHTjuOgOJziOMV8w==$0         SAL_TABLE
BIN$McKRvF+vQcmDRxsu/2joQw==$0          EMPSAL
SYS_IL0000076510C00001$$                SYS_IL0000076510C00001$$
BIN$RCeb5Hq7QU6Mk3n52Y5QMg==$0        EMP

根据回收站object_name进行闪回
flashback table "BIN$RCeb5Hq7QU6Mk3n52Y5QMg==$0" to before drop;

也跟根据回收站的名查看原数据,不进行闪回,把就信息插入新表
select empno,ename,sal from  "BIN$v+9Lau8zT4COjhMx4aUtsQ==$0"
as of timestamp to_timestamp('2013-03-24 13:00:00', 'yyyy-mm-dd hh24:mi:ss');

create t as
select empno,ename,sal from  "BIN$v+9Lau8zT4COjhMx4aUtsQ==$0"
as of timestamp to_timestamp('2013-03-24 13:00:00', 'yyyy-mm-dd hh24:mi:ss');

3闪回重复的表
若前后删除两张名字相同的表,对表名进行闪回会恢复最后删除的表。若要闪回第一个删除的表,可在闪回时进行重命名
flashback table emp to before drop rename to emp1;
5查看数据修改的版本
select emp.* ,TO_CHAR(versions_starttime,'yyyy-mm-dd hh24:mi:ss') versions_starttime,
    TO_CHAR(versions_endtime,'yyyy-mm-dd hh24:mi:ss')versions_endtime  from emp
versions between timestamp timestamp'2013-03-26 13:40:00' and
timestamp'2013-03-26 13:58:00'
order by 6,5
其中 versions_starttime,versions_endtime分别表示修改行的版本时间,只有别修改的才有此时间。若行只有versions_endtime时间,则表示最初版本,若只有versions_starttime则表示最后版本。
6注意
闪回操作对下列数据无效
SYSTEM表空间内
用于精细审计的数据库或虚拟私人数据库
数据字典管理的表空间
由于空间不足已经被手动删除或自动删除的表

以下依赖不被保护
位图索引
表之前删掉的索引
表的统计数据不会被闪回
当前的索引和从属的对象会被维护

闪回操作
系统表不能被闪回
不能据跨越DDL操作
会被写入警告日志
会产生撤销和重做的信息
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics