Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2008, 09h38   #1
En attente de confirmation mail
 
Inscription : avril 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 1
Points : 0
Points : 0
Par défaut Problème de récupération

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.
Adon69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 09h53   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
quelle version
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 10h07   #3
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
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'
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 10h11   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ou :

Code :
FLASHBACK TABLE TEST01 TO BEFORE DROP;
ou import ou restauration de la base, etc...

On manque d'info pour répondre correctement
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 10h20   #5
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Et si c'est une table modifiée fréquemment alors il faudrait peut-être utiliser logminer pour savoir jusqu'à quel point revenir exactement.
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 10h42   #6
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Citation:
Envoyé par orafrance Voir le message
ou :

Code :
FLASHBACK TABLE TEST01 TO BEFORE DROP;
ou import ou restauration de la base, etc...

On manque d'info pour répondre correctement
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)
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 11h40   #7
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
en effet, j'avais lu trop vite
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 12h28   #8
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Michel, c'est bien ce qu'il me semblait, il y a beaucoup plus simple que LogMiner pour retrouver le SCN : flashback version query !

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.
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.
Il faut donc revenir au SCN 3989942403 !
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 12h59   #9
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Et bien tu as entièrement raison Leo. C'est beaucoup plus simple
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h54.


 
 
 
 
Partenaires

Hébergement Web