【发布时间】:2013-11-06 22:35:20
【问题描述】:
我正在开发一个 Win32 应用程序,该应用程序开发了一个非常奇怪的问题,即数据库悄悄地增长,直到最终达到 2 GB 文件大小限制。我们使用 ADO 连接到 Access 2007 数据库。该应用程序多年来一直运行良好,没有观察到这样的困难。正如您可能想象的那样,当它达到 2 GB 的限制时,数据库就会损坏。我现在有很多客户数据库被发送给我们进行维修——大小都在 2GB 左右。压缩后,它们会回到
随着时间的推移,我们看到了一些数据库增长,但从未出现过这种规模的增长。
我制作了一个小型数据库“检查器”,它将所有记录中所有字段的内容相加,以了解存在多少实际数据。在最近压缩的数据库上检查了这个新工具后,我认为该工具工作正常。所有臃肿的数据库每个数据都不超过 10 MB。
我们不会在应用启动时压缩数据库。在我看来,因为我们不删除大量数据,所以压缩数据库不是我们“应该”需要做的事情。拥有较大数据库的客户(有一些,但它们使用的是早期版本)。
您能否建议我们如何让一个小于 10 MB 的数据库增长到 2 GB?
关于我们的应用功能的几点说明:
当 ADO 没有打开数据库时,使用 DAO 完成任何重组。
我们确实在一些地方使用交易
为方便起见,某些记录便于删除和重新创建,而不是查找/编辑/删除。通常此操作涉及 5-30 条记录,每条记录约 8K。这仅在用户按下“保存”时发生。
还有其他大约 70 KB/记录的记录类型,但我们没有对它们使用删除/重新创建。
我们使用 BLOB(“OLEObject”)字段来存储二进制数据。
感谢您提供的任何见解。
【问题讨论】:
-
这应该被标记为 Delphi 吗?
-
我考虑过不将其标记为 Delphi,因为我真的不认为这有什么不同,但为了充分披露,我还是提到了它。
-
您能否定期检查数据库磁盘上的大小并在自上次检查后增长超过 X % 时对其进行压缩? (显然以某种方式考虑了数据库表中的记录数)。
-
正如@Jerry 所说,这个问题真的与Delphi 无关。这严格来说是一个 Access/ADO 问题。这里没有与 Delphi 相关的内容。支持内容问题,但删除
delphi标签。 -
我在使用 SQL Server 时也遇到过类似的问题。执行数据库更新脚本(超过 30k 行脚本)后,日志文件变得异常大。实际上,我们在更新过程中加入了收缩过程来适应这种情况。
标签: ms-access ms-access-2007 ado