闪回表,实际上是将表中的数据恢复到过去的一个焦点或者系统改变号SCN上,实现表的闪回。用户对表的修改操作都记录在撤销表空间中,这为表的闪回提供了恢复基础。
[b][size=large]1参数[/size][/b]
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;
授权成功。
[b][size=large]2查看已经修改的数据[/size][/b]
若数据被delete掉,可用以下语句查看版本信息
select empno,ename,sal from empsal
as of timestamp to_timestamp('2013-03-24 13:00:00', 'yyyy-mm-dd hh24:mi:ss');
[b][size=large]3 DELETE闪回[/size][/b]
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;
[b][size=large]4 DROP闪回[/size][/b]
被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则表示最后版本。
[b][size=large]6注意[/size][/b]
闪回操作对下列数据无效
SYSTEM表空间内
用于精细审计的数据库或虚拟私人数据库
数据字典管理的表空间
由于空间不足已经被手动删除或自动删除的表
以下依赖不被保护
位图索引
表之前删掉的索引
表的统计数据不会被闪回
当前的索引和从属的对象会被维护
闪回操作
系统表不能被闪回
不能据跨越DDL操作
会被写入警告日志
会产生撤销和重做的信息
[b][size=large]1参数[/size][/b]
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;
授权成功。
[b][size=large]2查看已经修改的数据[/size][/b]
若数据被delete掉,可用以下语句查看版本信息
select empno,ename,sal from empsal
as of timestamp to_timestamp('2013-03-24 13:00:00', 'yyyy-mm-dd hh24:mi:ss');
[b][size=large]3 DELETE闪回[/size][/b]
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;
[b][size=large]4 DROP闪回[/size][/b]
被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则表示最后版本。
[b][size=large]6注意[/size][/b]
闪回操作对下列数据无效
SYSTEM表空间内
用于精细审计的数据库或虚拟私人数据库
数据字典管理的表空间
由于空间不足已经被手动删除或自动删除的表
以下依赖不被保护
位图索引
表之前删掉的索引
表的统计数据不会被闪回
当前的索引和从属的对象会被维护
闪回操作
系统表不能被闪回
不能据跨越DDL操作
会被写入警告日志
会产生撤销和重做的信息