Domanda

In Oracle, c'è un modo per scoprire quando una tabella particolare è stato creato?

Allo stesso modo, c'è un modo per scoprire quando è stata inserita una particolare riga / ultimo aggiornamento?

È stato utile?

Soluzione

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

vi dirà quando una tabella è stato creato (se non si ha accesso a DBA_OBJECTS, è possibile utilizzare all_objects invece supponendo che si dispone dei privilegi di SELECT sulla tabella).

La risposta generale per ottenere timestamp da una fila, però, è che si può ottenere solo che i dati se è stato aggiunto colonne per tenere traccia delle informazioni che (ammesso, ovviamente, che l'applicazione popola le colonne pure). Ci sono vari casi particolari, tuttavia. Se il DML è accaduto in tempi relativamente recenti (molto probabilmente nelle ultime ore di coppia), si dovrebbe essere in grado di ottenere i timestamp da una query flashback. Se il DML è accaduto negli ultimi giorni (o comunque a lungo si mantiene il vostro registri archiviati), è possibile utilizzare LogMiner per estrarre i timestamp, ma che sta per essere un'operazione molto costosa soprattutto se stai ricevendo timestamp per molte righe. Se si crea la tabella con ROWDEPENDENCIES abilitati (non predefinita), è possibile utilizzare

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

per ottenere l'ultima data di modifica e SCN (System Change Number) per la riga. Per default, tuttavia senza ROWDEPENDENCIES, SCN è solo a livello di blocco. La funzione SCN_TO_TIMESTAMP, inoltre, non sarà in grado di mappare SCN di al timestamp per sempre.

Altri suggerimenti

È possibile interrogare il punto di vista del dizionario dati / catalogo per scoprire quando un oggetto è stato creato così come il momento del DDL che coinvolge l'oggetto (ad esempio: ALTER TABLE)

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

La colonna "creata" ti dice quando l'oggetto è stato creato. La colonna "LAST_DDL_TIME" ti dice quando l'ultimo DDL è stato eseguito contro l'oggetto.

Per quanto riguarda quando è stata inserita una particolare riga / aggiornata, è possibile utilizzare le colonne di revisione come una colonna "insert_timestamp" o utilizzare un trigger e popolare una tabella di controllo

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

È copiare e incollare il seguente codice. Sarà potrai vedere tutti i tavoli con Nome e Data creazione

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

Nota. Sostituire '% table_name%' con il nome della tabella che si sta cercando

Prova questa ricerca:

Seleziona sysdate FROM schema_name.table_name;

Questo dovrebbe visualizzare il timestamp che potrebbe essere necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top