0

我们有一个大约有 15 年历史的实践管理系统。我已经研究了大约 12 年,直到最近我才遇到这个问题,我们无法弄清楚。

它是用 VB6 编写的,它使用 ADO/JET 来访问网络上的 Access .mdb 文件。应用程序在启动时打开连接,在打开时保持打开状态,并在退出时关闭连接。它用数据库做了很多事情——系统处理病人账户、费用、付款、安排预约,以及大约一百万其他事情。我们有几十个使用这个程序的客户,每个客户都有自己的数据库,其中大多数是“异地”,他们有自己的服务器、一些工作站、1 到 20 个用户,每天 24 小时在系统中运行,每周 7 天,除了偶尔的 DB 字段错误或必须压缩/修复 DB,它非常稳定。

大约 3 周前,我们开始看到一个以前从未见过的问题。我们有一个“内部”系统设置供我们使用:数据库在我们的服务器上,其中可能包含 10 个其他数据库,并且只有几个人连接到这个系统。我们开始注意到,如果有人登录系统,直接进入我们的调度程序屏幕,然后闲置约 5-10 分钟,他们可能会收到“磁盘或网络错误”或“找不到输入表或查询 X on数据库 Y”。

奇怪的是,似乎只有当 2 个或更多人从不同的计算机登录到该数据库时才会发生这种情况,然后其中一个人会收到错误(随机?)但其他 2 个用户会没事的。

系统的“主”MDI 父窗体上有一个计时器,它大约每分钟唤醒一次(有些东西会将间隔更改为更短的间隔,有些东西会禁用计时器,但我们不这样做' t认为它们中的任何一个都在这种情况下发生)。它在数据库上执行一个非常基本SELECT loggedin FROM Users WHERE UserId = 'DBUPDATER'的 SQL 查询:这是似乎总是触发这些错误之一的 SQL 查询。

还有一个计时器,大约每 2 分钟运行一次,同时用户登录以检查电子邮件和在此期间运行的其他一些事情。由于它们位于调度程序屏幕上,因此那里有一个每 30 秒左右运行一次的计时器,它将检查数据库以查看是否对调度程序进行了任何更改,以查看是否需要刷新屏幕。

还有一些其他奇怪的事情:数据库和用户表似乎非常好。当出现错误的人登录系统时——通常只提前 5 分钟——系统必须查看用户表以将其标记为已登录,我几乎 100% 确定它正在死亡的查询有至少运行一次 - 可能在它死亡之前运行 4-5 次。

一旦用户收到此错误,如果他们将错误的消息框留在屏幕上(不退出 .exe),如果他们尝试以任何方式访问该数据库文件,他们会收到“磁盘或网络错误” - 这包括他们是否尝试在 Access 中打开该数据库。但是,他们仍然可以正常访问网络,甚至可以在与他们无法打开的文件夹相同的文件夹中打开其他 mdb 文件。其他计算机上的其他人可以打开该 mdb 而不会出现任何错误。一旦用户确认错误,并允许 exe 关闭,他们就可以再次打开该 DB 文件。

有人告诉我,这无论如何都不是网络问题。我们的 IT 人员说他正在运行 ping 和跟踪以及各种测试,以确保网络连接不会中断。我还在数据库上运行了一些东西,以确保它没有损坏并且看起来很好 - 我们让它在其他数据库上发生。

如果有人见过这样的事情并知道可能的解决方法,我将不胜感激!谢谢!

新信息(2013 年 9 月 5 日 - 上午 10:30)

我们注意到,在我们收到此错误的同时,在收到错误的计算机上的错误日志中是一个警告事件,它说:

{延迟写入失败} Windows 无法保存文件 \MEDTECHSERVER\MEDTECH DATA\VB\SCHEDTEST2\MEDTECH.MDB 的所有数据;数据已丢失。此错误由文件所在的服务器返回。请尝试将此文件保存在别处。

4

0 回答 0