我正在将一组现有的应用程序从Win XP迁移到Win 7.我们有一个第三方应用程序,它由用户会话启动并运行,该会话通过ODBC访问本地SQL Anywhere 9数据库(使用dbeng9按需启动) )。在同一台机器上,我们有一个ASP.NET网站,它也可以通过ODBC访问本地SQL Anywhere数据库。这两个应用程序在Win XP中很好地协同工作,因为这两个进程都在Session 0中运行。
在Win 7中,ASP.NET站点遇到ODBC错误,指出指定的数据库文件已在使用中。这是因为第三方应用程序首先启动并在用户会话(通常是会话1)中旋转dbeng9实例(通过ODBC)。然后,ASP.NET旋转并尝试连接到同一个数据库。 ODBC驱动程序发现dbeng9的实例未在当前会话(会话0)中运行并尝试启动实例,此时它无法访问数据库文件,因为已登录的用户已在使用该实例第1节。
有没有人有解决本地SQL Anywhere数据库的会话隔离问题的建议?
我考虑过将dbeng9作为服务运行,而不是允许ODBC根据需要启动实例。但是,由于SQL Anywhere与第三方产品捆绑在一起,因此PC没有dbsrv,我不确定这会如何影响许可。
只能从本地PC访问ASP.NET站点。在第三方Web服务器中运行ASP.NET站点会导致它在用户的会话中执行吗? (注意:因为这可以在1,000台机器上运行,所以必须使用免费或非常低成本的选项。)
答案 0 :(得分:2)
只要您运行的是SQL Anywhere版本9.0.2.3420或更高版本,就应该通过来自该计算机上任何会话中运行的客户端的共享内存来显示作为服务运行的数据库服务器。
如果您能够使用dbsvc实用程序或Sybase Central创建服务,那将是您最好的选择。您必须与第三方供应商交谈,看看您的许可是否允许这样做。