2010-12-14 39 views

Répondre

46
SELECT created 
    FROM dba_objects 
WHERE object_name = <<your table name>> 
    AND owner = <<owner of the table>> 
    AND object_type = 'TABLE' 

vous dira quand une table a été créée (Si vous n'avez pas accès à DBA_OBJECTS, vous pouvez utiliser ALL_OBJECTS à la place si vous avez des privilèges SELECT sur la table). Cependant, la réponse générale à l'obtention d'horodatages d'une ligne est que vous ne pouvez obtenir ces données que si vous avez ajouté des colonnes pour suivre ces informations (en supposant, bien entendu, que votre application remplisse également les colonnes). Il existe cependant différents cas particuliers. Si le DML est arrivé relativement récemment (probablement au cours des deux dernières heures), vous devriez être en mesure d'obtenir l'horodatage d'une requête de retour de flamme. Si le DML a eu lieu ces derniers jours (ou aussi longtemps que vous gardez vos logs archivés), vous pouvez utiliser LogMiner pour extraire les timestamps mais cela va être une opération très coûteuse, surtout si vous recevez des timestamps pour plusieurs lignes. Si vous construisez la table avec ROWDEPENDENCIES activé (non par défaut), vous pouvez utiliser

SELECT scn_to_timestamp(ora_rowscn) last_modified_date, 
     ora_rowscn last_modified_scn, 
     <<other columns>> 
    FROM <<your table>> 

pour obtenir la dernière date de modification et SCN (numéro de changement de système) pour la ligne. Par défaut, cependant, sans ROWDEPENDENCIES, le SCN est uniquement au niveau du bloc. La fonction SCN_TO_TIMESTAMP ne pourra pas non plus mapper les SCN aux horodatages pour toujours.

7

Vous pouvez interroger les vues du dictionnaire de données/catalogue pour savoir quand un objet a été créé, ainsi que la date de la dernière DDL impliquant l'objet (par exemple: alter table)

select * 
    from all_objects 
where owner = '<name of schema owner>' 
    and object_name = '<name of table>' 

La colonne « created » vous indique quand l'objet a été créé. La colonne "LAST_DDL_TIME" vous indique quand le dernier DDL a été exécuté par rapport à l'objet.

Quant à savoir quand une ligne particulière a été insérée/mise à jour, vous pouvez utiliser des colonnes d'audit comme une colonne « insert_timestamp » ou utiliser un déclencheur et remplir une table d'audit

4
SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>' 
+1

Et en quoi est-ce différent de la réponse acceptée de 4 ans? –

+0

Ici, j'utilise une table différente de rien d'autre. [Différence entre dba_object et user_object] (https://community.oracle.com/thread/929286?tstart=0) –

+0

Veuillez éditer votre réponse pour ajouter une explication du fonctionnement de votre code et de la manière dont il résout le problème du PO. Beaucoup d'affiches sont des débutants et ne comprendront pas le code que vous avez posté. –

2

Vous copiez et collez le code suivant. Il affiche toutes les tables avec Nom et Date de création

SELECT object_name,created FROM user_objects 
WHERE object_name LIKE '%table_name%' 
AND object_type = 'TABLE'; 

Note: Remplacer '% nom_table%' avec le nom de la table que vous recherchez.

-2

Essayez cette requête:

SELECT sysdate DE schema_name.table_name;

Ceci devrait afficher l'horodatage dont vous pourriez avoir besoin.