關於獲取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

開始在業務測試庫中進行驗證。

相關文章
相關標籤/搜索