delete误删数据使用SCN恢复
2018-01-15 16:33
323 查看
今天闲来无事,测试一下之前误删数据使用SCN恢复的经过。
本人不喜欢理论那一大套长篇概论,直接开始试验:
首先查看当前SCN值,如果删之后没有查scn值。可以根据scn当前值往前调试,只要保证。你delete删除之后中间没有其他操作。
SELECT dbms_flashback.get_system_change_number FROM dual;
SELECT CURRENT_SCN FROM V$DATABASE;
![](http://i2.51cto.com/images/blog/201801/15/b32c8907efcf6fc085cddbad6e7e46cc.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://i2.51cto.com/images/blog/201801/15/8c41e71b77527fff919559b3bac1e167.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
知道当前SCN号了。SCN一直在增长,这个没啥,然后查看某一个表数据:
select * from zjw.AA;
![](http://i2.51cto.com/images/blog/201801/15/9572a69aedb0465c3aa4a13472446b08.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
然后删除这个表并且commit:
delete from zjw.AA
![](http://i2.51cto.com/images/blog/201801/15/d3e37387982249a519601d70ed821613.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
再来查查这个表: select * from zjw.AA
![](http://i2.51cto.com/images/blog/201801/15/4fdb21e396dbd242bf82cb9f433f7f64.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
没有数据了。然后根据SCN查看当时SCN值对应的这个表的数据
select * from ZJW.AA as of scn 12637719;
![](http://i2.51cto.com/images/blog/201801/15/511f6365ef63e51c3d15442e32c6cfe5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
有数据,说明可以,然后来使用insert插入。吧这个数据插入到当前AA表内:
insert into zjw.AA select * from zjw.AA as of scn 12637719;
![](http://i2.51cto.com/images/blog/201801/15/3e1b516bed044cce7e640a174b15defd.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
然后在查看这个表数据:
select * from zjw.AA
![](http://i2.51cto.com/images/blog/201801/15/a4e0e1cfe60f30c98d3e534b8d10c8b5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
ok
成功恢复。
这里说明一下。我前两次差的SCN和最后使用的SCN值不一样,这个没关系。这个SCN值他一直再涨,所以只要是我delete之前的SCN值都可以。从我操作到delete之间的SCN任意一个都可以使用,
比如:我现在在根据SCN随便插两个也可以,我就用最先查到的SCN吧
如:
select from ZJW.AA as of scn 12637321;
select from ZJW.AA as of scn 12637366;
![](http://i2.51cto.com/images/blog/201801/15/e1573cab508dd61190ca53de3a46a9dd.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
看到没有,结果一样。
本人不喜欢理论那一大套长篇概论,直接开始试验:
首先查看当前SCN值,如果删之后没有查scn值。可以根据scn当前值往前调试,只要保证。你delete删除之后中间没有其他操作。
SELECT dbms_flashback.get_system_change_number FROM dual;
SELECT CURRENT_SCN FROM V$DATABASE;
![](http://i2.51cto.com/images/blog/201801/15/b32c8907efcf6fc085cddbad6e7e46cc.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://i2.51cto.com/images/blog/201801/15/8c41e71b77527fff919559b3bac1e167.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
知道当前SCN号了。SCN一直在增长,这个没啥,然后查看某一个表数据:
select * from zjw.AA;
![](http://i2.51cto.com/images/blog/201801/15/9572a69aedb0465c3aa4a13472446b08.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
然后删除这个表并且commit:
delete from zjw.AA
![](http://i2.51cto.com/images/blog/201801/15/d3e37387982249a519601d70ed821613.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
再来查查这个表: select * from zjw.AA
![](http://i2.51cto.com/images/blog/201801/15/4fdb21e396dbd242bf82cb9f433f7f64.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
没有数据了。然后根据SCN查看当时SCN值对应的这个表的数据
select * from ZJW.AA as of scn 12637719;
![](http://i2.51cto.com/images/blog/201801/15/511f6365ef63e51c3d15442e32c6cfe5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
有数据,说明可以,然后来使用insert插入。吧这个数据插入到当前AA表内:
insert into zjw.AA select * from zjw.AA as of scn 12637719;
![](http://i2.51cto.com/images/blog/201801/15/3e1b516bed044cce7e640a174b15defd.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
然后在查看这个表数据:
select * from zjw.AA
![](http://i2.51cto.com/images/blog/201801/15/a4e0e1cfe60f30c98d3e534b8d10c8b5.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
ok
成功恢复。
这里说明一下。我前两次差的SCN和最后使用的SCN值不一样,这个没关系。这个SCN值他一直再涨,所以只要是我delete之前的SCN值都可以。从我操作到delete之间的SCN任意一个都可以使用,
比如:我现在在根据SCN随便插两个也可以,我就用最先查到的SCN吧
如:
select from ZJW.AA as of scn 12637321;
select from ZJW.AA as of scn 12637366;
![](http://i2.51cto.com/images/blog/201801/15/e1573cab508dd61190ca53de3a46a9dd.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
看到没有,结果一样。
相关文章推荐
- PLSQL使用SCN码恢复误删表数据
- oracle 恢复 被delete的数据 使用dbms_flashback的scn
- mysql使用binlog恢复使用delete误删的数据
- Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据
- 使用bbed修改文件头,推进scn,恢复offline drop的数据文件
- 兴奋啊,使用oracle的flashback搞定误删数据的恢复
- 使用oracle SCN(System Changed Number 系统变更数) 恢复数据的方法
- oracle 执行 delete user$ 误删所有用户信息后的数据恢复流程
- 使用git恢复未提交的误删数据
- 【Oracle】使用bbed恢复delete的数据
- 使用BBED恢复delete删除的数据
- Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据
- centos7下使用extundelete恢复误删数据
- 使用mysql的binlog恢复误操作(update|delete)的数据
- 恢复oracle 中误删的表 或delete 删掉的数据恢复
- 【Oracle】使用bbed恢复delete的数据
- 使用git恢复未提交的误删数据
- 数据误删后如何使用Flashback恢复数据
- oracle 执行 delete user$ 误删所有用户信息后的数据恢复流程
- 使用git恢复未提交的误删数据