使用闪回查询备份数据

今天在生产环境中,开发人员提交了一个脚本,是做update操作的,但是update操作的时候过滤条件有些大,本来预计修改的数据只有5000条,结果这个语句运行下来更改了500万条数据。对生产系统来说算是一个数据灾难,赶紧和开发确认了问题发生的时间,结果说是在半夜11点多,刚好在后半夜才开始做数据备份,这样这个变更也同时影响了备份,就算做紧急的数据恢复也是没有任何效果的。目前采用的备份都是全量的按天备份,备份收到影响,恢复还是比较困难的。
这个问题就在紧急的讨论中分为了两个步骤,我来尝试恢复昨天备份前的数据,提供的时间戳是23:48:48 ,而且经过确认这个表中的数据变化很小。如果能够恢复出表中的数据在那个时间点之前,就能把问题降低到最低。
开发从业务的角度看能不能同时提供一些修复。
我查看了undo的空间使用,还是比较充足的,早上已经是10点左右了,所以就是尽快的做数据的恢复,使用闪回查询来做。这个操作也不是百分百好使,毕竟还是依赖一些缓存空间和系统的负载,在反复确认时间后,写了如下的语句。把时间戳提前了3秒。
create table tmp_xxxxx as select * from owner_account.xxxxx as of timestamp to_timestamp('20140723234845','yyyymmddHH24miss');

为了保证不会有其他潜在的因素影响,所以保守起见,没启并行,没加hint
然后就是通过脚本来监控表空间的使用率。看着空间消耗开始一点点增加,最终恢复了昨晚的数据。有了这些数据,就算暂时不会用到,心里也踏实了。
后来开发确认,有一个字段a,这个字段在表里存放的数据就是null,结果开发的update语句相当于又修改了一次,经过反复确认,算是虚惊一场,不过也需要总结不少的经验。
1.在脚本提交之前,如果是dml语句,最好能够评估修改的影响范围,
2.如果脚本比较大,有性能方面的潜在因素,需要让dba来把把关,看看能不能做点什么。
3.充分的测试也很重要,保证数据的安全和高可用是很重要的。

时间: 2024-09-29 02:40:25

使用闪回查询备份数据的相关文章

Oracle Database 10g:最佳新特性(第一周:闪回查询)

oracle 第一周:闪回查询 得到电影而不是图片:闪回版本查询 不需要设置,立即识别对行的所有更改 在 Oracle9i Database 中,我们看到它推出了以闪回查询形式表示的"时间机器".该特性允许 DBA 看到特定时间的列值,只要在还原段中提供该数据块此前镜像的拷贝即可.但是,闪回查询只提供某时刻数据的固定快照,而不是在两个时间点之间被更改数据的运行状态表示.某些应用程序,如涉及到外币管理的应用程序,可能需要了解一段时期内数值数据的变化,而不仅仅是两个时间点的数值.由于闪回版

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

如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善.Oracle 9i中提供了一项新的技术手段--闪回查询,用户使用闪回查询可以及时取得误操作前的数据,并可以针对错误进行相应的恢复措施,而这一切都无需DBA干预. 因为一时手贱,生产上的数据被我给delete掉了. 用的是delete语句,然后很迅速的还给commit了 下面这两个语句: ALTER TABLE tablename ENABLE r

通过闪回事务查看数据dml的情况

昨天有一个网友问我,怎么能够查询一个表中最后一条插入的记录,我大概回复了,可以通过闪回事务来实现,但是得看什么时候插入的数据,也需要一定的运气. 如果通过闪回事务来得到对应的undo_sql,可能多个dml语句对应一个事务,所以我们需要得到的是一个完整的事务的信息,里面包括对应的Undo_sql,这样才算得到比较完整的sql语句. 我在本地自己做了一个测试. 创建一个test表,然后插入一些记录,然后尝试修改一些数据. SQL> DROP TABLE TEST; Table dropped. S

巧用闪回查询来分析事务延迟的问题

   前段时间有个开发的同事向我咨询一个问题,     开发同事:Oracle会存在一个用户插入数据,已经提交了:但是另外一个用户还查询不到吗?都是同一张表     jeanron:   不会的.     开发同事: 我们现在一个用户写入,程序日志是说已经写入:可是读取的用户还读取不到,在线延迟5分钟可能的问题在哪儿?或者你帮忙监控一下?     jeanron:   是Oracle吗,MySQL还可能有这种情况     开发同事: Oracle,MySQL是什么情况下会这样?     jean

两种闪回查询的使用实验

SQL>select * from test; 1 2 一.按照SCN进行恢复 SQL>select * from sys.smon_scn_time order by time_dp desc; 30970780 scn 与时间的对应关系:每隔5分钟,系统产生一次系统时间标记与scn的匹配并存入sys.smon_scn_time表 SQL>delete from test; SQL>select * from test as of scn 30970780 1 2 可以看到在这个

Oracle 9i中的一个闪回查询操作实例

在利用闪回功能前需要确认: 1.用户有对dbms_flashback包有执行权限! 2.进行闪回查询必须设置自动回滚段管理,在init.ora设置参数UNDO_MANAGEMENT=AUTO,参数UNDO_RETENTION=n,决定了能往前闪回的最大时间,值越大就需要越多Undo空间. Oracle 9i中闪回查询操作实例 查看Oracle中Delete和Commit操作的流程分析 例:Oracle 9i的Flashback Query操作. (1)创建闪回查询用户 SQL> create u

如何让普通用户可以对DBA_SOURCE视图进行闪回查询?

如何让普通用户可以对DBA_SOURCE视图进行闪回查询? 赋权:GRANT SELECT , FLASHBACK ON DBA_SOURCE TO LHR10; 或:GRANT DBA,SELECT_CATALOG_ROLE TO LHR10; LHR@orclasm > DROP USER LHR10;CREATE USER LHR10 IDENTIFIED BY LHR;GRANT RESOURCE TO LHR10; User dropped. LHR@orclasm > User c

Oracle 10g中的闪回查询操作实例

与Oracle 9i相比Oracle 10g的Flashback有了非常大的改进,在Orcle 10g之前,SMON_SCN_TIME由SMON来获取和记录信息的,每5分钟记录一次,从Oracle 10g开始,LGWR首先会在SGA中记录SCN与时间的映射关系(由于LGWR至少每3秒就会被激活一次,所以现在SMON_SCN_TIME能够支持大于3秒的闪回),SMON则定期检查SGA是否内存中的映射大于磁盘上的,如果有就刷新纪录到磁盘, 而且从普通的Flashback Query发展到了多种形式,

用Oracle闪回功能恢复偶然丢失的数据

[导读]本文提出了闪回功能的原理,描述了利用Oracle 9i或Oracle 10g的闪回功能进行恢复偶然丢失数据的方法. 前言 人为的错误是数据库系统失败的重要原因之一,根据调查约40%的系统问题是操作失误或者用户错误引起的,这些人为的错误又特别难以避免.传统上当发生数据丢失.数据错误问题时,解决的主要方法就是数据的导入/导出.备份/恢复技术.这些方法都需要发生数据错误之前有一个正确的备份,才能进行恢复.恢复时不取决于错误程度,而只取决于备份/恢复策略.这种方法既耗时又使数据库系统不能提供服务