oralce 删除表 要求恢复

zhangzuohai 2008-11-21 04:08:07
Oralce 为归档模式,在非自动归档状态下运行,现在删除了一个表,请问是否可以恢复?恢复的方法是什么
...全文
268 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
suntingtingonly 2011-03-30
  • 打赏
  • 举报
回复
留个名字 。我现在数据库回复在研究。。。 关注。
psufnxk2008 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wffffc 的回复:]

可以用以前的备份和归档日志把表回复到删除前的时间(再另外一台机器上面),然后导出表,再导入
[/Quote]

+++++
lycrystal888 2011-03-29
  • 打赏
  • 举报
回复
学习中。。。。。。。。。。。。。。
hyrongg 2008-11-22
  • 打赏
  • 举报
回复
不完恢复

rman run{
set until time ....;
restore database;
recover database;
}
wffffc 2008-11-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhangzuohai 的帖子:]
Oralce 为归档模式,在非自动归档状态下运行,现在删除了一个表,请问是否可以恢复?恢复的方法是什么
[/Quote]
那你自己归档了没有?没有归档日志好像不行啊。
wffffc 2008-11-22
  • 打赏
  • 举报
回复
可以用以前的备份和归档日志把表回复到删除前的时间(再另外一台机器上面),然后导出表,再导入
zhangzuohai 2008-11-22
  • 打赏
  • 举报
回复
我是9i的,谢谢楼上,能再指点下吗?
zzyang 2008-11-21
  • 打赏
  • 举报
回复
学习...
hebo2005 2008-11-21
  • 打赏
  • 举报
回复
利用flashback还原数据库和表
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,可以查到状态和恢复信息。
hebo2005 2008-11-21
  • 打赏
  • 举报
回复
10G的话,并且开了闪回,直接可以闪回回来

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧