oracle多线程读写同一字段的问题,结果总是出错

zxgllp 2009-12-06 05:10:54
我的程序采用多线程入库,在入库过程中需要对同一个状态字进行修改,以判断入库情况,以后读取这个状态字即可知道哪 个需要入库,哪个不需要。经过多次的试验,对这个状态字的修改总是出问题,很多时候状态字就没有更新,估计可能是多线程在同时读写那个字段时,导致的脏数据,请问这种现象如何解决。
...全文
206 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
海飏 2010-05-29
  • 打赏
  • 举报
回复
晕,刚才忘写联系方式了,qq:596782369
海飏 2010-05-29
  • 打赏
  • 举报
回复
不知道楼主的问题最后怎么解决的,我现在也遇到oracle多线程编程的问题了,我的qq希望能请教一下你
zxgllp 2009-12-22
  • 打赏
  • 举报
回复
那不操作的时候线程是等待还是放弃呢?需要人工控制等待或放弃还是会导致状态不能及时更新,而且可能会阻碍后面的线程工作
zxgllp 2009-12-10
  • 打赏
  • 举报
回复
for update也是不管用的,就是当多个线程同时读取了一个时刻的状态字,而其中一个线程快速把它给更改了, 第二个线程又要在原来读取的基础上再改,导致前一个进程改写的状态丢失,带来错误;还有就是一个线程在改,锁定了某行,而其它线程在等待,超时后退出,状态字还是未得到完全更改,同样带来错误。
实在没法了。
zxgllp 2009-12-10
  • 打赏
  • 举报
回复
我是多线程的入库,入库完后去读写那个状态字而产生的碰撞现象,这个真的是无法解决了,估计数据库本身的排队在等待超时后其它线程都退出了,那个状态字的更新也就不准了,现在只能求尽可能的避开同时操作一个字段的机会,没有办法了,把超时改大了点也不管用。
Rachel 2009-12-10
  • 打赏
  • 举报
回复
建议lz另外加个表tblstatus,表里有个字段flag 0 为可以操作,1为不可以操作
每个线程在操作表之前查看tblstatus 的flag状态。如果为1的话马上flag状态更改了。然后再操作你要修改的表。表修改完再将tblstatus表中flag的状态改为0。
huangyunzeng2008 2009-12-08
  • 打赏
  • 举报
回复
oracle多想成不明白,以后还待深入学习!
zxj828282 2009-12-08
  • 打赏
  • 举报
回复
董很多了
ycscsjj 2009-12-06
  • 打赏
  • 举报
回复
多线程不是很清楚,就数据库写入这块做下说明: 当对一个表进行修改时,数据库内存会采用排他锁的机制,这时表只能有由一个用户来进行写操作。 这个按楼主的意思,应该是楼主的一个线程来进行,也就是说,在同一时刻,对表只能由一个线程来进行写入。 所以在写入这块采用多线程意义不大.
Dave 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 zxgllp 的回复:]
我的程序采用多线程入库,在入库过程中需要对同一个状态字进行修改,以判断入库情况,以后读取这个状态字即可知道哪 个需要入库,哪个不需要。经过多次的试验,对这个状态字的修改总是出问题,很多时候状态字就没有更新,估计可能是多线程在同时读写那个字段时,导致的脏数据,请问这种现象如何解决。
[/Quote]

多线程不是很清楚,就数据库写入这块做下说明: 当对一个表进行修改时,数据库内存会采用排他锁的机制,这时表只能有由一个用户来进行写操作。 这个按楼主的意思,应该是楼主的一个线程来进行,也就是说,在同一时刻,对表只能由一个线程来进行写入。 所以在写入这块采用多线程意义不大.





------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
Q Q 群:62697716
crazylaa 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 zxgllp 的回复:]
我的程序采用多线程入库,在入库过程中需要对同一个状态字进行修改,以判断入库情况,以后读取这个状态字即可知道哪 个需要入库,哪个不需要。经过多次的试验,对这个状态字的修改总是出问题,很多时候状态字就没有更新,估计可能是多线程在同时读写那个字段时,导致的脏数据,请问这种现象如何解决。
[/Quote]

用 for update 行锁锁住你要的那些行?
kaylg 2009-12-06
  • 打赏
  • 举报
回复
等待正解

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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