在Oracle数据库中,如何查找,定位一张表最后一次的DML操作的时间呢? 方式有三种,不过都有一些局限性,下面简单的解析、总结一下。

 

 

1:使用ORA_ROWSCN伪列获取表最后的DML时间

 

   ORA_ROWSCN伪列是Oracle 10g开始引入的,可以查询表中记录最后变更的SCN。然后通过SCN_TO_TIMESTAMP函数可以将SCN转换为时间戳,从而找到最后DML操作时SCN的对应时间。但是,默认情况下,每行记录的ORA_ROWSCN是基于Block的,除非在建表的时候开启行级跟踪。

 

 

SELECT MAX(ORA_ROWSCN), SCN_TO_TIMESTAMP(MAX(ORA_ROWSCN)) FROM xxx.xxx;

 

 

如下所示,我们可以创建一个表TEST,然后查一查TEST表最后的DML的操作时间。如下所示

 

SQLCREATE TABLE TEST.TEST ( ID NUMBER);
 
Table created.
 
SQL> COL OWNER FOR A12;
SQL> COL TABLE_NAME FOR A32;
SQL> COL MONITORING FOR A32;
SQL> SELECT OWNER, TABLE_NAME, MONITORING 
  2  FROM DBA_TABLES 
  3  WHERE OWNER='TEST' 
  4    AND TABLE_NAME='TEST';
 
OWNER        TABLE_NAME                       MONITORING
------------ -------------------------------- --------------------------------
TEST         TEST                             YES
 
SQL> INSERT INTO TEST.TEST VALUES(1);
 
1 row created.
 
SQL> COMMIT;
 
Commit complete.
 
SQL> SELECT sysdate FROM DUAL;
 
SYSDATE
-------------------
2018-11-19 14:34:12
 
SQL> SELECT MAX(ORA_ROWSCN), SCN_TO_TIMESTAMP(MAX(ORA_ROWSCN)) FROM TEST.TEST;
 
MAX(ORA_ROWSCN) SCN_TO_TIMESTAMP(MAX(ORA_ROWSCN))
--------------- --------------------------------------------------------------
       52782810 19-NOV-18 02.34.03.000000000 PM
 
SQL>

相关文章:

  • 2022-02-09
  • 2022-12-23
  • 2021-12-25
  • 2022-12-23
  • 2022-12-23
  • 2022-02-19
  • 2022-12-23
  • 2022-01-21
猜你喜欢
  • 2021-09-03
  • 2022-12-23
  • 2021-07-02
  • 2022-12-23
  • 2021-11-29
  • 2021-11-26
相关资源
相似解决方案