这可以从oracle表中恢复已删除的行吗?我的数据存储在MANUAL_TRANSACTIONS表中。模式名称是CCO。我不小心删除了表中的大约500万行并执行了提交。现在我想恢复它们。我正在使用Oracle 11g R2.Thanks
答案 0 :(得分:10)
您可以使用Oracle闪回查询恢复详细信息。 您可以在删除之前查询表的内容,以找出丢失的数据,并在适当的情况下,将丢失的数据重新插入数据库中。 以下是示例查询:
select * from MANUAL_TRANSACTION as of timestamp to_timestamp('28-APR-2014 12:30:00', 'DD-MON-YYYY HH:MI:SS') where ' clause based on your deleted data';
来源:http://docs.oracle.com/cd/B19306_01/backup.102/b14192/flashptr002.htm
答案 1 :(得分:4)
答案已经按照上面我所学的形式给出了。 闪回只能由DBA完成(我想),但是我们可以在下面的查询中使用
Insert into MANUAL_TRANSACTIONS
(SELECT * FROM MANUAL_TRANSACTIONS AS OF
TIMESTAMP TO_TIMESTAMP('2018-07-23 06:41:59', 'YYYY-MM-DD HH:MI:SS'));
或者您可以查询一天的记录
Insert into MANUAL_TRANSACTIONS
(SELECT * FROM MANUAL_TRANSACTIONS AS OF
TIMESTAMP TO_TIMESTAMP('2018-07-23', 'YYYY-MM-DD'));
答案 2 :(得分:2)
是的,您可以使用闪回查询。 Using Oracle Flashback Query (SELECT AS OF) 这假设撤销表空间足够大,具有足够的撤消保留。如果已释放撤消,则可能需要在克隆数据库中执行还原和恢复,并将数据复制到原始数据库。还要检查TSPITR,TableSpace Point In Time Recovery。只有当您的数据库以archivelog模式运行并且备份可用时,才能执行此操作。
答案 3 :(得分:2)
select * from MY_TABLE as of timestamp to_timestamp('04-MAY-2017 12:30:00', 'DD-MON-YYYY HH:MI:SS') where ID=1822904; --- 12Hr Clock
以上查询对我有用。您甚至可以使用下面的查询
查找24小时的时间范围select * from MY_TABLE as of timestamp to_timestamp('04-MAY-2017 13:30:00', 'DD-MON-YYYY HH24:MI:SS') where ID=1822904;
答案 4 :(得分:0)
FLASHBACK TABLE <TABLE_NAME> TO TIMESTAMP(TO_DATE('27-APR-2014 23:59:59','DD-MON-YYYY HH24: MI: SS'));
将表中的数据恢复到给定时间(假设表未被截断)。
在你的情况下:
FLASHBACK TABLE MANUAL_TRANSACTIONS TO TIMESTAMP(7月7日(&#39; 27-APR-2014 23:59:59&#39;,&#39; DD-MON-YYYY HH24:MI:SS&#39;)); < / p>
答案 5 :(得分:0)
使用此查询
Insert into MANUAL_TRANSACTIONS
(SELECT * FROM MANUAL_TRANSACTIONS AS OF
TIMESTAMP TO_TIMESTAMP('2014-04-27 11:59:59 PM', 'YYYY-MM-DD HH:MI:SS PM'))
答案 6 :(得分:0)
有一些选择:
闪回查询
从TIMESTAMP XX的表中创建table before_delete作为select *;
Logminer如果启用了Oracle补充日志,则可以为删除语句获取undo sql
- 再次切换logfile以获得最小的重做活动 alter system switch logfile;
- 挖掘最后写的存档日志
exec dbms_logmnr.add_logfile('archivelog/redologfile', options => dbms_logmnr.new);
exec dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog);
select operation, sql_redo from v$logmnr_contents where seg_name = 'EMP';
答案 7 :(得分:0)
你可以尝试的是:
答案 8 :(得分:0)
请查看此视频,您将获得必要的详细信息
答案 9 :(得分:0)
如果你有备份和Oracle 12c,你可以使用Table Point In Time Recovery
(PITR):
RECOVER TABLE 'SCHEMA'.'TAB_NAME'
UNTIL TIME xxxxyyy
AUXILIARY DESTINATION '/u01/aux'
REMAP TABLE 'SCHEMA'.'TAB_NAME':'TAB_NAME_PREV';
您当时的数据将可用:
SELECT * FROM SCHEMA.TAB_NAME_PREV;
答案 10 :(得分:0)
插入表名(SELECT * FROM TABLE_NAME TIMESTAMP(SYSDATE-4/24)
)答案 11 :(得分:0)
根据Pro Oracle Database 12C Administration的书,在对如何在oracle中恢复和还原表进行了长时间的搜索之后,我知道这已经太迟了,我终于找到了一种使用restore point
进行还原的好方法,您可以通过使用以下几行来对表执行任何操作:restore point
:
CREATE RESTORE POINT <your_key_point_name>;
对于具有还原点的恢复表,可以使用:
FLASHBACK TABLE <[your_schema.]your_table_name> TO RESTORE POINT <your_key_point_name>;
以上所有关于使用FLASHBACK
进行恢复的答案都忘记了两个要点:
FLASHBACK
的回收站模式FLASHBACK
进行任何行恢复之前,必须使用ALTER TABLE <[your_schema.]your_table_name> enable ROW MOVEMENT
启用表中的行移动。根据oracle文档link:在使用闪回表之前,必须确保要在表上启用行移动以闪回或返回到先前的状态。