由于历史原因,我们有一些旧的 vb6 服务器端代码运行在两个相同的 Windows 2008 服务器上,它们使用 dao 3.6 来访问后端 MS 访问数据库。这多年来一直运行良好,我们目前正在迁移所有代码。但是,运行代码的其中一台服务器变得不稳定,因此我们需要将代码移动到新服务器,因为迁移的解决方案暂时不会准备好。运行正常的服务器正在运行 Windwos Server Web 2008 Sp1 64 位。新服务器是 Windows Server Standard 2008 R2 Standard Sp1。在这个新服务器上运行测试时,我们开始在应用程序中随机冻结。有一个简单的循环对数据库中的每个表运行一个选择查询。添加一堆日志记录后,它在调用 DAO 的 OpenRecordset 方法时冻结。数据库对象。有时它会冻结几秒钟,有时会冻结 10 - 11 分钟,然后继续。正在运行的查询采用这种格式,并且都应该返回 0 条记录:
SELECT * FROM BlahBlah WHERE WriteTime > #25 Oct 2012 10:09:43#
当直接在数据库上运行时(即在 Access 中),它们返回正常。每次都锁定的查询也不相同。我认为这可能是我们软件特有的东西,直到我在这里找到一个非常相似的帖子(不幸的是,除了我的,没有回复!) http://www.vbforums.com/showthread.php ?653166-Using-Dao-3.6-on-Windows-server-2008&highlight=dao+3.6+server+2008
到目前为止我唯一发现的是,它运行的服务器上的DAO360.dll版本是3.60.9704,而有问题的服务器上的版本是3.60.9756(即更新版本的Dao)。我没有手动安装或注册任何东西,而是在新服务器上安装了Access 97和Access 2003,和旧服务器一样。我还应该指出,如果我将后端代码原样移动到旧服务器,那么测试工作正常,所以我很确定它不是代码。
现在我知道 DAO 已经过时了,但我一直坚持使用这个代码库,直到迁移的解决方案可用并经过全面测试,所以任何关于去哪里寻找的想法都会非常受欢迎。同时,我将尝试在新服务器上手动注册 3.60.9704 版本并运行更多测试,看看是否是问题所在,但如果是这样,那就有点奇怪了......