flashback的用法
<span style="font-size:18px;"> oracle 自9i之后增加了flashback特性,本来想自己总结下关于这个知识点,但是看到<a target=_blank target="_blank" href="http://blog.chinaunix.net/uid-74941-id-3180228.html">http://blog.chinaunix.net/uid-74941-id-3180228.html</a>,<a target=_blank target="_blank" href="http://blog.csdn.net/chenweitang123/article/details/6163455">http://blog.csdn.net/chenweitang123/article/details/6163455</a>这两位兄台的总结,感觉比自己总结的好很多。所以就学习这两位仁兄的吧。</span>
在使用这个特性的时候要谨记,使用回闪是到万不得已的时候才采取的,平时对数据的操作依旧要小心谨慎。因为回闪和很多参数有关。如果参数设置不正确可能就达不到你想要的效果。比如undo段如果设置的小,而且数据已经commit很长时间,就会遇到ORA-01555:snapshot too old错误。该错误的原因是:你查询之前某个时间段的undo段,但是现在由于某种原因,该undo段信息已经不存在或者被更改了。也就无法完成你想做的回闪。
/*
11g的flashbackup 分好几种,分别用途不一样。
A.flashback database 闪回数据库,简单理解就是把数据库闪回到某个以前的时间点,
能恢复到的最早的SCN, 取决与Flashback Log中记录的最早SCN
B.flashback drop 回收数据库表,用于表误drop后恢复。类似Windows的回收站。
C.flashback query 闪回表记录,用于数据表记录的恢复
D.falshabck Table 闪回数据库表,
后两个是重点,下面说明。
*/
– A.flashback database相关
/*
1.默认情况数据库的flashback database是关闭,可以在mount exclusive状态下打开。
在设置了闪回恢复区后,可以启动闪回数据库功能。
*/
–1.检查是否启动了flash recovery area
show parameter db_recovery_file
–2.检查是否启用了归档
archive log list;
–3.flashback database 默认是关闭的,查看方法
select flashback_on from v$database;
–4.查询当前的scn
SELECT CURRENT_SCN FROM V$DATABASE;
–5.查询当前的时间
select to_char(sysdate,’yy-mm-dd hh24:mi:ss’) time from dual;
–6.查看SCN 和 timestamp 之间的对应关系:
select scn,to_char(time_dp,’yyyy-mm-dd hh24:mi:ss’)from sys.smon_scn_time;
–7.恢复到时间点,或者恢复到SCN
flashback database to timestamp to_timestamp(’09-10-14 14:37:05′,’yy-mm-dd hh24:mi:ss’);
flashback database to scn 947921;
– B. flashback table 恢复误drop表
drop table sphsy.login_table;
select * from flash_table;
–purge table sphsy.login_table;清空回收站
flashback table sphsy.login_table to before drop;
select * from sphsy.login_table;
– C. flashback query 实现行级恢复
/*
flashback查询用于获取先前时间点的表行级数据。当使用flashback查询时,
需要在表名后指定as of timestamp子句或as of SCN子句,其中as of timestamp用于指定早期时间点,
而as of SCN用于指定早期的SCN值,示例如下:
*/
– 1.查原始记录 ,区间内有62 行
select *
from sphsy.login_table a
where a.id > 201204171078
and a.id < 201204171141
order by a.id ;
– 2.晚于区间的有 3016
select program,count(*)
from sphsy.login_table a
where a.id >= 201204171141
group by program ;
–3. 删除
delete from sphsy.login_table a
where a.id > 201204171078
and a.id < 201204171141
–4.利用闪回特性查到区间内,有62行
select * from sphsy.login_table
as of timestamp to_timestamp(’2012-04-17 17:20:30′,’YYYY-MM-DD HH24:MI:SS’)
where id > 201204171078
and id < 201204171141
– 5.不利用闪回特性,直接查询发现没有
select * from sphsy.login_table
where id > 201204171078
and id < 201204171141
– 6.进行数据恢复
– 禁止表上的触发器
alter trigger sphsy.T_INS_LOGIN_TABLE disable ;
– 恢复数据
insert into sphsy.login_table
select * from sphsy.login_table
as of timestamp to_timestamp(’2012-04-17 17:20:30′,’YYYY-MM-DD HH24:MI:SS’)
where id > 201204171078
and id < 201204171141
– 恢复触发器
alter trigger sphsy.T_INS_LOGIN_TABLE enable ;
– 7.晚于区间的数据回来了3130 = 3016 +62 + 后来的数据。实现了区间恢复误删除。
select program,count(*)
from sphsy.login_table a
where a.id >= 201204171078
group by program ;
– D. flashback table 恢复表到先前状态
/*
flashback查询可以用于恢复被误删除的表行数据,但是用户在表上执行了其他的DML语句误操作(insert或update),则不能直接使用flashback查询将表数据恢复到先前时间点,从oracle10g开始,使用flashback table语句可以将表恢复到先前时间点,通过使用该特征,可以避免执行基于时间点的不完全恢复,注意如果要在某个表上使用flashback table特征,则要求必须具有以下条件:
a.用户必须具有flashback any table系统权限或flashback对象权限
b.用户必修在表上具有select insert delete和alter权限
c.必须合理设置初始化参数undo_retention,以确保UNDO信息保留足够时间
d.必须激活行移动特征:alter table table_name enable row movement;
*/
– 1.查原始记录 ,区间内有62 行
select *
from sphsy.login_table a
where a.id > 201204171078
and a.id < 201204171141
order by a.id ;
– 2.晚于区间的有 3074
select count(*)
from sphsy.login_table a
where a.id >= 201204171141;
–3. 删除 ,先记下时间点,2012-04-17 17:43:46
select to_char(sysdate,’YYYY-MM-DD HH24:MI:SS’) from dual ;
delete from sphsy.login_table a
where a.id > 201204171078
and a.id < 201204171141
– 4.删除之后表 sphysy.login_table继续有修改 ,行3082
select count(*)
from sphsy.login_table a
where a.id >= 201204171141;
–5.激活行移动特征
alter table sphsy.login_table enable row movement
–6.利用闪回特性,直接恢复到删除时间点前
flashback table sphsy.login_table to timestamp to_timestamp(’2012-04-17 17:43:46′,’YYYY-MM-DD HH24:MI:SS’);
– 7.晚于区间的数据 回到了3080 ,说明时间点之后的修改丢失。
select count(*)
from sphsy.login_table a
where a.id >= 201204171141
– 8.往前推1分,恢复到删除之前,删除的62条也回来了。
flashback table sphsy.login_table to timestamp to_timestamp(’2012-04-17 17:40:46′,’YYYY-MM-DD HH24:MI:SS’);
– 62 行
select count(*)
from sphsy.login_table a
where a.id > 201204171078
and a.id < 201204171141
– 删除之后的数据为3074,代表还有修改丢失。
select count(*)
from sphsy.login_table a
where a.id >= 201204171141
/*
总结:方法C,方法D均可以用数据恢复。
方法C安全,恢复麻烦。方法D简单,有可能数据丢失。
*/
补充一点小技巧:
select count(*) from t as of timestamp sysdate-1/24;查询一个小时前某个表t的数据
select sysdate-1/24 from dual;
2013-09-15补充
对flashback一直有几点不是很了解,今天又学习了一下,作为补充。
1.undo表空间与回收站recyclebin.
flashback 大致分为四个级别
1. flashback数据库(将整个数据库恢复到某时点);
2.flashback drop恢复删除的table。
3.flashback 闪回查询 as of 恢复某个表中某些记录;
4.flashback table。将这个table恢复到之前的某个时点。
这四个级别原理不是完全相同的:
1. flashback数据库(将整个数据库恢复到某时点),基于闪回日志。使用之前需要dba进行配置
–1.检查是否启动了flash recovery area
show parameter db_recovery_file
–2.检查是否启用了归档
archive log list;
–3.flashback database 默认是关闭的,查看方法
select flashback_on from v$database;
使用undo_tbs: flashback table to timestamp ....
使用undo_tbs: select text from dba_source as of timestamp...
使用flashback log: flashback database.....
SQL> SELECT * FROM DBA_RECYCLEBIN;
OWNER OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIME DROPTIME DROPSCN PARTITION_NAME CAN_UNDROP CAN_PURGE RELATED BASE_OBJECT PURGE_OBJECT SPACE
------------------------------ ------------------------------ -------------------------------- --------- ------------------------- ------------------------------ ------------------- ------------------- ---------- -------------------------------- ---------- --------- ---------- ----------- ------------ ----------
SCOTT BIN$cyTZoWfNSMmgZkOX78CakQ==$0 TEMP_EMP DROP TABLE USERS 2015-05-14:15:53:43 2015-05-14:15:56:32 2254049 YES YES 75054 75054 75054 8
SQL> flashback table scott.TEMP_EMP before drop;
flashback table scott.TEMP_EMP before drop
ORA-00905: 缺失关键字
SQL> flashback table scott.TEMP_EMP to before drop;
Done
flashback的用法相关推荐
- FLASHBACK TABLE用法介绍
1.作用 在人为操作或应用程序错误时,使用FLASHBACK TABLE语句恢复表到一个早期状态.表可以闪回到过去的时间点,依赖于系统中撤销数据的数据量.此外,Oracle数据库不能恢复到通过任何DD ...
- flashback query、flashback drop、flashback table用法总结
/*1.FLASHBACK QUERY*/ --闪回到15分钟前 select * from orders as of timestamp (systimestamp - interva ...
- Oracle Flashback 技术总结
写在前面: 2009年的时候结合网上的资料整理了下Flashback的用法. 2011年5月份起,把我这几年来的整理的资料又重新进行了一个整理,暂定为<David Dai Oracle 学习手册 ...
- oracle flashback 用法,使用Oracle10g Flashback database功能恢复用户错误
使用Oracle10g Flashback database功能恢复用户错误 $ ps -ef|grep rvwr|grep -v grep oracle 27231 1 0 17:10:30 ? 0 ...
- oracle flashback 用法,使用oracle flashback database
1闪回的方法 使用闪回方法的目的:修正用户错误. 1.1FLASHBACK DATABASE flashback data1base闪回到过去的某一时刻 闪回点之后的所有工作都将丢失 必须使用rese ...
- mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解
前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...
- flashback使用
flashback是从oracle9i开始实现的一种恢复功能,完善在10g.10g中利用recyclebin和flashback query功能可以快速的 恢复被误删除的table,也可以flashb ...
- Flashback 技术总结(转贴整理)
Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数与UNDO TABLESPACE大小的限制. 要使用flashback 的特性,必须启用 ...
- Flashback Query, Flashback Version Query
[Oracle 9i & 10g] Flashback Query, Flashback Version Query, Flashback Table, etc Oracle 9i 引入了fl ...
最新文章
- 一起谈.NET技术,asp.net控件开发基础(18)
- iOS 通知观察者的被调函数不一定运行在主线程
- pytorch学习:xavier分布和kaiming分布
- mysql Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
- 用户分群模型:如何打造精细化运营基石?
- php curl 使用方法,php curl使用方法与步骤
- ubuntu和linux服务器,Linux服务器系统CentOS和Ubuntu Server如何选择? | 偶乃秋辰
- thinkphp连mysql增删改查_ThinkPHP5.1框架数据库链接和增删改查操作示例
- (译)iOS Code Signing: 解惑
- 使用RDPWrapper实现多用户远程登录并限制IP
- 清华郝景芳:中国教育还欠缺什么?如何弥补当下教育的不足? (公号回复“郝景芳”下载PDF典藏版)
- KEIL5下载并安装STM32包
- 收益率的标准差怎么算MATLAB,什么是收益的标准差怎样计算呢
- matlab|dsolve解决常微分初值与讲解(含实例使用)
- IB数学考试真题题型解析
- 推荐一款微信小程序《诗词万卷》
- 录音实时转写软件哪个好?这三个软件帮你搞定录音如何转文字
- 计算机的手机储存在哪里,手机wps文件保存在哪里?
- 模糊测试工具Sulley开发指南(1)——安装Sulley(多图,超详细)
- vscode中vue代码格式化的相关配置