本文已参与「新人创作礼」活动,一起开启掘金创作之路
今天操作数据库时不小心误更新了一个生产的数据 震惊之余 冷静下来查阅了许多资料 终于找到了解决之法
第一步:首先 确认修改时间 如果知道修改时间的话 就好办的多了 如果不知道的话 可以通过下列的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 特性可以限制用户在某一个事务级别上检查数据库的修改操作,适用于诊断问题、分析性能、审计事务
具体的使用请读者自行查询.