延迟写入错误

问题描述:

在过去的几个月中,我们一直在丢失数据到延迟写入错误。我遇到了自定义代码和收缩包装应用程序的错误。例如,该错误信息下面从Visual Studio 2008来构建一个解决方案延迟写入错误

的Windows - 延迟写入失败:Windows无法 保存所有数据文件 \命门\来源\其它\ OCHSHP \ Done07 \ LHFTInstaller \发布\ LHFAI.CAB。 数据已丢失。计算机硬件或网络连接故障可能导致此错误。请尝试在其他地方保存此文件 。

例如,当它出现在Adobe,Visual Studio或Word中时,不会造成伤害。主要问题是它发生在我们的自定义应用程序(直接C应用程序将数据写入dBase文件到网络共享。)

从程序的角度来看,写入成功。它删除源数据,并继续下一个记录。几分钟后,Windows弹出一条错误消息,指出发生延迟写入并且数据丢失。

我的问题是,我们能做些什么来帮助我们的网络/服务器团队隔离并纠正问题(阅读,让他们相信这个问题是真实的。简单地告诉他们很多次也没有说服他们到目前为止),并且您对我们如何编写以避免数据丢失有任何建议吗?

+0

通过网络共享写入dBase文件?你是一个比我更勇敢的人! –

+0

@Jonathan,遗留代码,我能说什么?我宁愿将数据写入我们的SQL服务器,但我们的解决方案必须在该州和全国各地的40多家医院工作。最终,它将被基于网络的解决方案取代。在此之前,我们需要防止数据丢失。 –

与其他操作系统一样,Windows上的写入操作不会真正发送到磁盘,除非操作系统接近它。这是一次巨大的胜利,但问题(正如您发现的那样)是您在写入时无法检测到错误。

每个执行异步写入的操作系统也提供强制数据到磁盘的机制。在Windows上,FlushFileBuffers_commit函数可以解决这个问题。 (一个是HANDLE S,其他文件描述符。)

请注意,您必须检查每个磁盘写入,这些同步函数的返回值的返回值,以确定上数据使它成为磁盘。另外请注意,这些功能会阻止并等待数据到达磁盘 - 即使您正在写入网络服务器 - 也可能会很慢。除非您确实需要将数据推送到稳定的存储,否则不要打电话给他们。

欲了解更多信息,请参阅fsync() Across Platforms

+0

感谢您的建议!虽然我想解决导致问题的潜在问题,但至少可以防止数据丢失。 –

您有损坏的文件系统或失败的硬盘。网络/服务器团队应扫描磁盘以修复前者并检测后者。同时检查错误日志,看它是否告诉你任何事情。如果错误日志表明无法写入硬件,则需要更换该硬盘。

+0

谢谢!我会试着让我们的服务器团队来看看它。我知道他们已经压缩了有问题的硬盘,以避免购买更多存储空间。我们的办公室提出购买更多的存储空间,但被告知“我们没有存储问题,我们有用户问题。”超过1000人使用该服务器作为其主要网络共享。 –