设立Job同步数据时存在的几个问题(Oracle)

探讨了定时任务Job在数据抓取及处理中遇到的问题,特别是在Oracle环境下如何确保数据一致性,并提出使用Cursor来解决相关难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  设立一个Job,每10分钟从数据源抓一次数据处理并更新自己的表格。例如当11分时执行,抓0分到10分Edit的数据,21分执行抓10分到20分Edit的数据。

抓取的判断标志是一个Edit_Date的列(记录该列的编辑时间) 大于 begin_date 小于 end_date。

  这样做会产生一些问题。首先数据源的列一直在更新,而我们要抓取0分到10分有更新过的所有列,就不能延迟到11分再执行。因为某一列在7分更新了,又在10分50秒更新了,那么11分执行Job抓数据时,这条数据的Edit_Date就是 10分50秒大于end_date 10分零秒,就会被漏掉。

  那么不设定end_date可以么?显然不设定的话就是抓到了 0分 到11分的数据不符合要求。

  那么10分的时候执行不就可以了么?确实,因为Oracle的读一致性的特性,10分的时候执行一段sql,取到的的确是10分这个点的一版数据。但是如果这个Job里面包含多段sql,第一段sql似乎没有问题,因为是串行执行的,第二段sql执行时,时间已经过了10分这个点,所以数据还是不准确的。

  那么每一个Job里面只有一段sql不就可以了?当然,但是对于有关联的若干更新,显然需要若干sql完成。

  那么要怎样解决呢?可以考虑使用cursor,在某一时刻open的cursor,查出的就是某一时刻的数据。可以在那个时刻open若干需要的cursor以获取该时刻版本的数据。

  当然具体逻辑还要具体分析,通过合适的方式,只要能够符合要求即可。

转载于:https://www.cnblogs.com/SoXLiang/archive/2012/08/17/2644718.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值