近期要上一個BI的項目,須要對各個業務系統內的數據進行分析,那麼問題就來了。現有的數據庫中有新insert進來的數據,還會有對於已有的數據進行變動的操做。那麼這些新增以及變化都要反應到BI系統中。html
能夠現有的生產數據庫的table中沒有能夠識別變動的時間戳字段。若是對已有的表增長一個timestmap字段,在數據庫層面上固然是很是容易辦到的,一個簡單的 "alter table add xxx column... " 便可。可是在業務程序方面將會帶來巨大的改造量。數據庫
(這樣的話,開發人員該瘋了)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怎麼辦呢?阿里雲
想啊想,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
開始在業務測試庫中進行驗證。