oralce 删除表 要求恢复 Oralce 为归档模式,在非自动归档状态下运行,现在删除了一个表,请问是否可以恢复?恢复的方法是什么 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 利用flashback还原数据库和表flashback 是oracle 10G给我们提供的最有价值的工具之一。利用他结合TSPITR可以大大节省DBA的工作量。flashback 一张表的方法:1、首先确认用户有flashback any table 的权限,或者 grant flashback any table to user;2、向一张表中插入数据:INSERT INTO employeeSELECT * FROM employee AS OF TIMESTAMPTO_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_QUERYWHERE xid IN(SELECT versions_xid FROM employee VERSIONS BETWEENTIMESTAMP 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_typeFROM recyclebin;RECYCLE_NAME ORIGINAL_NAME OBJECT_TYPE-------------------------------- --------------------- -------------BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0 EMPLOYEE_DEMO TABLEBIN$JKS983293M1dsab4gsz/I249==$0 I_EMP_DEMO INDEXBIN$NR72JJN38KM1dsaM4gI348as==$0 LOB_EMP_DEMO LOBBIN$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,可以查到状态和恢复信息。 不完恢复rman run{ set until time ....; restore database; recover database;} 求教 oracle调用java接口 非常慢 我的oracle 11g 是不是安装成功? 一个查询问题,主要是要增加说明列 求指教 读取数据库时,只能读取前两列的值 求sql语句,关于oracle中的date类型 问一个关于ORACLE 升级的问题 如何统计上半年和下半年? 一个简单的日志问题 一系列SQL查看小问题? 正则表达式里]的转义 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;
}