Bonjour à tous,
J'ai un petit problème.
J'avais une table Test01.
J'ai accidentellement fait un delete from Test01;
Y a-t-il un moyen de récupérer les données de ma table?
Merci.
Version imprimable
Bonjour à tous,
J'ai un petit problème.
J'avais une table Test01.
J'ai accidentellement fait un delete from Test01;
Y a-t-il un moyen de récupérer les données de ma table?
Merci.
quelle version :roll:
Il faut utiliser flashback table mais il faut que la table ait été AVANT le delete en "ENABLE ROW MOVEMENT" et que les données soient encore en UNDO (i.e. delete fait récemment)
Ensuite, il faut faire un
Code:flashback table TEST01 to timestamp 'date avant le delete'
ou :
ou import ou restauration de la base, etc...Code:FLASHBACK TABLE TEST01 TO BEFORE DROP;
On manque d'info pour répondre correctement :?
Et si c'est une table modifiée fréquemment alors il faudrait peut-être utiliser logminer pour savoir jusqu'à quel point revenir exactement.
non, l'opération est un delete, pas un drop.
la recycle bin n'est d'aucune utilité.
Le plus sûr (perte du moins d'activité transactionnelle) est quand même le flashback table
Et si on doit fouiller dans les logs avec logminers comme l'indique Michel, cela diminue les chances de pouvoir restaurer, le temps jouant contre nous. (les undos étant volatiles)
en effet, j'avais lu trop vite ;)
Michel, c'est bien ce qu'il me semblait, il y a beaucoup plus simple que LogMiner pour retrouver le SCN : flashback version query ! :)
on voit donc dans le flashback version query que les lignes ont été insérées au SCN 3989942399 puis effacées au SCN 3989942404.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 SQL> create table test_flashback (col1 varchar2(30)); Table created. SQL> insert into test_flashback (col1) select table_name from dba_tables where Table_Name like '%USER%'; 10 rows created. SQL> select * from test_flashback; COL1 ------------------------------ USER$ USER_ASTATUS_MAP USER_HISTORY$ STREAMS$_PRIVILEGED_USER REPCAT$_USER_AUTHORIZATIONS REPCAT$_USER_PARM_VALUES LOGMNRG_USER$ P$LOCKCONFLICTUSER LOGMNRT_USER$ LOGMNR_USER$ 10 rows selected. SQL> commit; Commit complete. SQL> delete from test_flashback where col1 like '%LOGMNR%'; 3 rows deleted. SQL> commit; Commit complete. SQL> select * from test_flashback; COL1 ------------------------------ USER$ USER_ASTATUS_MAP USER_HISTORY$ STREAMS$_PRIVILEGED_USER REPCAT$_USER_AUTHORIZATIONS REPCAT$_USER_PARM_VALUES P$LOCKCONFLICTUSER 7 rows selected. SQL> select versions_startscn, versions_endscn, versions_operation, col1 2 from test_flashback versions between scn minvalue and maxvalue; VERSIONS_STARTSCN VERSIONS_ENDSCN V COL1 ----------------- --------------- - ------------------------------ 3989942404 D LOGMNR_USER$ 3989942404 D LOGMNRT_USER$ 3989942404 D LOGMNRG_USER$ 3989942399 I USER$ 3989942399 I USER_ASTATUS_MAP 3989942399 I USER_HISTORY$ 3989942399 I STREAMS$_PRIVILEGED_USER 3989942399 I REPCAT$_USER_AUTHORIZATIONS 3989942399 I REPCAT$_USER_PARM_VALUES 3989942399 3989942404 I LOGMNRG_USER$ 3989942399 I P$LOCKCONFLICTUSER VERSIONS_STARTSCN VERSIONS_ENDSCN V COL1 ----------------- --------------- - ------------------------------ 3989942399 3989942404 I LOGMNRT_USER$ 3989942399 3989942404 I LOGMNR_USER$ 13 rows selected. SQL> flashback table test_flashback to scn 3989942403; Flashback complete. SQL> select * from test_flashback; COL1 ------------------------------ USER$ USER_ASTATUS_MAP USER_HISTORY$ STREAMS$_PRIVILEGED_USER REPCAT$_USER_AUTHORIZATIONS REPCAT$_USER_PARM_VALUES LOGMNRG_USER$ P$LOCKCONFLICTUSER LOGMNRT_USER$ LOGMNR_USER$ 10 rows selected.
Il faut donc revenir au SCN 3989942403 ! ;)
Et bien tu as entièrement raison Leo. C'est beaucoup plus simple :king: