我最近在错误的环境中错误地截断了一个表。这是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')
但没有运气,产生了错误:
无法读取数据 - 表格定义已更改闪回
有什么想法吗?
答案 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,所以无法使用闪回回滚或恢复。只有选项可以恢复完整备份或恢复表空间。