oracle

推荐列表 站点导航

当前位置:首页 > 数据库 > oracle >

oracle 9i使用闪回查询恢复数据库误删问题

来源:互联网  作者:网络  发布时间:2020-12-07 09:10
本篇文章给大家介绍在oracle 9i中使用闪回查询恢复数据库误删问题,涉及到数据库增删改查的基本操作,对oracle数据...

本篇文章给大家介绍在oracle 9i中使用闪回查询恢复数据库误删问题,涉及到数据库增删改查的基本操作,对oracle数据库闪回查询感兴趣的朋友可以一起学习下本篇文章

如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善。Oracle 9i中提供了一项新的技术手段--闪回查询,用户使用闪回查询可以及时取得误操作前的数据,并可以针对错误进行相应的恢复措施,而这一切都无需DBA干预。

因为一时手贱,生产上的数据被我给delete掉了。

用的是delete语句,然后很迅速的还给commit了

下面这两个语句:

 

ALTER TABLE tablename ENABLE row movement ; 

flashback table tablename to timestamp to_timestamp('2012-09-13 13:00:00','yyyy-mm-dd hh24:mi:ss'); 

------------------------------------------------------

记得大概是两点半左右运行的delete---commit;

具体执行流程我们可从以下几个示例图中体会;

1.原表记录

 

$ sqlplus eygle/eygle 

SQL*Plus: Release 10.1.0.2.0 - Production on Wed Mar 30 08:52:04 2005 

Copyright (c) 1982, 2004, Oracle. All rights reserved. 

Connected to: 

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production 

With the Partitioning, OLAP and Data Mining options 

SQL>select count(*) from t1; 

COUNT(*) 

---------- 

9318 

2.误删除所有记录

并且提交更改。

 

SQL>delete from t1; 

9318 rows deleted. 

SQL>commit; 

Commit complete. 

SQL>select count(*) from t1; 

COUNT(*) 

---------- 

3.获得当前SCN

如果能够确切知道删除之前SCN最好,如果不知道,可以进行闪回查询尝试.

 

SQL>select dbms_flashback.get_system_change_number from dual; 

GET_SYSTEM_CHANGE_NUMBER 

------------------------ 

10671006 

SQL>select count(*) from t1 as of scn 10671000; 

COUNT(*) 

---------- 

SQL>select count(*) from t1 as of scn 10670000; 

COUNT(*) 

---------- 

9318 

我们看到在SCN=10670000时,数据都在。

4.恢复数据.

 

SQL>insert into t1 select * from t1 as of scn 10670000; 

9318 rows created. 

SQL>commit; 

Commit complete. 

SQL>select count(*) from t1; 

COUNT(*) 

---------- 

9318 

其它网友用的教程

进行数据库操作,delete后面一定要加where”。今天无意中在网上看到了关于oracle误删除数据恢复的一条信息,发现的确很好使,下面就我的测试向大家汇报下。

 

. select * from t_viradsl t //查询t_viradsl中所有的数据,可以看到三条数据 

delete t_viradsl //删除t_viradsl中所有的数据,三条数据消失 

. select * from t_viradsl t //无数据。 

. insert into t_viradsl select * from t_viradsl as of timestamp to_Date('-- ::''yyyy-mm-dd hh:mi:ss'//已将误删除数据插入表中 

. select * from t_viradsl t //又会看到三条数据。 

我们来分析下第四步,注意这句:

 

select * from t_viradsl2 as of timestamp to_Date('2011-01-19 15:28:00''yyyy-mm-dd hh24:mi:ss'

什么意思呢, 找到t_viradsl2

相关热词: oracle

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://www.juheyunku.com/sql/oracle/970.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

oracle 9i使用闪回查询恢复数据库误删问题

2020-12-07 编辑:网络

本篇文章给大家介绍在oracle 9i中使用闪回查询恢复数据库误删问题,涉及到数据库增删改查的基本操作,对oracle数据库闪回查询感兴趣的朋友可以一起学习下本篇文章

如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善。Oracle 9i中提供了一项新的技术手段--闪回查询,用户使用闪回查询可以及时取得误操作前的数据,并可以针对错误进行相应的恢复措施,而这一切都无需DBA干预。

因为一时手贱,生产上的数据被我给delete掉了。

用的是delete语句,然后很迅速的还给commit了

下面这两个语句:

 

ALTER TABLE tablename ENABLE row movement ; 

flashback table tablename to timestamp to_timestamp('2012-09-13 13:00:00','yyyy-mm-dd hh24:mi:ss'); 

------------------------------------------------------

记得大概是两点半左右运行的delete---commit;

具体执行流程我们可从以下几个示例图中体会;

1.原表记录

 

$ sqlplus eygle/eygle 

SQL*Plus: Release 10.1.0.2.0 - Production on Wed Mar 30 08:52:04 2005 

Copyright (c) 1982, 2004, Oracle. All rights reserved. 

Connected to: 

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production 

With the Partitioning, OLAP and Data Mining options 

SQL>select count(*) from t1; 

COUNT(*) 

---------- 

9318 

2.误删除所有记录

并且提交更改。

 

SQL>delete from t1; 

9318 rows deleted. 

SQL>commit; 

Commit complete. 

SQL>select count(*) from t1; 

COUNT(*) 

---------- 

3.获得当前SCN

如果能够确切知道删除之前SCN最好,如果不知道,可以进行闪回查询尝试.

 

SQL>select dbms_flashback.get_system_change_number from dual; 

GET_SYSTEM_CHANGE_NUMBER 

------------------------ 

10671006 

SQL>select count(*) from t1 as of scn 10671000; 

COUNT(*) 

---------- 

SQL>select count(*) from t1 as of scn 10670000; 

COUNT(*) 

---------- 

9318 

我们看到在SCN=10670000时,数据都在。

4.恢复数据.

 

SQL>insert into t1 select * from t1 as of scn 10670000; 

9318 rows created. 

SQL>commit; 

Commit complete. 

SQL>select count(*) from t1; 

COUNT(*) 

---------- 

9318 

其它网友用的教程

进行数据库操作,delete后面一定要加where”。今天无意中在网上看到了关于oracle误删除数据恢复的一条信息,发现的确很好使,下面就我的测试向大家汇报下。

 

. select * from t_viradsl t //查询t_viradsl中所有的数据,可以看到三条数据 

delete t_viradsl //删除t_viradsl中所有的数据,三条数据消失 

. select * from t_viradsl t //无数据。 

. insert into t_viradsl select * from t_viradsl as of timestamp to_Date('-- ::''yyyy-mm-dd hh:mi:ss'//已将误删除数据插入表中 

. select * from t_viradsl t //又会看到三条数据。 

我们来分析下第四步,注意这句:

 

select * from t_viradsl2 as of timestamp to_Date('2011-01-19 15:28:00''yyyy-mm-dd hh24:mi:ss'

什么意思呢, 找到t_viradsl2

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://www.juheyunku.com/sql/oracle/970.shtml

相关文章

风云图片

推荐阅读

返回oracle频道首页