Question

Dans Oracle, est-il un moyen de savoir quand une table particulière a été créée?

De même, est-il un moyen de savoir quand une ligne particulière a été insérée / dernière mise à jour?

Était-ce utile?

La solution

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 à la place ALL_OBJECTS en supposant que vous avez le privilège SELECT sur la table).

La réponse générale à obtenir horodatages d'une rangée, cependant, est que vous ne pouvez obtenir que les données si vous avez ajouté des colonnes pour suivre ces informations (en supposant, bien sûr, que votre application remplit les colonnes aussi bien). Il existe plusieurs cas particuliers, cependant. Si le DML est arrivé relativement récemment (très probablement dans les dernières heures de couple), vous devriez être en mesure d'obtenir les horodatages d'une requête de flash-back. Si le DML est arrivé dans les derniers jours (ou aussi longtemps que vous gardez vos journaux archivés), vous pouvez utiliser LogMiner pour extraire les horodateurs mais qui va être une opération très coûteuse, surtout si vous obtenez horodatages pour de nombreuses lignes. Si vous construisez la table avec ROWDEPENDENCIES activée (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, bien que, sans ROWDEPENDENCIES, le SCN est seulement au niveau du bloc. La fonction SCN_TO_TIMESTAMP ne va pas aussi pouvoir cartographier SCN de horodatages à jamais.

Autres conseils

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 impliquant l'objet DDL (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 a été effectué le dernier contre l'objet DDL.

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 de vérification

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

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'; 

Remarque:. Remplacez '% nom_table%' avec le nom de la table que vous recherchez

Essayez cette requête:

SELECT sysdate à partir de schema_name.table_name;

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top