多程序访问同一个数据库的问题

foniex 2005-10-21 04:43:24
现在有一个需求,要实现下面功能:
要编写一个程序,并安装在多台PC上。此程序会访问一个网络数据库(目前采用Oracle的数据库),读取数据库记录,按照记录在客户机上执行动作,并update数据库。要求在其中一台PC访问网络数据库的时候,其他PC的程序不可访问此数据库(包含读取,写入数据库),只有在这台PC断开连接后其它PC才能进行访问。
问题有两个:
1.如何能让程序进行独占式的访问。
2.如何防止下述情况发生:假设有A,B,C三台客户机,均安装有此程序。A正在访问数据库,此时B、C均无法访问;当A断开数据库连接后,B发现数据库连接空闲,开始访问数据库;当B断开数据库连接后,A取得了数据库的访问权…………结果就是导致A,B交替访问数据库,而C一直无法访问数据库。
...全文
253 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gnixemos 2005-10-25
  • 打赏
  • 举报
回复
最简单的是server上对所有的client过来的访问请求放队列里面,先来先服务,这样肯定都能服务到
CodeProject-Jerry 2005-10-24
  • 打赏
  • 举报
回复
做一个前端处理程序

接受说有的任务请求不缓存

又前端处理程序顺序执行请求
Caps77 2005-10-24
  • 打赏
  • 举报
回复
这么做可否:

数据库中增加两个字段:
1、要访问该数据库的PC总数N,
2、当前访问数据库的序号M,只有M=0时数据库可以访问(程序每次退出数据库时将M置0),否则M>1

那么当A程序退出时,必须要B程序访问数据库,则可以根据M+1的值进行判断

而M序号的给定可以根据机器的IP,或者用户名,当然,前提是数据库必须要有个服务端
teli_eurydice 2005-10-24
  • 打赏
  • 举报
回复
多线程了阿,说说你 独占性 访问怎么解决的
zxyjyzxyjy 2005-10-24
  • 打赏
  • 举报
回复
你的独占性是如何解决的??如果采用的是c/s模式,则可在s端对c的访问进行排队,这样都有机会访问数据库了。
foniex 2005-10-24
  • 打赏
  • 举报
回复
To zxyjyzxyjy(星星)

有类似的源码供参考么?
小弟初学网络编程,先谢谢了
zxyjyzxyjy 2005-10-24
  • 打赏
  • 举报
回复
c/s模式大体结构:
S端开一线程用于访问数据库,从缓存中取访问数据库的语句执行,一直到事务结束,并标记是那个客户的事务,用于结束时通知客户。另一线程用于与C端通信,把所有请求放入缓存,并把执行结果通知C端。
C端用异步方式,需要访问数据时,向S端发出请求后不需要等待。
foniex 2005-10-24
  • 打赏
  • 举报
回复
服务器用的是Orcale 9i,数据服务器不是为了我这个程序而建的,我只是利用它的数据平台建立一个数据库用于存储一些管控资料,可以在database的访问策略中设定一次只允许有一个有效链接存在就解决了(偷懒的方法^_^),目前的试验结果是其它的连接请求会被Time out。
有点想法是做一个server端程序,只有这个程序可以对网络数据库进行访问。其他client通过winSocket与此server程序通讯,请求数据&通过此程序update数据,面临的问题还是排队
foniex 2005-10-23
  • 打赏
  • 举报
回复
独占性访问的问题现在已经解决,目前是在想如何解决让各个client的程序的访问机会均等
foniex 2005-10-23
  • 打赏
  • 举报
回复
另,不是一个实例多个线程访问数据库。而是有多个实例同时需要访问数据库,但又必须保证访问的独占性和机会均等性
foniex 2005-10-23
  • 打赏
  • 举报
回复
回复人: oyljerry(【勇敢的心】→ ㊣取次花丛懒回顾√㊣) ( ) 信誉:121 2005-10-22 16:57:00 得分: 0


均等机会,那就让线程一个个遍历访问


遍历访问如何实现使其访问机会均等?
koskinen 2005-10-23
  • 打赏
  • 举报
回复
可以在数据库中建立一张表客户连接的时候插一条记录,或者设置一个字段,ON/OFF状态,
读到ON就是被占用
oyljerry 2005-10-22
  • 打赏
  • 举报
回复
均等机会,那就让线程一个个遍历访问
foniex 2005-10-21
  • 打赏
  • 举报
回复
那如何让各个client有均等的机会访问数据库?能否提供例程或思路供参考?
KelvinSpace 2005-10-21
  • 打赏
  • 举报
回复
这应该不是数具库要解决的问题
应该通过程序去解决
SOCKET通信/广播等等
反正就是通知其它网络成员我已经存在
lizmei001 2005-10-21
  • 打赏
  • 举报
回复
如何能让程序进行独占式的访问可以作一个服务端,最简单的办法是每次访问的时候,生成一个共赏的文件,推出的时候删除,
后面的那种情况,可以参考消息队列

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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