--可能很多人有误操作数据库的情况。那么如果遇到误删除数据表想恢复数据或者数据表怎么办???
下面给一个简单的案例就可以解决上面提的问题
--oracle10g以及以上版本对删除数据的恢复方案
--测试表tbtest
CREATE TABLE tbtest(TID NUMBER PRIMARY KEY ,TNAME VARCHAR2(22) ); INSERT INTO TBTEST VALUES (1,'A1'); INSERT INTO TBTEST VALUES (2,'B1'); INSERT INTO TBTEST VALUES (3,'C1'); COMMIT;
--如果删除表里的数据,恢复数据的方法
DELETE FROM tbtest;
COMMIT;
--查询当前快照时间
select current_scn from v$database; --351626638
--351624577 将此时间往前推找到先前的数据
SELECT * FROM tbtest as of SCN 351624577 ;
--找到先前的数据后将数据以SQL FILE的格式导出,然后copy到PL/SQL DEVELOPER或者直接通过CMD去执行脚本,
--我选取的前者,直接copy到PL/SQLDEVELOPER,如下
INSERT INTO TBTEST VALUES (1,'A1'); INSERT INTO TBTEST VALUES (2,'B1'); INSERT INTO TBTEST VALUES (3,'C1'); COMMIT;
--执行后查询是否是先前的数据
SELECT * FROM TBTEST;
--如果drop表,恢复此表操作方法
DROP TABLE TBTEST; COMMIT;
--如果删除时间不长的话,可以用闪回功能中的flashback drop
select * from user_recyclebin WHERE original_name ='TBTEST'; FLASHBACK TABLE TBTEST TO BEFORE DROP;
--PS:尽量在15分钟内将数据恢复掉,对数据库过多的操作会将数据库存储的快照造成过期
--同一个数据库如果有多个用户,并且同时删除了多个用户下的同一张表,那么需要将不同用户下的同一表数据都取出后再分别恢复