如何删除 Access Db 的临时 ldb 文件
Posted
技术标签:
【中文标题】如何删除 Access Db 的临时 ldb 文件【英文标题】:How Can I Remove Access Db's temporary ldb file 【发布时间】:2009-06-18 21:37:55 【问题描述】:我有一个 ASP.NET 项目。我正在连接到数据库,然后关闭并处理连接对象。但是当有人进入我的站点时,MS Access 会创建一个临时的 dbname.ldb。当我想从我的服务器下载我的原始 mdb 文件时,它不会让我访问 mdb 文件。如果服务器中有 ldb 文件,我将无能为力。它正在锁定 mdb 文件,我无法移动它。所以有什么问题?我正在打开连接并关闭它。那么为什么这个 ldb 文件在连接关闭后没有自行删除呢。
【问题讨论】:
【参考方案1】:您在 IIS 中的 Web 应用程序通过连接池保持连接打开。如果在 IIS 设置为终止您的 Web 应用程序的时间内没有进一步的连接,或者您可以重新启动应用程序(并在任何人进入之前复制文件),则 IIS 应用程序最终将关闭。
这只是 Access 不是此类应用程序数据库的好选择的一个原因。
【讨论】:
【参考方案2】:如果脚本在关闭连接之前产生任何类型的错误,则连接可以保持打开状态。检查带有自定义错误 500 页面的脚本,该页面在文本文件中记录错误,您将看到是否是这种情况。无论如何,ldb 文件并不危险,因此您可以创建一个脚本以每天一次左右删除它们。这是使用 MS Access 工作 Web 应用程序的缺点之一。如果可以,尝试迁移到 MSSQL 或迁移到 mysql,最后一个可以从 .NET 或经典 ASP 中使用,而 ADO 或 ADO.NET 没有问题,并带有适当的驱动程序。
【讨论】:
如果你想要单文件数据库,另一个类似的访问选项是 Sqlite。它比访问少得多。 @Chris:访问没有问题。如果人们不恰当地使用它(因为我相信将它用于除了最微不足道的网站之外的任何东西)当事情运行不佳时他们不应该感到惊讶。但这并不是因为 Access 有问题,而是因为它被滥用了。【参考方案3】:.ldb
文件是.mdb
Access 数据库的锁定文件。每次打开数据库时,Jet 引擎都会创建锁定文件并在有人连接时保持打开状态。
一旦没有其他客户端连接到数据库,Jet 就会删除锁定文件。
所以您看到锁定文件的原因有两个:
有一个打开的连接。 连接中断,无法删除锁定文件。如果检查服务器的错误日志没有提供任何信息,请尝试将应用程序内的所有数据库访问记录到文件中:附加有关时间、连接和其他有用调试信息的信息。 这可能是一种快速调试问题并查看连接处于打开状态的位置和时间的简单方法。
或者,您可以查看这篇 CodeProject 文章:Find "Leaked" Database Connections in ASP.NET Web Applications。
【讨论】:
【参考方案4】:您可能还需要考虑连接池 - 当您关闭一个连接时,c# 实际上会在关闭它之前将它保持打开一段时间(30 秒?60 秒?),以防万一被重复使用。这可能是个问题。
【讨论】:
【参考方案5】:删除 .ldb 文件的一种解决方法是执行以下操作:
制作访问数据库的副本 删除原来的access数据库 删除 .ldb 文件 将 access 数据库的副本重命名为原始数据库的名称。【讨论】:
【参考方案6】:您需要在关闭并释放连接对象后调用 GC.Collect() :)
【讨论】:
调用GC.Collect()
不会释放任何数据库锁。对Dispose()
的显式调用(包括using
块)就足够了——对Close()
的调用完全是多余的,因为Close
和Dispose
做的事情完全相同。以上是关于如何删除 Access Db 的临时 ldb 文件的主要内容,如果未能解决你的问题,请参考以下文章