关于获取oracle中数据变动的时间戳的探索(待更新)

近期要上一个BI的项目,须要对各个业务系统内的数据进行分析,那么问题就来了。现有的数据库中有新insert进来的数据,还会有对于已有的数据进行变动的操做。那么这些新增以及变化都要反应到BI系统中。html

能够现有的生产数据库的table中没有能够识别变动的时间戳字段。若是对已有的表增长一个timestmap字段,在数据库层面上固然是很是容易办到的,一个简单的 "alter table add xxx column... " 便可。可是在业务程序方面将会带来巨大的改造量。数据库

  • insert的时候须要多增长一个timestmap字段
  • update的时候须要同时更新timestmap字段

(这样的话,开发人员该疯了)oracle

在MySQL数据库下能够添加一个会自动更新的timestamp。(oracle中不支持该语法)测试

alter table  t2   add COLUMN T_MODIFY_TM  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT  'is_timestamp';

在oracle怎么办呢?阿里云

伪列ORA_ROWSCN

想啊想,oracle既然存在rownum , rowid 这样的伪列,会不会还有行的scn的伪列呢。。果真oracle有 ---- ORA_ROWSCNspa

SQL> select * from t2;

        ID
----------
         0



SQL> select ora_rowscn , id from t2;

ORA_ROWSCN         ID
---------- ----------
   3489228          0


SQL> insert into t2 values (2);

1 row created.

SQL> commit;

Commit complete.

SQL>  select ora_rowscn , id from t2;

ORA_ROWSCN         ID
---------- ----------
   3489228          0
   3489004          2

为了更方便阅读,还能够把scn的数字转换为时间我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,立刻就要抢光了。code

SQL> select to_char(scn_to_timestamp(ora_rowscn),'YYYY-MM-DD HH24:MI:SS') , id from t2;

TO_CHAR(SCN_TO_TIME         ID
------------------- ----------
2018-02-26 10:40:28          0
2018-02-28 10:35:45          2

Scn转换成时间:htm

select to_char(scn_to_timestamp(3489228),'YYYY-MM-DD HH24:MI:SS') from dual;

时间转换成scn:开发

select timestamp_to_scn(to_date('2011-04-14 11:10:25','YYYY-MM-DD HH24:MI:SS')) from dual;

简单的测试,结果很使人开心哈,毕竟不用改程序了。(我为人人作贡献的DBA)get

开始在业务测试库中进行验证。

相关文章
相关标签/搜索