应用服务器实时实现多帐套(数据库)的切换(200分)

  • 主题发起人 主题发起人 wanghai
  • 开始时间 开始时间
W

wanghai

Unregistered / Unconfirmed
GUEST, unregistred user!
一般情况下,应用服务器只实现与一个数据库的连接,但这不适合大型分布式公司的管理;如现在已经有人连接了应用服务器,数据库为A,而另一人想连接应用服务器并且数据库为B,如果采用一般的处理方法:中间层定义方法
SetDatabase(DBName:WideString)供客户端调用修改数据库,但引起上下文不一致错误;我尝试了RemoteModule和MTS均不可以,并且采用了多实例的方式,请教各位高手有无解决办法;由于应用服务器的状态性,多帐套功能的实现不一定可行,如有其它可行办法,也可得分。
 
由于问题观看不便,重新格式:
一般情况下,应用服务器只实现与一个数据库的连接,但这不适合大型分布式公司的管理;
如现在已经有人连接了应用服务器,数据库为A,而另一人想连接应用服务器并且数据库
为B,如果采用一般的处理方法:中间层定义方法SetDatabase(DBName:WideString)供客户
端调用修改数据库,但引起上下文不一致错误;我尝试了RemoteModule和MTS均不可以,并
且采用了多实例的方式,请教各位高手有无解决办法;由于应用服务器的状态性,多帐套
功能的实现不一定可行,如有其它可行办法,也可得分。
 
其实一句话,就是要实现多实例之间互不影响,各有自己的数据库连接。
 
我不是很明白,你直接编程就是了
难道有什么不妥的地方?
 
现在关键在于应用服务器的多个实例没有完全独立,所以出现了上下文不一致的情况。你设想一下,一个用户在修改数据库Database中的一个表,而另一个用户把数据库改掉了数据库,所以如果多个实例没有独立,则前用户在保存数据时不就出现了错误?
 
使用MTS的解决方法:
1、首先调用SetDatabase(DBAlias, DBName:WideString),在该方法的结尾处
调用EnableCommit,防止MTS释放对象。
2、调用真正想调用的方法,并在结尾处调用SetComplete或SetAbort撤销激活。
注意:每次访问方法前都要调用SetDatabase。
 
我仔细想了一下你的问题,估计可能的原因有如下几个之一:
1、你的应用服务器是EXE类型的;
2、在编写应用服务器时使用了全局变量,因此多个实例之间才会有影响;
3、本该独立的应用服务器接口被传递到了其他客户端。
一般情况下各个应用服务器对象对每个客户端都是独立的,但与实例模式没有关系。
 
同意langer.
 
MS SQL Server 可有语句
"use DBNAME"
随意切换于服务器的个数据库之间!
Informix使用语句 (E-SQL/C)
$DATABASE "DBNAME"

 
LANGER所的有理,我想WANGHAI还应把COM 的概念加强,一句话,使用一个COM组件
就为每个DB的连接写一个接口;使用多个COM组件,就写一个COM MANGER来管理。
 
我也想知道该问题的答案,请发email给我。
 
接受答案了.
 
后退
顶部