任何人都可以帮我检索Oracle SQL * Plus中删除的数据吗?
这里是数据已被删除的两个表。被告知只有当前日期的数据(T_DT = 28-JUN-15')被意外删除而销售中心ID(SC_CD)被选为27。
SQL> desc targ_mas
Name Null? Type
------------------------------- -------- ----
SC_CD NOT NULL VARCHAR2(2)
FP_ID NOT NULL VARCHAR2(4)
T_DT NOT NULL DATE
T_PCT NUMBER(3)
T_TARG NUMBER(9,2)
FL_MVH NOT NULL VARCHAR2(1)
SQL>
SQL>
SQL> desc prod_targ
Name Null? Type
------------------------------- -------- ----
ASM_ID VARCHAR2(4)
RM_ID VARCHAR2(4)
FM_ID VARCHAR2(4)
FP_ID NOT NULL VARCHAR2(4)
SC_CD NOT NULL VARCHAR2(2)
TYP_CD NOT NULL VARCHAR2(2)
DIV_CD VARCHAR2(1)
CAT_CD NOT NULL VARCHAR2(2)
PRD_CD NOT NULL VARCHAR2(4)
T_DT NOT NULL DATE
QTY_TARG NUMBER(8,2)
T_VAL NUMBER(10,2)
TP_VAL NUMBER(9,2)
BR_CD VARCHAR2(3)
BS_CD VARCHAR2(4)
RMBS_CD VARCHAR2(2)
用于从两个表中删除数据的查询:
delete from targ_mas
where sc_cd = '27'
and t_dt = '28-JUN-15'
delete from prod_targ
where sc_cd = '27'
and t_dt = '28-JUN-15'
答案 0 :(得分:2)
假设已经提交了此更改,您最好的希望是启用了闪回。如果这样做,您可以将其检索到为此目的创建的表中:
CREATE TABLE targ_mas_recov AS (
SELECT * AS OF TIMESTAMP SYSDATE - 1 # E.g., the data from yesterday
FROM targ_mas
WHERE sc_cd = '27' AND t_dt = '28-JUN-15'
);
CREATE TABLE prod_targ_recov AS (
SELECT * AS OF TIMESTAMP SYSDATE - 1 # E.g., the data from yesterday
FROM prod_targ
WHERE sc_cd = '27' AND t_dt = '28-JUN-15'
);
或者,如果没有在这些表上执行您要保留的其他更新/删除/插入语句,则可以直接闪回它们:
FLASHBACK TABLE targ_mas TO TIMESTAMP SYSDATE - 1;
FLASHBACK TABLE prod_targ TO TIMESTAMP SYSDATE - 1;
如果这些更改已经提交但您没有启用闪回,我恐怕您唯一的选择就是从备份中恢复。