COM+系统如何固定占用一定数量的数据库连接? (200分)

  • 主题发起人 主题发起人 Sachow
  • 开始时间 开始时间
S

Sachow

Unregistered / Unconfirmed
GUEST, unregistred user!
近期做的一个项目要在嫁接在一个很旧的系统上,该系统是一套用PB4开发的C/S系统,Oracle开了340个服务进程,但由于客户端过多,经常会进程数满,连接不上的情况。
在开发阶段,由于是在测试系统上搞的,因此没有遇到这个问题,但现在一放到正式系统上后,问题就来了,经常是调用一个组件方法时就遇到这个错,这可让我范难了,由于在COM+当中,我不能像一个C/S程序那样自由地控制数据库的连接与断开,这可怎么是好?(客户端是用ASP写的,用户要老见到页面上出错误信息可不会答应啊)
对此,有什么好的解决办法?我好像见到有人用一个进程内组件(DCOM服务器),在主窗体上的TDatabase连接数据库,然后用RemoteDataModule的TDatabase引用主窗体的Database Handle的方法,不知这个做法在实用环境中是否可靠?
由于项目迫在眉睫,需要选择一种修改工作量最小的。
 
使用BDE的Database resource dispensers(下面摘自delphi的帮助)
To enable the resource dispenser, use the BDE administrator to turn on MTS POOLING in the System/Init area of the configuration.
8过这个是针对transactional data modules,
 
MTS Pooling已经设为TRUE了。我用DBA Studio看了一下数据库的会话状态,但令我不解的组件在访问数据库后竟然没有保留会话!这样看来,在组件方法的调用完成后数据库连接就被关闭了。
我觉得不应该这样啊,既然是数据库Pooling,组件就应该保持与数据库的连接会话吧?
 
如果你使用的是RemoteDatamodule是没有这种功能的
一定要是TransactionalDatamodule
 
已经找到解决方案,但我想让贴子多留一点时间,看看其它人的思路。稍后我会把我的解决方法告诉大家。
 
楼主留个联系方式给我吧。我看过了你以前的贴子。
我现在正在用COM+组件+ASP做一个系统。希望能得到你指点。谢谢
 
我都忘了这个贴子了,你竟把它翻了出来。^_^
 
不要卖关子了,快说吧
 
又被翻出来了?真是好同学!
由于近几个月来工作太忙,都没有功夫上大富翁论坛了。
我的解决办法是做一个客户端程序(我叫它连接助手),在计时器里定时打开一个数据表,这样服务器就会固定地占用一个连接了,从而可以在数据库连接资源非常紧张的系统上也可以使用了。但是光这样还不行,这样服务器对象不会被释放,进程不会终止,运行时间长了会出问题,所以这个连接助手需要在夜单关闭打开的数据表,使服务器对象能够释放。
To yangjia:你在来信中提到的问题,我没有解决过,但可以用“简单”的方法来处理复杂的数据类型(就是用Variant),你查一下相关VarArrayCreate(), VarArrayLock()等的贴子和帮助信息。
 
后退
顶部