在oracle中如何找回被删除的数据?

供稿:hz-xin.com     日期:2024-05-18
oracle数据库误操作把表删除了,怎么找回?

一:表的恢复

对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的。一般步骤有:

1、从flash back里查询被删除的表

select * from recyclebin

2.执行表的恢复

flashback table tb to before drop,这里的tb代表你要恢复的表的名称。

二:表数据恢复

对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤有:

1、先从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段。

如:select * from flashback_transaction_query where
table_name='TEST';

2、执行表记录恢复

一般先根据时间进行查询,查询语句模式为select * from tb as of timestamp
to_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名称,time指某个时间点

如select * from scott.test as of timestamp to_timestamp('2009-12-11
20:53:57','yyyy-mm-dd hh24:mi:ss');

若有数据,恢复极为简单了,语句为flashback table tb to timestamp
to_timestamp(time,'yyyy-mm-dd hh24:mi:ss');

如flashback table scott.test to timestamp to_timestamp('2009-12-11
20:47:30','yyyy-mm-dd hh24:mi:ss');

注意:alter table testvarchar enable row movement;

这个命令的作用是,允许Oracle 修改分配给行的rowid。在Oracle
中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP
完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许Oracle 执行这个操作

oracle如何恢复误删的表记录数据,解决办法:
从flash back里查询被删除的表select * from recyclebin
执行表的恢复flashback table tbName to before drop;这里的tbName代表你要恢复的表的名称。
先从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段。
一般先根据时间进行查询,查询语句模式为select * from tb as of timestamp to_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名称,time指某个时间点。
这个命令的作用是,允许Oracle 修改分配给行的rowid。
在Oracle 中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。
闪回表处理会对EMP 完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。
要支持闪回就必须允许Oracle 执行这个操作。

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');

然后查看数据情况,可以看到已经恢复了。



1、将你10天前的数据找(如果你的数据还在的话)
create table tmp as
select * from table_name as of timestamp trunc(sysdate)-10;
2、在tmp表里面找到被你删掉的那100条数据,插回原表。
3、不过希望不大了,看你的问题已经提了好久了,如果是刚刚被删掉的话,也许可以找回。
注:trunc(sysdate)-10 就是一个时间点,你可以适当的调整一下这个时间点,来找到你想要的数据。
---
以上,希望对你有所帮助。

Oracle10 以上版本,我前一天删的数据都可以恢复,不要慌,认真跟着每步做就好啦嘻嘻(PS:其实第一次删标准表数据的我也很方哈哈哈);
举个栗子:
某天误删了标准表的一条数据,就是采购接收的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;

你用的是oracle几呀?
要是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的话,那就麻烦了!!

oracle数据库误删除文件恢复, 我们公司的oracle数据库误删除了数据文件...
答:你可以试试ORACLE PRM -DUL ,Oracle PRM-DULr是企业级别的Oracle数据库灾难恢复工具。PRM可以再无备份的情况下恢复被truncated掉的表,也可以恢复无法打开的Oracle数据库(Alter database open失败)中的数据。 PRM是图形化增强版的Oracle DUL工具,同时具备很多Oracle DUL不具备的特性。而且Oracle PRM无需...

oracle数据库数据删除后如何恢复?
答:删除表后,可以采用如下操作:在 user_recyclebin中找到最近操作过的表名称,然后用闪回(只能用于10G及以上版本)。FLASH BACK TABLE TABLE_NAME TO BEFORE DROP;如果是删了或修改里面的数据,可以先建立一个快表将删除修改之前状态的数据找回到这个表中:CREATE TABLE QUICK_TABLE AS SELECT * FROM ...

求救:使用drop误删ORACLE10g中的表,而recyclebin中无内容,怎么找回误删...
答:Oracle DBA神器:PRM灾难恢复工具,Schema级别数据恢复。PRM For Oracle Database – schema级别oracle数据库数据恢复特性 ,PRM即ParnassusData Recovery Manager是企业级别Oracle数据库灾难恢复工具。PRM可以在无备份的情况下恢复被truncated掉的表,也可以恢复无法打开的Oracle数据库(Alter Database Open失败)中...

Oracle数据被删除后,如何恢复
答:删除表后,可以采用如下操作:在 user_recyclebin中找到最近操作过的表名称,然后用闪回(只能用于10G及以上版本)。FLASH BACK TABLE TABLE_NAME TO BEFORE DROP;如果是删了或修改里面的数据,可以先建立一个快表将删除修改之前状态的数据找回到这个表中:CREATE TABLE QUICK_TABLE AS SELECT * FROM ...

误删除了delete oracle中数据表记录,没备份要怎么恢复
答:利用oracle提供的闪回方法,如果在删除数据后还没做大量的操作(只要保证被删除数据的块没被覆写),就可以利用闪回方式直接找回删除的数据 具体步骤为:确定删除数据的时间(在删除数据之前的时间就行,不过最好是删除数据的时间点)用以下语句找出删除的数据:select * from 表名 as of timestamp to_...

oracle中怎么恢复已经删除了的存储过程?
答:如果有开启归档日志的话,可以直接回滚;另外如果是10g以上版本的话,可以使用flashback恢复,具体方法如下:恢复存储过程的原理就是利用了oracle里所有的存储过程的源代码都是存在dba_source里,而drop某个存储过程的时候,oracle这里肯定要去dba_source里把相关的源代码给delete掉,既然是delete,那就可以...

pl/sql,Oracle数据库中,不小心delete数据并提交后如何恢复被删数据?
答:这种方法简单,容易掌握,功能和上面的一样时间为你误操作之前的时间,最好是离误操作比较近的,因为oracle保存在回滚保持段里的数据时间有一定的时间限制由undo_retention 这个参数值决定。二、如果是删除一段时间了,但你有比较新的数据库备份,就通过备份来恢复。新建一个库,把备份还原上去,导出表...

oracle中误删除了redo文件怎么办
答:可以尝试使用PRM-DUL恢复无法打开的oracle数据库,也可以尝试如下手法来解决问题: 【Oracle数据恢复】Redo Log重做日志文件坏块Corruption的解决 ORA-16038 ORA-00354 ORA-00353 ORA-00367 ORA-01624 ORA-16038 log %s sequence# %s cannot be

oracle怎么恢复已删除数据
答:1、获得当前数据库的scn号 select current_scn from v$database; (切换到sys用户或system用户查询)查询到的scn号为:1499223 2、查询当前scn号之前的scn select * from 表名 as of scn 1499220; (确定删除的数据是否存在,如果存在,则恢复数据;如果不是,则继续缩小scn号)3、恢复删除且已提交的...

在ORACLE用delete命令删除的数据如何恢复
答:不用这么麻烦到你的oracle安装目录下找【scott.sql】,我的在 D:\oracle\product\10.1.0\Db_1\RDBMS\ADMIN 根据你自己的实际情况参考。这里面有全部数据库,复制出来插入数据库就可以了。※注意:有时候文件里面的日期数据格式会有问题,修改一下就可以了。--- 以上,希望对你有所帮助。