Oracle误更新之后找回更新数据

162 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

今天操作数据库时不小心误更新了一个生产的数据 震惊之余 冷静下来查阅了许多资料 终于找到了解决之法

第一步:首先 确认修改时间 如果知道修改时间的话 就好办的多了 如果不知道的话 可以通过下列的SQL语句去通过查询你执行的sql语句 查到执行的时间 这里有一个比较特殊的东西V$SQL 这是一个存放执行过的SQL语句的表 不过他会定时清掉之前的记录 有兴趣的可以去执行一下试试 其中的字段SQL_TEXT就是执行过的SQL语句

select * from V$SQL where SQL_TEXT like '%%'

第二步:知道修改时间之后 我们就可以通过这个时间去获取到这个时间之前的表里的数据 具体操作的SQL代码为 创建一个新表 复制表结构和表数据到新表里 然后再查询之前的数据 再把他复制粘贴到之前的表里

create table new_table 
as select * from table 
as of timestamp to_timestamp('2020-09-10 11:44:25','yyyy-mm-dd hh24:mi:ss')

这样就完成了找回更新数据

在查阅这个的时候 我还发现了另外一种方法

就是flashback

flashback: 即回闪,是从oracle9i就开始提出的一种操作恢复的功能,在oracle10g中进行了增强和修改,通过回闪,用户可以完成许多不可能恢复的工作,目前oracle10g的回闪包括以下特性;

1〉oracle falshback Database. 特性允许oracle通过Flashback database语句,将数据库会滚到前一个时间点或者scn上,而不需要作时间点的恢复工作!

2〉oracle falshback table. 特性允许oracle通过flashback table语句,将表会滚到前一个时间点或者scn上。

3〉oracle falshback drop. 特性允许oracle把恢复drop掉的table或者索引。

4〉oracle falshback version query. 特性可以得到特定的表在某一个时间段内的任何修改记录!

5〉oracle falshback transaction query 特性可以限制用户在某一个事务级别上检查数据库的修改操作,适用于诊断问题、分析性能、审计事务

具体的使用请读者自行查询.