web-dev-qa-db-fra.com

Comment savoir quand une table particulière a été créée dans Oracle?

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

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

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

vous indiquera quand une table a été créée (si vous n'avez pas accès à DBA_OBJECTS, vous pouvez utiliser ALL_OBJECTS à la place en supposant que vous disposez des privilèges SELECT sur la table).

La réponse générale pour obtenir les horodatages d'une ligne, cependant, est que vous ne pouvez obtenir ces données que si vous avez ajouté des colonnes pour suivre ces informations (en supposant, bien sûr, que votre application remplit également les colonnes). Il existe cependant divers cas particuliers. Si le DML s'est produit relativement récemment (probablement au cours des dernières heures), vous devriez pouvoir obtenir les horodatages à partir d'une requête flashback. Si le DML s'est produit au cours des derniers jours (ou aussi longtemps que vous conservez vos journaux archivés), vous pouvez utiliser LogMiner pour extraire les horodatages, mais cela va être une opération très coûteuse, en particulier si vous obtenez des horodatages pour de nombreuses lignes. Si vous créez la table avec ROWDEPENDENCIES activé (pas la valeur 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 le SCN (numéro de modification du système) pour la ligne. Par défaut, cependant, sans ROWDEPENDENCIES, le SCN est uniquement au niveau du bloc. Le SCN_TO_TIMESTAMP la fonction ne sera pas non plus capable de mapper les SCN aux horodatages pour toujours.

57
Justin Cave

Vous pouvez interroger le dictionnaire de données/les vues de catalogue pour savoir quand un objet a été créé ainsi que l'heure de la dernière DDL impliquant l'objet (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 la dernière DDL a été effectuée sur l'objet.

En ce qui concerne le moment où 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

9
bhangm

Vous copiez et collez le code suivant. Il affichera 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 '% table_name%' par le nom de table que vous recherchez.

3
shary.sharath
SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>'
3
Saurabh Gadariya