在事务中如何将实际更新时间写到记录内去??

qmanzbxv 2014-04-25 07:41:45
例子:
10:00:00 的时候开始了一个数据事物
中间处理其他事情
10:01:00 的时候更新了一条记录Update UserInfo set Ur_Age = 18,Ur_UpdateTime = systimestamp; 更新了记录的UpdateTime为当前时间。
10:02:00 的时候事务结束,Commit。

这个时候Ur_UpdateTime的值为10:01:00。但是实际数据Commit的时间是10:02:00。

这样导致客户端做增量数据更新时会漏掉(因为事务未提交而查不到)

如何在事务内将事务结束的时间写到记录中??
...全文
695 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2014-06-11
  • 打赏
  • 举报
回复
这个时候Ur_UpdateTime的值为10:01:00。但是实际数据Commit的时间是10:02:00。 这样导致客户端做增量数据更新时会漏掉(因为事务未提交而查不到) 这个没有问题, 10:02:00 你还有可能 rollback 呢。
皮特尔 2014-06-10
  • 打赏
  • 举报
回复
客户端做增量数据更新的时候会漏掉,这个是客户端的逻辑设计有问题吧。客户端非得设计成按照时间增量更新吗?可以参考oracle的数据块多版本设计思路,这样就能摆脱时间的限制,获取正确的增量更新数据。
chzjw254 2014-05-22
  • 打赏
  • 举报
回复
对这个表UserInfo 写一个after update的触发器,更新这批数据时间,这样可以么?不过不太建议用触发器; 或者建一个日志表,给每次更新加一个批次,日志表里记录时间
lk19900723 2014-05-21
  • 打赏
  • 举报
回复
哈哈哈我看明白了 其实很简单的有俩种方法供参考 时间拉链:10:00:00 的时候开始了一个数据事物为第一条 Ur_UpdateTime=10:00:00 start_date=10:00:00 end_date=虚拟的最大值 end_date=10:01:00 10:01:00 数据修改 时间为Ur_UpdateTime=10:01:00 start_date=10:00:0修改第一条数据的结束时间end_date=虚拟的最大值 end_date=10:02:00 10:02:00 数据修改 时间为Ur_UpdateTime=10:02:00 start_date=10:00:0修改第二条数据的结束时间end_date=虚拟的最大值 剩下的以此类推 时间拉链较数据冗余较高,但是可以存数据变化历史,方法好实现 第二中就是写触发器 如果数据量不是过百万还是可以提倡的用用触发器获得新值:NEW.字段 insert 到一张临时表.临时表存的就是宿主文件发生变化的值.
wqkjj 2014-05-21
  • 打赏
  • 举报
回复
不应该采用表扫描改变方式,应该采用改变实时俘获思路,就不会依赖更新时间,也就不存在这个问题
小灰狼W 2014-05-08
  • 打赏
  • 举报
回复
没太明白 一般要求事务要尽快提交,特别是这种对实时性要求较高的
R_engine 2014-05-08
  • 打赏
  • 举报
回复
在同一个事务中,10:01的时候执行了更新语句,然后01--02做了其他操作,并在02分提交事务。 问题是:你在01分的时候,怎么就知道这个事务会在02分结束且做了提交,而不是03分或者其他时间点? 在commit的前面加一句update,只更新Ur_UpdateTime,这样做是否符合你的业务需求?
qmanzbxv 2014-05-07
  • 打赏
  • 举报
回复
这么多天都没人解答啊。。。难道大家都没遇到?
qmanzbxv 2014-04-26
  • 打赏
  • 举报
回复
怎么都没人啊。。。求解答。。
gangma2 2014-04-25
  • 打赏
  • 举报
回复
顶一个,大家来回帖呀,我们也学习学习。
qmanzbxv 2014-04-25
  • 打赏
  • 举报
回复
自己先顶个!!大神们帮帮忙啊。。。这个应该是对时间比较敏感的共性问题吧。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧