[ 2017-06-05 ]

Consulta para verificar el "timestamp" de la última DDL y DML

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