Oracle表数据delete后恢复(救命用的)

本文介绍了一次在Oracle数据库中误删数据后的恢复过程。通过使用Oracle提供的闪回功能,可以将误删的数据恢复到删除前的状态。文章详细记录了从定位删除时间点到最终恢复数据的具体步骤。
今天改bug改的有点烦,最后发现问题出现在数据库,所以没做备份也没考虑太多,操作表数据的时候将一张以为没用的菜单关联表的表数据给删了好多条。然后登陆系统,哇。。。扑街。

于是查找了资料发现由于是delete操作,虽然commit了,但是Oracle提供了闪回操作。
具体步骤如下:
1 首先确定删除数据的时间(最好是确定删除数据的时间点,不太确定删除数据之前的时间也可以)
2 用语句查找出已删除的数据:
select * from 表名 as of timestamp to_timestamp(‘删除时间点’,’yyyy-mm-dd hh24:mi:ss’)
此时查找的数据应该就是已经被删除的数据了。
3 闪回操作 :
方法一:flashback table 表名 to timestamp to_timestamp(‘2016-08-11 16:12:11’,’yyyy-mm-dd hh24:mi:ss’);
我执行该语句时报错:ORA-08189:未启用行移动功能,不能闪回表。
解决方法是开启flash any table权限:alter table 表名 enable row movement;
在此执行闪回操作即可;
关闭行移动功能语句为:alter table 表名 disable row movement;
方法二:将已经删除的数据重新插入到原表:
insert into 表名 (select * from 表名 as of timestamp to_timestamp(‘删除时间点’,’yyyy-mm-dd hh24:mi:ss’));(原表数据与要插入的数据主键不能重复。)

Oracle 数据库中,如果使用 `DELETE` 命令删除了中的数据,可以通过以下几种方法进行恢复,前提是未进行全库备份且不依赖归档日志。 ### 1. 使用 `FLASHBACK QUERY` 恢复数据 Oracle 提供了闪回查询功能,允许用户查询过去某个时间点的数据状态。通过该功能可以恢复被 `DELETE` 删除的数据。具体操作如下: ```sql SELECT * FROM your_table_name AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR); ``` 该语句可以查询过去一小时内中的数据状态,用户可以根据实际需要调整时间间隔。如果确认数据无误,可以通过 `INSERT INTO ... SELECT` 的方式将数据重新插入到中: ```sql INSERT INTO your_table_name SELECT * FROM your_table_name AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR) WHERE your_condition; ``` ### 2. 使用 `FLASHBACK TABLE` 恢复 如果被删除(例如使用 `DROP` 命令),可以使用 `FLASHBACK TABLE` 命令将恢复到删除前的状态。例如: ```sql FLASHBACK TABLE your_table_name TO BEFORE DROP; ``` 该方法适用于被误删除的情况,能够快速将恢复到删除之前的状态[^2]。 ### 3. 使用 `RECYCLEBIN` 恢复 Oracle 数据库中有一个回收站(`RECYCLEBIN`),用于存储被删除的对象。用户可以通过查询 `RECYCLEBIN` 来找到被删除的并进行恢复: ```sql SELECT * FROM RECYCLEBIN WHERE ORIGINAL_NAME = 'your_table_name'; ``` 根据查询结果,可以使用以下命令恢复: ```sql FLASHBACK TABLE "BIN$uTo/4dQNfzXgUKjAFQAeBw==$0" TO BEFORE DROP; ``` 其中,`BIN$uTo/4dQNfzXgUKjAFQAeBw==$0` 是回收站中的名称,用户可以根据实际情况进行替换[^2]。 ### 4. 使用事务回滚 如果 `DELETE` 操作尚未提交(即事务未提交),可以通过 `ROLLBACK` 回滚事务来撤销删除操作: ```sql ROLLBACK; ``` 该方法仅适用于未提交的事务,如果事务已经提交,则无法使用此方法。 ### 5. 使用 Oracle LogMiner 工具 如果数据库启用了补充日志(Supplemental Logging),可以通过 Oracle 自带的 LogMiner 工具分析重做日志(Redo Logs)或归档日志(Archive Logs),从而恢复被删除的数据。该方法较为复杂,需要熟悉日志分析流程。 ### 6. 使用第三方工具 除了 Oracle 自带的功能外,还可以使用第三方工具(如 `LogMiner Pro`、`DBV` 等)对数据库进行深度分析和数据恢复。这些工具通常提供图形化界面和更强大的恢复功能。 ### 注意事项 - **启用闪回功能**:为了使用 `FLASHBACK QUERY` 或 `FLASHBACK TABLE`,需要确保数据库启用了闪回功能。 - **时间限制**:闪回功能通常有时间限制(如 24 小时),超过该时间后数据将无法恢复。 - **权限要求**:执行闪回操作需要相应的权限,如 `FLASHBACK` 权限。 通过上述方法,可以在一定程度上恢复使用 `DELETE` 命令删除的数据或被 `DROP` 。选择合适的方法取决于具体场景和数据库配置。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值