DBF / CDX文件几乎每天都无法访问

时间:2013-07-10 16:34:30

标签: foxpro dbf windows-server advantage-database-server file-locking

我们在俄罗斯和其他独联体国家中运行非常受欢迎,虽然这是一个非常古老的会计系统,名为BEST。它都是基于FoxPro(不是Visual Foxpro)DBF / CDX表构建的。它是开放的,没有用于与其他软件交互的API。所以我们必须使用对表和数据的直接访问。

我们使用Sybase Advantage数据库服务器Internet连接器(ADS)将我们的在线商店连接到BEST数据库,并接收新的信息并写回订单。 BEST用户在终端模式下使用Windows Server 2003 R2 SP2 - 因此所有可执行文件都在运行,所有表/索引文件都在Windows Server上本地打开,但不能通过网络打开。

过去两年,我们遇到频繁的数据库文件锁定问题。首先我们认为我们有Foxpro索引文件损坏,因为来自ADS的所有错误都与索引文件相关。但后来我们发现那些文件(DBF和CDX)都没问题,重启后它们正常打开。通常问题出现在3个表中:RBOOK(订单),RBOOKM(订单内容)和MKART(关于商品的存储信息 - 数量,储备等)。一些用户继续使用这些文件,而其他用户无法打开它们。我可以使用Windows资源管理器复制文件,我可以使用FIWIN dbf-viewer打开表格,但我无法使用ADS或BEST。

由于问题没有立即显现,因此很难排除故障。没有系统事件日志值以某种方式与它连接。不幸的是,BEST没有正常的日志文件(只是一个文件,它写入最后一个错误,通常说错误打开索引文件)。这个问题经常发生 - 它每天都发生几乎,但每次都发生在不同的时间。我们试图找到任何规律性,但我们失败了。有10个连续日没有问题的时期,然后它回到“每日”。在我们的情况下,重新启动是唯一的方法。如果不重新启动(只关闭所有应用程序并重新编制索引),问题很快就会重复出现。

我们无法使用SysInternals Handles.exe实用程序,因为它总是说没有足够的资源来运行。我们使用Windows任务管理器查看应用程序打开的句柄数 - 但最大的数字是Outlook,acronis MMS服务和svchost。没有与我们的表连接的进程具有> 1K手柄。我们试图关闭所有可能的东西(AV软件,备份,不必要的工具),我们限制访问整个部门,我们记录访问有问题的文件,我们尝试更改许多以某种方式连接到文件的Windows注册表项,锁定(oplocks) ,网络,内存和处理限制等。但没有运气。我们清理重新安装服务器,但这也没有帮助。我们更换了内存,硬盘,网络交换机。后来我们更换了整个服务器。我们换了电源。我们重新创建了用户档案。我们更改了用户计算机和网络电缆上的NIC,然后让所有人都进入终端访问。我们试图监控资源并做其他事情,但一切都很好。

以下是在RBOOKM索引文件访问问题期间拍摄的Unlocker实用程序的屏幕截图。 http://cl.ly/image/292d17111A3B 我觉得奇怪的是,许多进程具有相同的文件ID,而其他进程具有唯一的句柄。

还有一件事可能与这个问题有关 - 我们注意到在一些情况下CPU利用率超过60%且系统正在运行

你有什么想法吗?我会非常感谢你。

3 个答案:

答案 0 :(得分:0)

我的公司(和其他人)已经看到一个问题,显然SMB2导致xBase类型语言中的DBF和索引文件损坏。我们尝试了许多您提到的相同修复程序,甚至尝试使用Wireshark监控网络流量。尝试在Google上搜索字符串“foxpro index corruption smb version”以获取更多信息。修复程序最终是在服务器上禁用SMB2,这是通过注册表项完成的。我不记得哪个,但您应该能够使用Google搜索找到这些信息。

答案 1 :(得分:0)

您没有说明您正在运行的Windows服务器 - 除非您有Server 2008或2008 R2或更高版本以及连接到它的Vista,Windows 7或Windows 8客户端,否则SMB2不会出现问题。

假设您使用的是Server 2008,2008R2或2012,那么Microsoft发布了一些可能适用的与SMB2相关的修补程序:

  1. 确保Server 2008处于正确的Service Pack级别。对于Windows Server 2008,这是Service Pack 2.对于Windows Server 2008 R2,这是Service Pack 1(在撰写本文时)。
  2. 确保Windows 7客户端处于正确的Service Pack级别。这是Service Pack 1(在撰写本文时)。
  3. 确保在Windows Server 2008上启用 。默认情况下将启用它。除非在某些时候明确禁用它。
  4. 在Windows 2008 Server上安装修补程序Windows6.0-KB2635024-x86,以解决SMB2中的文件损坏问题。
  5. 在每个Windows 7工作站上,根据需要将网络驱动程序更新到最新版本。从2009年开始,OEM安装的驱动程序不会削​​减它!
  6. 在每个Windows 7工作站上,配置网卡以尽可能禁用中断审核,并强制为100Mbps或1Gbps全双工(取决于网络速度)。
  7. 在每个Windows 7工作站上,安装修补程序Windows6.1-KB2618096-x86以解决SMB2中的另一个文件损坏问题。

答案 2 :(得分:0)

acronis是罪魁祸首。 当它在后台工作时,它会导致各种问题,例如你提到的dbf / cdx文件 卸载它或暂停一段时间并检查问题是否已解决