ORACLE日常-如何恢复oracle中误删除表(drop掉的)恢复表:flashback table XXX to before drop;或者:flashback table XXX to before drop;注意:必须9i或10g以上版本支持,flashback无法恢复全文索引。
如果想要完全删除,在最后增加purge即可。drop table CELL_SIGN_PD_LIST_ZQ purge;
drop table 语句中,除非指定了purge字句,否则drop table并不会立即删除表,Oracle只是简单的重命名此表并将其存储在回收站中。
ORACLE日常-如何恢复oracle中误删除表(drop掉的)
标签:支持 索引 ack flash 存储 back 完全 xxx 简单
小编还为您整理了以下内容,可能对您也有帮助:
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数据库删除错了表怎么恢复
一、如果是刚刚删除,那么有两方法:
首先用show parameter undo;命令查看当时的数据库参数undo_retention设置。
显示如下:
undo_management string AUTOundo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS1
undo_retention(保持力),10800单位是秒。即3个小时。
修改默认的undo_retention参数设置:
ALTER SYSTEM SET undo_retention=10800 SCOPE=BOTH;方法1,通过oracle提供的回闪功能:
exec dbms_flashback.enable_at_time(to_date('2007-07-23 10:21:00','yyyy-mm-dd hh24:mi:ss'));set serveroutput on
DECLARE r_temp hr.job_history%ROWTYPE;
CURSOR c_temp IS SELECT * FROM hr.job_history;
BEGIN
OPEN c_temp;
dbms_flashback.disable;
LOOP
FETCH c_temp INTO r_temp;
EXIT WHEN c_temp%NOTFOUND;
insert into hr.job_history(EMPLOYEE_ID,JOB_ID,START_DATE,END_DATE) values (r_temp.EMPLOYEE_ID,r_temp.JOB_ID,r_temp.START_DATE,r_temp.END_DATE);
commit;
END LOOP;
CLOSE c_temp;
END;
方法2,insert into hr.job_history
select * from hr.job_history as of timestamp to_timestamp('2007-07-23 10:20:00', 'yyyy-mm-dd hh24:mi:ss');这种方法简单,容易掌握,功能和上面的一样时间为你误操作之前的时间,最好是离误操作比较近的,因为oracle保存在回滚保持段里的数据时间有一定的时间由undo_retention 这个参数值决定。
二、如果是删除一段时间了,但你有比较新的数据库备份,就通过备份来恢复。新建一个库,把备份还原上去,导出表数据,再导入到现在用的库中去。
三、如果删除一段时间了,并且无备份,但是数据在写入表的时候同时会写入其它一些关联表的话,那么就尝试通过写SQL语句从其它表取数据出来insert到被删除的表中。
四、恢复到备份表中
create table tableName_bakas
select * from tableName as of TIMESTAMP to_timestamp('20081126 103435','yyyymmdd hh24miss');
Oracle数据被删除后,如何恢复
删除表后,可以采用如下操作:
在 user_recyclebin中找到最近操作过的表名称,然后用闪回(只能用于10G及以上版本)。
FLASH BACK TABLE TABLE_NAME TO BEFORE DROP;
如果是删了或修改里面的数据,可以先建立一个快表将删除修改之前状态的数据找回到这个表中:
CREATE TABLE QUICK_TABLE AS
SELECT * FROM TABLE_NAME AS OF TIMESTAMP SYSDATE-1/24 (一小时前的),减去的时间可以自己定 如:select * from TABLE_NAME AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' MINUTE)
oracle 如何恢复drop掉的表空间?
首先考虑用flash back,如果flash back不行,时间比较短,数据库没有更改那么就用rman基于时间点恢复,如果数据库已经更改,那么需要在其他地方重新把生产数据库备份过去,对新的数据库基于时间点恢复,然后把drop掉的表exp到生产库中。上面说的是方法,没有具体操作。如果需要具体操作,可以回复我给你几个文档。
oracle 如何恢复drop掉的表空间?
首先考虑用flash back,如果flash back不行,时间比较短,数据库没有更改那么就用rman基于时间点恢复,如果数据库已经更改,那么需要在其他地方重新把生产数据库备份过去,对新的数据库基于时间点恢复,然后把drop掉的表exp到生产库中。上面说的是方法,没有具体操作。如果需要具体操作,可以回复我给你几个文档。
oracle数据库误操作把表删除了,怎么找回?
一:表的恢复x0dx0ax0dx0a 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的。一般步骤有:x0dx0ax0dx0a1、从flash back里查询被删除的表x0dx0ax0dx0a select * from recyclebinx0dx0ax0dx0a2.执行表的恢复x0dx0ax0dx0a flashback table tb to before drop,这里的tb代表你要恢复的表的名称。x0dx0ax0dx0a二:表数据恢复x0dx0ax0dx0a 对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤有:x0dx0ax0dx0a1、先从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段。x0dx0ax0dx0a 如:select * from flashback_transaction_query where x0dx0atable_name='TEST';x0dx0ax0dx0a 2、执行表记录恢复x0dx0ax0dx0a 一般先根据时间进行查询,查询语句模式为select * from tb as of timestamp x0dx0ato_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名称,time指某个时间点x0dx0ax0dx0a 如select * from scott.test as of timestamp to_timestamp('2009-12-11 x0dx0a20:53:57','yyyy-mm-dd hh24:mi:ss');x0dx0ax0dx0a 若有数据,恢复极为简单了,语句为flashback table tb to timestamp x0dx0ato_timestamp(time,'yyyy-mm-dd hh24:mi:ss');x0dx0ax0dx0a 如flashback table scott.test to timestamp to_timestamp('2009-12-11 x0dx0a20:47:30','yyyy-mm-dd hh24:mi:ss');x0dx0ax0dx0a注意:alter table testvarchar enable row movement;x0dx0ax0dx0a 这个命令的作用是,允许Oracle 修改分配给行的rowid。在Oracle x0dx0a中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP x0dx0a完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许Oracle 执行这个操作
在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');
然后查看数据情况,可以看到已经恢复了。