ORACLE - 检索已删除的数据

时间:2016-03-10 15:15:37

标签: sql oracle

我最近在错误的环境中错误地截断了一个表。这是5年前保存历史的巨大表格。

我使用了TRUNCATE,因此我无法undo / rollback

我尝试使用闪回:

SELECT * FROM STG_SCD_SUB_ACCOUNTS_KEY AS OF TIMESTAMP 
 TO_TIMESTAMP('2016-03-09 09:30:00', 'YYYY-MM-DD HH:MI:SS')

但没有运气,产生了错误:

  

无法读取数据 - 表格定义已更改闪回

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

默认情况下启用Oracle-10g及更高级别的闪回功能。因此我们可以从上一个DDL时间恢复表/索引。

%{
    #include <stdio.h>
    #include "y.tab.h"

   installID(){
   }

%}

abreparentese           "("
fechaparentese          ")"
pontoevirgula           ";"
virgula                 ","
id                      {letra}(({letra}|{digito})|({letra}|{digito}|{underline}))*
digito                  [0-9]
letra                   [a-z|A-Z]
porreal                 "%real"
portexto                "%texto"
porinteiro              "%inteiro"
leia                    "leia"

%%

{abreparentese}     { return ABREPARENTESE; }
{fechaparentese}    { return FECHAPARENTESE; }
{pontoevirgula}     { return PONTOEVIRGULA; }
{virgula}           { return VIRGULA; }
{id}                { installID();
                      return ID; }
{porinteiro}        { return PORINTEIRO; }
{porreal}           { return PORREAL; }
{portexto}          { return PORTEXTO; }
{leia}              { return LEIA;}

%%

int yywrap() {
   return 1;
}

因为truncate是DDL,所以无法使用闪回回滚或恢复。只有选项可以恢复完整备份或恢复表空间。