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

本文探讨了在Oracle数据库中如何利用ORA_ROWSCN伪列追踪数据变更,以及遇到的问题和解决方案。当尝试使用ORA_ROWSCN时,遇到了ORA-08181错误,原因是表未启用ROWDEPENDENCIES。尽管ORA_ROWSCN在默认模式下不够精确,但在创建表时启用ROWDEPENDENCIES可以提供行级别的跟踪,但会增加额外的磁盘开销。
摘要由CSDN通过智能技术生成

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

可以现有的生产数据库的table中没有可以识别变更的时间戳字段。如果对已有的表增加一个timestmap字段,在数据库层面上当然是非常容易办到的,一个简单的 "alter table add xxx column... " 即可。但是在业务程序方面将会带来巨大的改造量。

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

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

在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_ROWSCN

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的数字转换为时间

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

TO_CHAR(SCN_TO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值