2010-12-14 11 views

Respuesta

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

le dirá cuando se creó una mesa (Si no tiene acceso a DBA_OBJECTS, podría usar ALL_OBJECTS en lugar de asumir que tiene privilegios SELECT en la tabla).

La respuesta general para obtener marcas de tiempo de una fila, sin embargo, es que solo puede obtener esos datos si ha agregado columnas para rastrear esa información (suponiendo, por supuesto, que su aplicación rellene las columnas también). Sin embargo, hay varios casos especiales. Si el DML ocurrió hace relativamente poco tiempo (lo más probable en las últimas dos horas), debería poder obtener las marcas de tiempo de una consulta de retrospectiva. Si el DML ocurrió en los últimos días (o por el tiempo que guarde sus registros archivados), puede usar LogMiner para extraer las marcas de tiempo, pero va a ser una operación muy costosa, especialmente si obtiene marcas de tiempo para muchas filas. Si se construye la tabla con ROWDEPENDENCIES habilitados (no el valor predeterminado), se puede utilizar

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

para conseguir la última fecha de modificación y el SCN (System Change Number) para la fila. Sin embargo, por defecto, sin ROWDEPENDENCIES, la SCN solo se encuentra en el nivel de bloque. La función SCN_TO_TIMESTAMP tampoco podrá mapear SCN a marcas de tiempo para siempre.

7

Puede consultar las vistas del diccionario de datos/Catálogo para saber cuando un objeto fue creado, así como el momento de la última DDL que implica el objeto (ejemplo: alter table)

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

La columna "CREO" te dice cuando el objeto fue creado. La columna "LAST_DDL_TIME" le indica cuándo se ejecutó el último DDL contra el objeto.

En cuanto a cuándo se inserta una fila en particular/modificada, puede utilizar columnas de auditoría como una columna "insert_timestamp" o utilizar un disparador y poblar una tabla de auditoría

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

¿Y cómo es esto diferente a la respuesta aceptada de 4 años? –

+0

Aquí estoy usando una tabla diferente nada más. [Diferencia entre dba_object y user_object] (https://community.oracle.com/thread/929286?tstart=0) –

+0

Edite su respuesta para agregar una explicación de cómo funciona su código y cómo resuelve el problema del OP. Muchos de los carteles SO son novatos y no comprenderán el código que ha publicado. –

2

Copia y pega el código siguiente. Se mostrará todas las tablas con Nombre y Fecha de Creación

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

Nota: Reemplazar'nombre_tabla%%' con el nombre de la tabla que busca.

-2

Intentar esta consulta:

sysdate SELECT nombre.esquema.nombre.tabla;

Esto debería mostrar la marca de tiempo que pueda necesitar.

Cuestiones relacionadas