Come scoprire quando una tabella particolare è stato creato in Oracle?
-
10-10-2019 - |
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?
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.