关于获取oracle中数据变更的时间戳的探索(待更新)
2018-03-02 00:00
281 查看
近期要上一个BI的项目,需要对各个业务系统内的数据进行分析,那么问题就来了。现有的数据库中有新insert进来的数据,还会有对于已有的数据进行变更的操作。那么这些新增以及变化都要反应到BI系统中。
可以现有的生产数据库的table中没有可以识别变更的时间戳字段。如果对已有的表增加一个timestmap字段,在数据库层面上当然是非常容易办到的,一个简单的 "alter table add xxx column... " 即可。但是在业务程序方面将会带来巨大的改造量。
insert的时候需要多增加一个timestmap字段
update的时候需要同时更新timestmap字段
(这样的话,开发人员该疯了)
在MySQL数据库下可以添加一个会自动更新的timestamp。(oracle中不支持该语法)
在oracle怎么办呢?
为了更方便阅读,还可以把scn的数字转换为时间我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。
Scn转换成时间:
时间转换成scn:
简单的测试,结果很令人开心哈,毕竟不用改程序了。(我为人人做贡献的DBA)
开始在业务测试库中进行验证。
可以现有的生产数据库的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_ROWSCNSQL> 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_TIME ID ------------------- ---------- 2018-02-26 10:40:28 0 2018-02-28 10:35:45 2
Scn转换成时间:
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)
开始在业务测试库中进行验证。
相关文章推荐
- 关于获取oracle中数据变更的时间戳的探索(待更新)
- 关于获取oracle中数据变更的时间戳的探索(待更新)
- oracle数据获取当前自然周,当前周的起始和结束时间
- jdbc关于操作Oracle时间数据解析
- 关于使用ajax 局部获取、更新数据
- oracle 记录每一条数据最后更新的时间(ora_rowscn)
- 关于表格通过 Class点击时间获取行数据不正确的分析
- oracle 更新表数据更新错之后通过闪照,将表恢复到指定时间的数据
- 关于使用AJAX获取数据时,由于IE缓存而导致数据不更新,串数据的问题!
- 关于几个js获取当前时间和处理返回数据改变时间格式的函数
- oracle中根据时间获取最新的一条数据
- oracle插入返回主键&&根据时间获取最新的一条数据
- 关于读取Oracle数据时间丢失问题
- Oracle 取随机数 |获取时间格式+三个随机数: 组成随机数据
- 关于Oracle SQL中系统时间和库里数据时间的比较
- java解析oracle日志,获取指定日期后的更新和插入数据
- oracle获取今天时间数据
- 关于Oracle数据中日期时间的操作
- 一个关于Oracle更新语句引发的时间字段类型的问题
- oracle 根据更新时间不同查询多条相同数据