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 14/02/2011, 09h43   #1
Membre confirmé
 
Avatar de LBO72
 
Inscription : mai 2007
Messages : 385
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 385
Points : 282
Points : 282
Par défaut Date maj d'une table

Bonjour,

Je suis en Oralce 10G R2. Je souhaite savoir s'il y a une vue DBA qui me donnerait la dernière date à laquelle j'ai modifié ou inséré des lignes dans une table oracle.

En vous remerciant,
LBO72.
LBO72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 09h47   #2
Membre actif
 
Homme Cyrille
Administrateur de base de données
Inscription : avril 2005
Messages : 112
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 32
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : avril 2005
Messages : 112
Points : 191
Points : 191
je dirai non. Je ne crois pas qu'il y ai une vue avec ce genre d'informations... Mais je ne suis pas sur
IndianaAngus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 10h19   #3
Membre éprouvé
 
Femme
Administrateur de base de données
Inscription : novembre 2007
Messages : 341
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : novembre 2007
Messages : 341
Points : 478
Points : 478
je dirais pareil.
la vue dba_tab_modifications donnera les modif faites depuis le dernier calcul de stats (inserts, delete, ...) mais c'est très approximatif si les stats ne sont pas forcées tous les jours. sinon, il reste l'audit sur les tables ou la base en entier, ou encore alimenter une table avec un trigger after update after insert par exemple.
Heaven93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 10h22   #4
Membre confirmé
 
Avatar de LBO72
 
Inscription : mai 2007
Messages : 385
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 385
Points : 282
Points : 282
C'est la réponse à laquelle je m'attendais... :-(

Merci.
LBO72.
LBO72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 12h43   #5
Rédacteur
 
Inscription : décembre 2002
Messages : 2 385
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 385
Points : 3 261
Points : 3 261
La réponse n'est pas strictement négative, au pire, ça dépend.

Depuis la V10 il existe dans chaque table la pseudo-colonne ORA_ROWSCN, qui mémorise le SCN de la dernière modification apportée au bloc dans lequel se situe la ligne de données consultée.

Ce SCN peut être converti en temps grâce à la fonction SCN_TO_TIMESTAMP.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
col temps format A30
SELECT ora_rowscn, scn_to_timestamp(ora_rowscn) temps, ename, sal FROM emp;
 
ORA_ROWSCN TEMPS                          ENAME             SAL
---------- ------------------------------ ---------- ----------
   5061570 09/02/11 18:20:22,000000000    SMITH             800
   5061570 09/02/11 18:20:22,000000000    ALLEN            1600
   5061570 09/02/11 18:20:22,000000000    WARD             1250
   5061570 09/02/11 18:20:22,000000000    JONES            2975
   5061570 09/02/11 18:20:22,000000000    MARTIN           1250
   5061570 09/02/11 18:20:22,000000000    BLAKE            2850
   5061570 09/02/11 18:20:22,000000000    CLARK            2450
   5061570 09/02/11 18:20:22,000000000    SCOTT            3000
   5061570 09/02/11 18:20:22,000000000    KING             5000
   5061570 09/02/11 18:20:22,000000000    TURNER           1500
   5061570 09/02/11 18:20:22,000000000    ADAMS            1100
   5061570 09/02/11 18:20:22,000000000    JAMES             950
   5061570 09/02/11 18:20:22,000000000    FORD             3000
   5061570 09/02/11 18:20:22,000000000    MILLER           1300
Pour savoir de quand date la dernière modification d'une table, on peut donc utiliser le max, ce qui ramène donc la date de modification du bloc modifié le plus récemment :
Code :
SELECT max(scn_to_timestamp(ora_rowscn)) FROM emp;
Ce mécanisme présente 2 défauts qui le rendent d'un intérêt aléatoire :
1) Par défaut, la granularité est du niveau du bloc : on a l'impression que toutes les lignes du bloc ont été modifiées à la même date, ce qui peut être complètement faux.
Pour avoir une granularité de niveau ligne, il faut recréer la table avec l'option ROWDEPENDENCIES, ce qui en général n'est pas possible, pas souhaitable ou trop tardif face au besoin immédiat de savoir de quand date la modification.

2) La fonction SCN_TO_TIMESTAMP fait appel à la table système SMON_SCN_TIME, qui stocke la correspondance entre SCN et temps. (Cette correspondance ne peut pas être obtenue par une formule de calcul, car les SCN et le temps évoluent de manière autonome. Il n'y a donc pas d'autre solution que de stocker régulièrement les valeurs respectives).
Le souci, c'est que SMON_SCN_TIME a une capacité limitée, à ma connaissance non paramétrable, qui serait de 5 jours dans le cas le plus défavorable.

Exemple de modification trop ancienne :
Code :
1
2
3
4
5
SELECT scn_to_timestamp(ora_rowscn) FROM hr.employees
       *
ERREUR à la ligne 1 :
ORA-08181: le numéro indiqué n'est pas un SCN valide
ORA-06512: à "SYS.SCN_TO_TIMESTAMP", ligne 1

Tout ça pour dire que si vous vous intéressez à une modification récente, vous pouvez le savoir facilement (à l'échelle du bloc), sinon vous devez mettre en place des colonnes d'audit (date_modif, auteur) dans vos tables.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h26.


 
 
 
 
Partenaires

Hébergement Web