Oralce 为归档模式,在非自动归档状态下运行,现在删除了一个表,请问是否可以恢复?恢复的方法是什么
解决方案 »
- 存储过程中的异常处理,资料也查了,语法没有问题,但就是提示错误
- 求助,关于ORA-00600的内部错误
- 打开数据库时候报错
- oracle同一个数据库的用户表的触发器可以触发(同步)另一用户的某个表吗?
- 救急,高分相送
- SQL语句查询表中某一列如何给重复项加后缀
- 请问查询问题?
- 每4筆資料進行匯總,最後不夠4筆資料也要匯總,如何下sql語句?
- 如何将date类型转化为整数?
- 请问如何在本地建立oracle数据库
- oracle10g listener.ora tnsnames.ora sqlnet.ora 的配置问题 在线等,谢谢
- 卖书:eyele 的《循序渐进Oracle》和 《深入浅出Oracle》两本
flashback 是oracle 10G给我们提供的最有价值的工具之一。利用他结合TSPITR可以大大节省DBA的工作量。
flashback 一张表的方法:
1、首先确认用户有flashback any table 的权限,或者 grant flashback any table to user;
2、向一张表中插入数据:
INSERT INTO employee
SELECT * FROM employee AS OF TIMESTAMP
TO_TIMESTAMP('2003-04-04 14:00:00', 'YYYY-MM-DD HH:MI:SS')
WHERE name = 'JOHN';
3、如果确认数据插入错误:在FLASH_TRANSACTION_QUERY表中查询插入信息:
SELECT commit_timestamp , logon_user FROM FLASHBACK_TRANSACTION_QUERY
WHERE xid IN
(SELECT versions_xid FROM employee VERSIONS BETWEEN
TIMESTAMP TO_TIMESTAMP('2003-04-04 14:00:00', 'YYYY-MM-DD HH:MI:SS')
and TO_TIMESTAMP('2003-04-04 17:00:00', 'YYYY-MM-DD HH:MI:SS')
WHERE name = 'JOHN');
4、根据表中显示的信息,可以用时间或SCN号进行还原:FLASHBACK TABLE employee TO TIMESTAMP TO_TIMESTAMP('2003-04-04 14:00:00','YYYY-MM-DD HH:MI:SS');如果表中含有与其它表的约束条件,而造成其它表的数据错误,则建议用以下方式:
1、FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2003-04-04 14:00:00','YYYY-MM-DD HH:MI:SS');
2、EXP 相应的数据;
3、recover database until ...到当前状态
4、IMP相应数据。错误删除一张表的恢复方法:
1、drop table employee;
2、被drop掉的表会保存在recyclebin中,并且不会自动删除,除非使用purge命令可以完全删除。
3、查询recyclebin中保存的数据:
SQL> SELECT object_name as recycle_name, original_name, object_type
FROM recyclebin;
RECYCLE_NAME ORIGINAL_NAME OBJECT_TYPE
-------------------------------- --------------------- -------------
BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0 EMPLOYEE_DEMO TABLE
BIN$JKS983293M1dsab4gsz/I249==$0 I_EMP_DEMO INDEX
BIN$NR72JJN38KM1dsaM4gI348as==$0 LOB_EMP_DEMO LOB
BIN$JKJ399SLKnaslkJSLK330SIK==$0 LOB_I_EMP_DEMO LOB INDEX找到保存的表名,注意此时的表名是以ID形式存在,可以对照别名找到你删除的表。如果不使用ID名还原,可能会导致其它重名,或已经删除的同名表一起被还原。
4、执行恢复:
FLASHBACK TABLE "BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0" TO BEFORE DROP;虽然flashback为我们提供了数据库和表级的还原,但是也会有很多限制,比如如果在SQLPLUS下运行只能在本地。远程只能用RMAN;同时不能对表空间和数据文件进行flashback ,当然这里有保持数据一致性的要求。如果涉及表空间的数据恢复,仍然要使用传统方式,对多个数据文件错误或者表的数据错误,个人建议仍然使用TSPITR,会对数据库影响小些,使用flashback database + exp+recover database+imp方式,对全库影响太大,在生产环境中不太可行,同时如果表中部署有triger ,flashback是不支持的,当然也有解决方法,但考虑到恢复中的复杂性,建议大家还是保守些好。另外flashback 对系统资源占有很大,alter database flashback on 后后,会发现flash_recovery_area默认就达到2G。如果设置周期较长(默认是1天),会更大,会同时记录两份日志。
这里有两张表很重要,要经常查到的V$FLASHBACK_DATABASE_LOG;V$FLASHBACK_DATABASE_STAT,可以查到状态和恢复信息。
set until time ....;
restore database;
recover database;
}