如不雅想在 update 的子萌芽部分应用 AS OF,那么该萌芽只能返回一笔记录,不然将会报错。
可以经由过程添加一个临时表作为中转,然后再作更新,如下:
1、 把须要恢复的表导入到另一个用户下面:
2)经由过程 DBMS_FLASHBACK 包来恢复
DBMS_FLASHBACK 包供给了以下几个函数:
- ENABLE_AT_TIME:设置当前 SESSION 的闪回萌芽时光
- ENABLE_AT_SYSTEM_CHANGE_NUMBER:设置当前 SESSION 的闪回萌芽 SCN
- GET_SYSTEM_CHANGE_NUMBER:取合适前数据库的 SCN
- DISABLE:封闭当前 SESSION 的闪回萌芽
当将一个 SESSION 设置为闪回萌芽模式之后,后续的萌芽都邑基于那个时光点或者 SCN 的数据库状况,如不雅 SESSION 停止,那么即使没有明白指定 DISABLE,闪回萌芽也会主动掉效。
当 SESSION 运行在闪回萌芽状况时,不许可进行任何 DML 和 DDL 操作。如不雅要用 DML 操作来进行数据恢复就必须应用 PL/SQL 游标。
▲示例:
经由过程膳绫擎的例子可以看出,只要这个修改的时光不早于 sysdate- (UNDO_RETENTION 指定的秒数), 就可经由过程这种方法来恢复数据。
对于问题中的批量数据,可以写个过程来完成获取到更改前的数据:
为了便利应用办法的介绍,上述恢复办法都将基于以下场景进行:体系治理员在前一天晚上 11 点用 export 对数据库做了全库逻辑备份,然后对所稀有据文件进行了热备份。第二天上午 10 点,体系治理员在修改表 TFUNDASSET 的数据时,因为修改语句的前提写错了,导致一批记录(几千条)的 ztm 字段被修改成了缺点的值,并且已经提交。这个表是资产表,相对而言数据变更不频繁。
然后再用这个临时表里的数据来更新 TFUNDASSET 就可以了。
比较以上几种恢复数据的办法的应用过程,我们可以看出:
- exp/imp 只合适于数据变更不大年夜的表的数据损掉的情况,即应用这种办法处理后也须要大年夜营业解决资估中修改数据,不然导致数据损掉;
- 采取基于时光点的不完全恢复可以恢复损掉的数据,然则须要关封闭数据库,削减体系可用时光,并且也会损掉恢复时光点今后的数据;
- 应用 LogMiner 可以较好的恢复数据,然则请求数据库尽可能运行在归档模式,不然也可能导致数据损掉。好处是不消封闭体系,可以或许大年夜日记文件中获得所有的数据。
- 应用 Flashback 最便利和简洁,可以直接获得修改前的数据,然则须要依附体系设置,并且须要占用大年夜量的回滚表空间。
是以选择什么样的办法来恢复数据,取决于你的体系情况和具体情况,不克不及生搬硬套。采取精确的办法才能最大年夜程度的削减数据的损掉。
当然,最好是不须要用到这些恢复的办法。前提是,你必须做好以下的工作:
- 为不合情况创建不合的数据库用户、不合暗码(如不雅不克不及用户不合,必定要暗码不合);
- 将 owner 和应用用户分开,并做适度授权;
- 在做 DML 前,先用同样的前提做萌芽,看根据结不雅集是否相符预期。
【编辑推荐】
- 7个原因告诉你为什么要选择ArangoDB “多模型” 数据库?
- 深度解读 | 阿里云新一代关系型数据库 PolarDB
- SQL Server 2017正式宣布;Oracle宣布开源Fn project
- 苹不雅开源iOS内核,全球数据库排名MySQL三连跌
- 这些特点,PostgreSQL秒杀其他数据库
推荐阅读
沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 固然致力于履行数字化计谋,但重视节约成本仍然是应用云计算的公司的重要义务。然而,很多公司都在尽力获得>>>详细阅读
本文标题:Oracle数据库数据丢失?这几种方法教你来恢复~
地址:http://www.17bianji.com/lsqh/37967.html
1/2 1