数据库联网的高难度问题???高手呀,你在哪里????急急急急急。。。。。

sr_jn 2003-02-22 11:28:48
我在程序中需要几台机器共用一interbase数据库,登录时用的是同一用户名称,可时常出现“死锁”现象,不知应该怎样解决????请高手指点,若有源代码请发至sr_jn@163.com,非常感谢!!!!
...全文
67 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mousetjq 2003-03-31
  • 打赏
  • 举报
回复
to cutebit

谢谢指教!!我没用过IB的分布式事务处理。
所以……
我还向请教一下关于分布式事务处理,我也知道一个事务控件可连接数个IBDatabse。
但如果是以下这种情况呢?

只用一个IBDatabase控件一个IBTrabsaction控件和数个IBTable控件,我完成了所有操作,
但我要分开对这些IBTable完成的操作进行提交的,该如何实现?

谢谢!!
CuteBit 2003-03-31
  • 打赏
  • 举报
回复
to mousetjq
“一般是一个IBDatabase和一个IBTrabsaction相对应。除非你是在一个页面对几个表格进行操作,而且提交时又要分开提交(即修改完成不是同时提交所有的操作),那就必须一个表格对应一个IBTransaction控件。”
你的这样的做法不常规。一般,一个线程里只使用一个连接(一个IBDatabase和一个IBTrabsaction),一个线程里如果你需要太多的连接,你要考虑你的设计方法了。

IB 支持分布式事务处理,自动进行两阶段提交。所以 一个 IBTrabsaction 能同时连接到数个 IBDatabase 上用于执行分布式事务处理。
mousetjq 2003-03-31
  • 打赏
  • 举报
回复
我开发了几个C\S结构的数据库应用程序,一般没有出现死锁问题。只有当两个用户同时修改同一个表的同一条纪录时,才会产生死锁问题。
我连INTERBASE一般用BDE或IBX控件,DBExpress我倒还没用过,不过看介绍觉得相当不错,优化过的DBExpress的访问速度是BDE的2-3倍,只是它的用法没有前两者方便,它的DBSQL控件的指针只能向后单向移动。如果要考虑跨平台问题可以使用DBExpress。如果不需要的话,就用
IBX就行了。
我一般做两层的C\S数据库应用程序,我觉得不用每个涉及到数据操作的窗体都放一个IBTransaction控件,可以创建个数据模块统一管理数据库访问控件。一般是一个IBDatabase和一个IBTrabsaction相对应。除非你是在一个页面对几个表格进行操作,而且提交时又要分开提交(即修改完成不是同时提交所有的操作),那就必须一个表格对应一个IBTransaction控件。如果不考虑分时提交的话,就用一个IBTransaction就行了。

我一般是这么用的。有哪些不妥的地方,请高手指教!!谢谢!!!
hookharsh 2003-03-21
  • 打赏
  • 举报
回复
使用IBDatabase和IBTransaction来连接数据库。每个涉及到数据操作的窗体都放一个IBTransaction控件,进行修改、删除操作后及时提交事务。基本应该没有问题,我都是这么用的,未发现问题。
剑雷 2003-03-05
  • 打赏
  • 举报
回复
如果以后,你不准备把IB向其它SQL服务器迁移的话,就使用大家的控件来连接数据库,若为了增加程序的可移植性,我建议使用SQL Direct或dbExpress来连接数据库,可能会牺牲一些速度,但方便了程序的可移植性。
CuteBit 2003-03-04
  • 打赏
  • 举报
回复
to erickleung()
1) 是的,JDBC/ODBC/OLE_DB 比直接的 IBAPI 调用多了一层。使用 JDBC/ODBC/OLE_DB 换来的好处是,对底层 DB 透明,方便系统的多种数据库支持移值(当然并不一定不需要改程序)。效率不一定都是系统设计时首要考虑的。更多时候系统的框架结构设计更加重要。而且一个差劲的框架带来的低效率(包括开发效率和运行效率),使用编程技巧是难甚至不可能弥补的。还有,多一层调用并不总是比少一层运行低效的,例如 JDBC/OLE_DB 缓冲、可滚动结果集、批量更新等高级功能在 IBX 等不一定有实现(毕竟 IBX 只是针对开发工具一个控件,开发商更愿更多花在开发通用接口工具(JDBC/OBDC/ADO)上),这些高级功能在一些“流行”开发 WEB 等就显示出效率优势了。
2) 哦,是这样吗?做一个测试就知了:在机器上卸载全部网络,再试图连接。(我没装 IB6 )。
3) IB6 中(具体在哪个版本中去掉的,我也忘了)CS (Classis Server)结构已被 borland 去掉了,FB 在经过激烈讨论后在 1.5 中又加回来了。CS 是采用多进程方式,SS 采用多线程方式。它们的有优缺点都很对立明显。这里有很多细节问题。
4) 多版本的事务和锁方式的不同。每个连接都要启动一个事务(版本),它对事务的开销要比锁方式的小得多。具体这个请多参考些资料,一两句话说不清的。
erickleung 2003-03-04
  • 打赏
  • 举报
回复
就上面, 我有些意见, 望大家指正.

上面第一点, 我以为jdbc/odbc/ole_db类的控件, 和用IB api类的控件是有分别的.
A) Delphi --> ODBC/JDBC/OLE_DB --> IB API (或 BLR language) --> DB表
B) Delphi --> IB API(或 BLR language) --> DB表

所以 (B), 如ibx, ibo, fibplus 的效率总是会比 (A), 如BDE 的为高.

第三点: IB 是分 Classis Server (每session有独立thread) 和 Super Server (每session 共用相同thread), 两者都各有长处. Oracle用前者以提升其稳定性, 但session login时间较长, 用较多内存; MS SQL是用後者来加快速度, 共用相同内存, 但个别session会受其他session所影响.

无论是否用ib的多版本事务与否, server上事务开放时间也不应太长, 如版本号已经过时的话, server同样会报错并rollback事务的.

就第二点, 据闻现时的ib/fb的本地协议, 也是会经网络的模块, 而有瓶颈的. firebird小组在其fb 1.5才加上新模块, 若是本地协议可以绕过网络部份直接使用server上的内存.

CuteBit 2003-03-01
  • 打赏
  • 举报
回复
to aidelphi(爱人)
对你的建议有些疑义:
1、JDBC for IB 或者 ODBC for IB 也提供强劲功能,IBX 只是使用 object pascal 对 IBAPI 编写了接口,方便了 delphi/bcb 的程序分布。从功能上看,他们应该相当地。
2、如果客户程序和 ib 服务器在同一机器上,采用类似 "c:\db.gdb" 这样的连接,ib 会采用本地进程通信办法 IPC 通信,不会占用网络资源。每台计算机都安装 SERVER+CLIENT 只占用硬盘资源,并没占用比单 server 更多的其他资源。在服务器上安装 client 会方便将来可能的调试。
3、ib 和 postgreSQL 一样是采用多版本控制并发访问的。它的特点,提供更强的并发访问功能。关于事务 csdn 的文档区就有文章介绍的,我不在这里多说了。
aidelphi 2003-03-01
  • 打赏
  • 举报
回复
以上几位兄弟说的都差不多,我认为出现死锁的现象比较少。
因为
第一,一般来说使用IBX连接INTERBASE数据库是BORLAND的一个绝配,很多问题IBX已经为我们想到了。
第二,如果要多台计算机同时使用INTERBASE数据库,最好采用C/S结构,客户机用CLIENT,主服务器才用SERVER,这样可以减少保存网络数据库用时。因为我发现有的朋友,他在每台计算机都安装SERVER+CLIENT。
第三,在设计代码时,尽量让事务处理在要保存时再打开。若数据库记录数较多,就直接采用临时表的方式,保存时再处理。
以上是我平时使用INTERBASE C/S的作法,不知对否,请指正!
netwolfds 2003-02-25
  • 打赏
  • 举报
回复
我想应该主要还是和事务处理的时间有关系!
能否告之你用的控件是什么,以及你 的事物处理机制?
hamzsy 2003-02-25
  • 打赏
  • 举报
回复
检查你的触发器看看有没有死循环的情况
swordsmith 2003-02-24
  • 打赏
  • 举报
回复
好像可以设置超时时间
erickleung 2003-02-24
  • 打赏
  • 举报
回复
请说明你是用那种方式连上interbase, 那个interbase版本, 和那种情形下“死锁”.

Interbase是用transaction versioning, 每个事务都是分开处理. 一般情形下是不需要用数据上锁後才可让用户更改数据, 故此较少机会会有“死锁”.

CuteBit 2003-02-22
  • 打赏
  • 举报
回复
检查你的程序中是不是有长时间的修改(不包括增加删除)记录的事务,那样的程序在多用户情况下很容易造成“死锁”。这样的事务一定要尽可能的短。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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