在oracle中如何找回被删除的数据?
如果在该表中包含有lob型字段该怎么办?我的表中重要的信息就是lob字段中存储的一些xml文件 展开
1、首先新建一张测试表TEST,里面输入记录。由于删除/更新/插入恢复步骤相同,这里仅演示删除数据的情况。
2、删除其中1条记录,查看表中记录情况,由下图可见,记录2被删除了。
3、恢复之前先确定要恢复到的时间点,下图可以看出2018-03-07 15:33:00数据是正确的。
SELECT *
FROM TEST AS OF TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS');
4、下面进行表数据恢复。
FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS');
可以看到报错了,原因是没有开启行移动。
5、开启该表的行移动。
ALTER TABLE TEST ENABLE ROW MOVEMENT;
6、再次执行数据恢复。
FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS');
然后查看数据情况,可以看到已经恢复了。
2023-06-01 · 百度认证:昆山开心盒子软件有限公司官方账号
如果删除操作未提交,则可以使用回滚段将数据库恢复到删除操作之前的状态。在Oracle中可以通过查询V$ROLLNAME视图获取当前数据库的回滚段名称,然后使用回滚语句将数据库恢复到删除操作之前的状态。如果还是不能找回的话,建议借助专业的数据恢复工具——嗨格式数据恢复大师
具体操作步骤如下:
电脑端点击这里免费下载>>> 嗨格式数据恢复大师
1.免费下载嗨格式数据恢复大师并运行软件。在软件首页中,选择需要的恢复类型来恢复数据。
2.嗨格式数据恢复大师主界面中有四种恢复类别,分别是快速扫描、深度扫描、格式化扫描和分区扫描。如果需要恢复U盘数据,请将已经丢失数据的U盘插入电脑,并选择“快速扫描恢复”模式对丢失数据的磁盘进行扫描。
3.选择原数据文件所存储的位置。此处可以直接选择对应数据误删除的磁盘,并点击下方的“开始扫描”即可自动对丢失数据的U盘进行扫描。
4.等待扫描结束后,可以按照文件路径或者文件类型两种方式来依次选择需要恢复的文件,并点击下方的“恢复”选项,即可找回所有丢失的数据。
请注意,在恢复之前,谨慎考虑可能的风险,以及已经在电脑上创建或修改的其他文件。此外,使用数据恢复软件时,请注意不要将恢复的数据覆盖到您当前正在使用的数据上,选择备份新数据并保存至其他文件夹或其他设备中。
create table tmp as
select * from table_name as of timestamp trunc(sysdate)-10;
2、在tmp表里面找到被你删掉的那100条数据,插回原表。
3、不过希望不大了,看你的问题已经提了好久了,如果是刚刚被删掉的话,也许可以找回。
注:trunc(sysdate)-10 就是一个时间点,你可以适当的调整一下这个时间点,来找到你想要的数据。
---
以上,希望对你有所帮助。
举个栗子:
某天误删了标准表的一条数据,就是采购接收的RCV_TRANSACTIONS表
恢复过程:
1、创建这个接收表的备份(Bak)表,备份当天前两天的所有该表的数据(包括误删的)(这个不会影响原表数据的,没关系,建吧)
CREATE TABLE cux_rcv_transactions_bak1 AS ---表名自己起(XXX_Bak)
select * from rcv_transactions as of timestamp sysdate-2 ; ---恢复前两天天的数据
要恢复数据的这个request_ID(某字段)我是记下来了,所以不用重新费时间去找(这个可以用原表跟备份表对这前两天的数据进行比较,用NOT EXIST)
Request_id
698479;
2、找到备份表里面的这条数据,
SELECT * FROM cux_rcv_transactions_bak1
WHERE TRANSACTION_id = 698479;
3、将这条数据再次插入进RCV_Transactions表里面
INSERT INTO rcv_transactions
SELECT * FROM cux_rcv_transactions_bak1
WHERE TRANSACTION_id = 698479;
4、可以找到原表原来的数据来
SELECT * FROM rcv_transactions
WHERE TRANSACTION_id = 698479;
要是10 版本以上的话,好说,
92的话,要从undo中找
SELECT * FROM tablename AS OF TIMESTAMP
TO_TIMESTAMP('2010-12-15 11:10:17', 'YYYY-MM-DD HH:MI:SS')
要是91或8的话,那就麻烦了!!