oracle数据库表恢复到特定时间点

某一张表被应用软件里误操作把数据都清空了,现在想恢复到清空之间,比如2013年8月13日14点以前,应该怎样操作,我不是数据库管理员,只是个应用管理人员,所以不知道数据库... 某一张表被应用软件里误操作把数据都清空了,现在想恢复到清空之间,比如2013年8月13日14点以前,应该怎样操作,我不是数据库管理员,只是个应用管理人员,所以不知道数据库里面是怎么设置之类的,只会简单的用用PLSQL增改删查之类的,所以别太复杂,谢谢了 展开
 我来答
晕这都有人起了
推荐于2018-10-02 · TA获得超过191个赞
知道小有建树答主
回答量:179
采纳率:0%
帮助的人:105万
展开全部
如果开启闪回可以使用闪回表。
select log_mode,flashback_on from v$database;
如果是下面结果则开了闪回
LOG_MODE FLASHBACK_ON
------------ ------------------
ARCHIVELOG YES
可以执行以下命令
alter table 表名 enable row movement; --开启表行移动
flashback table 表名 to timestamp to_timestamp('20130813 14:00:00','yyyymmdd hh24:mi:ss');
--闪回到2013年8月13日14点
你要是没开启,有逻辑备份可以使用imp命令导入数据。
如果没用逻辑备份,开启归档模式,有物理备份,能够停机、数据丢失的话,可以采用不完全恢复
用rman登陆
rman target /
执行以下命令
run{shutdown immediate;
startup mount;
set until time = "to_date('20130813 14:00:00','yyyymmdd hh24:mi:ss')";
restore database;
recover database;
alter database open resetlogs;}
切记!做以上任何操作前做好备份,否则出了问题后悔莫及。
而且建议你联系你们数据库管理员处理这个问题。
TableDI
2024-07-18 广告
Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击79步自动完成vlookup匹配,无需手写公式,免费使用!... 点击进入详情页
本回答由TableDI提供
匿名用户
2013-08-13
展开全部

不知道你是 一个表的数据有问题,  还是很多表的数据有问题。


如果只是1个表的话, 还是比较简单的。


下面是一个例子:

SQL> CREATE TABLE test_fb_table (
  2    ID   int,
  3    VAL  VARCHAR2(10)
  4  );
Table created.
SQL> INSERT INTO test_fb_table  VALUES (1, 'TEST');
1 row created.
SQL> commit;
Commit complete.

假如 数据被错误的删除/更新
需要检索某个时间点上,表原有的数据。
SQL> SELECT TO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss') FROM dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2010-11-07 13:01:37

这里删除掉数据。
SQL> delete from test_fb_table;
1 row deleted.
SQL> commit;
Commit complete.

确认数据已经被删除。
SQL> select * from test_fb_table;
no rows selected


这里检索出,指定时间点上,指定表的数据情况。
SQL> select * from test_fb_table
  2    AS OF TIMESTAMP TO_TIMESTAMP('2010-11-07 13:01:37',
  3      'yyyy-mm-dd hh24:mi:ss');
        ID VAL
---------- --------------------
         1 TEST




对于你来说, 也就是你需要先


CREATE TABLE  临时表  AS

select * from   你的那个数据被删除的表   

AS OF TIMESTAMP TO_TIMESTAMP('2013-08-13 14:00:00',  'yyyy-mm-dd hh24:mi:ss');



这样, 就把当初那个时间点上的,  那个表的数据,  复制到一个   临时表  里面去了。

然后再

INSERT  INTO  你的那个数据被删除的表    SELECT  *  FROM  临时表;



注: 你需要确定一下, 那个  数据被删除的表  上面, 有没有触发器什么的。

有的话, 可能需要暂时 禁用掉, 数据插入完了再恢复。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
micro0369
2013-08-13 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:3930万
展开全部
如果有数据库备份和日志备份,才能解决你的问题,将数据恢复到某个时间点。

否则无法实现。

如果有备份,可以让DBA帮忙恢复一个新数据库,然后你将此表的数据copy出来到原先的数据库中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
haona_li
2013-08-13 · TA获得超过253个赞
知道小有建树答主
回答量:624
采纳率:0%
帮助的人:257万
展开全部
需要用闪回表flashback table,你是做不了的,找dba吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式