A continuación les muestro una consulta útil para conocer el momento ("timestamp") de las últimas sentencias DML y DDL ejecutadas sobre una tabla determinada:
select
(select to_char(last_ddl_time,'DD-MM-YYYY HH24:MI:SS') from dba_objects where object_name='{tabla}' and owner='{schema}') "Last DDL",
decode(maxscn,0,'N/A',scn_to_timestamp(maxscn)) "Last DML"
from
(select nvl(max(ora_rowscn),0) maxscn from {schema}.{tabla});
Demostración:
Creamos una tabla nueva:
SQL> create table USER01.T1 (c1 number, c2 varchar2(10));
Table created.
Corremos la consulta y podemos ver que se actualizó el timestamp del "Last DDL" y "Last DML" todavía nos muestra N/A, ya que no se ejecutó aún ninguna sentencia.
SQL> select
(select to_char(last_ddl_time,'DD-MM-YYYY HH24:MI:SS') from dba_objects where object_name='T1' and owner='USER01') "Last DDL",
decode(maxscn,0,'N/A',scn_to_timestamp(maxscn)) "Last DML"
from
(select nvl(max(ora_rowscn),0) maxscn from USER01.T1);
Last DDL Last DML
------------------- -------------------------------
05-06-2017 16:57:40 N/A
Realizamos un "insert" sobre la tabla:
SQL> insert into USER01.T1 values (100, 'primero');
1 row created.
SQL> commit;
Commit complete.
Verificamos nuevamente, y ahora vemos el timestamp de esta última DML:
SQL> select
(select to_char(last_ddl_time,'DD-MM-YYYY HH24:MI:SS') from dba_objects where object_name='T1' and owner='USER01') "Last DDL",
decode(maxscn,0,'N/A',scn_to_timestamp(maxscn)) "Last DML"
from
(select nvl(max(ora_rowscn),0) maxscn from USER01.T1);
Last DDL Last DML
------------------- -------------------------------
05-06-2017 16:57:40 05-JUN-17 05.00.53.000000000 PM
Ahora, modificamos la tabla agregando una columna (DDL):
SQL> alter table USER01.T1 add (c3 number);
Table altered.
Podemos ver que ahora cambió el "Last DDL":
SQL> select
2 (select to_char(last_ddl_time,'DD-MM-YYYY HH24:MI:SS') from dba_objects where object_name='T1' and owner='USER01') "Last DDL",
3 decode(maxscn,0,'N/A',scn_to_timestamp(maxscn)) "Last DML"
4 from
5 (select nvl(max(ora_rowscn),0) maxscn from USER01.T1);
Last DDL Last DML
------------------- -------------------------------
05-06-2017 17:01:46 05-JUN-17 05.00.53.000000000 PM
Por último, realizamos un nuevo "insert" y vemos como se modifica nuevamante el "Last DML":
SQL> insert into USER01.T1 values (200,'segundo',1000);
1 row created.
SQL> commit;
Commit complete.
SQL> select
2 (select to_char(last_ddl_time,'DD-MM-YYYY HH24:MI:SS') from dba_objects where object_name='T1' and owner='USER01') "Last DDL",
3 decode(maxscn,0,'N/A',scn_to_timestamp(maxscn)) "Last DML"
4 from
5 (select nvl(max(ora_rowscn),0) maxscn from USER01.T1);
Last DDL Last DML
------------------- -------------------------------
05-06-2017 17:01:46 05-JUN-17 05.02.53.000000000 PM
No hay comentarios:
Publicar un comentario