oracle数据库表恢复到特定时间点
发布网友
发布时间:2022-04-08 02:06
我来回答
共4个回答
热心网友
时间:2022-04-08 03:35
如果开启闪回可以使用闪回表。
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;}
切记!做以上任何操作前做好备份,否则出了问题后悔莫及。
而且建议你联系你们数据库管理员处理这个问题。
热心网友
时间:2022-04-08 04:53
不知道你是 一个表的数据有问题, 还是很多表的数据有问题。
如果只是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 al;
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 临时表;
注: 你需要确定一下, 那个 数据被删除的表 上面, 有没有触发器什么的。
有的话, 可能需要暂时 禁用掉, 数据插入完了再恢复。
热心网友
时间:2022-04-08 06:28
如果有数据库备份和日志备份,才能解决你的问题,将数据恢复到某个时间点。
否则无法实现。
如果有备份,可以让DBA帮忙恢复一个新数据库,然后你将此表的数据copy出来到原先的数据库中。
热心网友
时间:2022-04-08 08:19
需要用闪回表flashback table,你是做不了的,找dba吧