2010-12-14 24 views

risposta

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

vi dirà quando è stato creato un tavolo (se non si ha accesso a DBA_OBJECTS, è possibile utilizzare ALL_OBJECTS assumendo invece che si disponga dei privilegi SELECT sulla tabella).

La risposta generale per ottenere timestamp da una riga, tuttavia, è che è possibile ottenere tali dati solo se sono state aggiunte colonne per tenere traccia di tali informazioni (presupponendo, ovviamente, che l'applicazione compili anche le colonne). Ci sono vari casi speciali, tuttavia. Se il DML è accaduto relativamente di recente (molto probabilmente nelle ultime due ore), dovresti essere in grado di ottenere i timestamp da una query di flashback. Se il DML si è verificato negli ultimi giorni (o per quanto tempo si conservano i registri archiviati), è possibile utilizzare LogMiner per estrarre i timestamp, ma questa operazione sarà molto costosa in particolare se si ottengono date e ore 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 la data dell'ultima modifica e SCN (System Change Number) per la riga. Per impostazione predefinita, tuttavia, senza ROWDEPENDENCIES, l'SCN è solo a livello di blocco. Inoltre, la funzione SCN_TO_TIMESTAMP non sarà in grado di mappare per sempre gli SCN ai timestamp.

7

È 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 "Creato" ti dice quando l'oggetto è stato creato. La colonna "LAST_DDL_TIME" indica quando è stato eseguito l'ultimo DDL sull'oggetto.

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 revisione contabile

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

E come è diversa la risposta accettata di 4 anni? –

+0

Qui sto usando un'altra tabella nient'altro. [Differenza tra dba_object e user_object] (https://community.oracle.com/thread/929286?tstart=0) –

+0

Modifica la tua risposta per aggiungere una spiegazione su come funziona il tuo codice e come risolve il problema dell'OP. Molti posters SO sono principianti e non capiranno il codice che hai postato. –

2

Si copia e incolla il seguente codice. Si visualizzerà tutte le tabelle 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.

-2

Prova questa ricerca:

SELEZIONA sysdate FROM schema_name.table_name;

Questo dovrebbe visualizzare il timestamp che potrebbe essere necessario.

Problemi correlati