IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Date maj d'une table


Sujet :

Administration Oracle

  1. #1
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    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.

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Points : 594
    Points
    594
    Par défaut
    je dirai non. Je ne crois pas qu'il y ai une vue avec ce genre d'informations... Mais je ne suis pas sur

  3. #3
    Membre confirmé
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2007
    Messages
    419
    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 : 419
    Points : 616
    Points
    616
    Par défaut
    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.

  4. #4
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    C'est la réponse à laquelle je m'attendais... :-(

    Merci.
    LBO72.

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Date de création et de MAJ d'une table
    Par yoaugoulo dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 23/10/2009, 14h06
  2. Réponses: 2
    Dernier message: 15/05/2007, 12h25
  3. recuperer la date de MAj d'une table
    Par overider dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/03/2007, 21h25
  4. Update de date vide dans une table
    Par gidebo dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/03/2004, 16h48
  5. MAJ d'une table sous SQL Server par insertion
    Par keish dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/06/2003, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo