处理大小超过 1 GB 并通过网络访问的 Access 数据库

Posted

技术标签:

【中文标题】处理大小超过 1 GB 并通过网络访问的 Access 数据库【英文标题】:Dealing with an Access database that is over 1 GB in size and accessed over a network 【发布时间】:2013-02-22 19:40:18 【问题描述】:

我的一个客户报告说,他们的一台计算机在加载数据库时出现了死机问题。这个数据库是这个 24/7 非营利机构的应用程序。由于在计算机上检查了其他所有内容,因此我查看了数据库文件。 Is 是存储在网络共享上的 Access 2000; 1个文件;仅小于 1 GB 的阴影。难怪这台电脑加载需要这么长时间(它是最老的电脑,只有一个 10Mbps 的网卡)。

这个数据库很复杂,可能充满了宏和代码以使其正常工作,但我不确定它是如何组合在一起的,如果我尝试过,我不确定是否可以重新创建它。我不是数据库专家,但可以做一些简单的事情。

也就是说:我可以做些什么简单的事情来让这个数据库更好地工作?用户主要是社会工作者,他们需要“单击此按钮,一切都将与以前一样”类型的解决方案。也就是说,如果该按钮打开的是 Internet Explorer 而不是 Access,他们会同意的。

他们有一台 Windows 2008 服务器。我是该机构的合同技术人员,可以向服务器添加任何服务以使其正常工作 - 当然需要预算批准。数据库正在成为一个问题,一个简单的解决方案可能会比聘请数据库专家从头开始重建它便宜得多。

虽然 Access 数据库是 2000 格式,但工作站都运行 Access 2007,因此可以选择在执行其他任何操作之前升级到 2007。当然,我会在尝试任何事情之前进行备份。

打电话给写它的人是不可能的。现在这里没有人知道最初是谁做的。

编辑添加:任何时候最多可以有 6 或 7 人使用数据库。不是所有活动,但它会在他们的工作站上打开并最小化

【问题讨论】:

主访问菜单上有一个压缩/修复数据库选项 - 这可能会有所帮助。 Compact 可以减小数据库的大小。如果我没记错的话,它在工具 > 数据库 > 压缩/修复下 Access 2007 / 2010 压缩和修复、前后端分离、反编译——你做过大部分吗?当然要先备份。 我会尝试紧凑选项。我还没有做任何事情,我今天早上看到了问题并没有做任何事情。 至于拆分前后端和反编译,我希望这是一个相对自动化的东西。正如我所说,我不是数据库人。当然,我会在做任何事情之前进行备份。 反编译参考:***.com/questions/574587/…。将数据库拆分为服务器上的数据和每个用户 PC 上的表单、代码、报告等将产生最大的不同,但这需要一些工作。这里有一个演练,我没有尝试过:office.microsoft.com/en-ie/access-help/… 【参考方案1】:

为了进一步提出关于这是一个数据库系统的建议,工作和修改 Access 数据库所需的学习曲线与基于 vb.net 或 SQL 服务器的应用程序没有任何不同。如果您要对 Oracle 系统进行性能调整,您将需要具有高于一般 Oracle 技能的人。这种想法也适用于 Access 或 vb.net 应用程序。

在很多方面,我发现 Access FAR 的学习曲线比使用 VS 和 .net 更陡峭。尤其是在需要额外性能的情况下。

Access 需要多种技能组合,从编码到数据库设计技能,以调整性能。不要在这里被愚弄,因为这是 Access。更糟糕的是,您正在谈论性能转变,所以现在您在这里谈论更高端的技能。

你最好找一个真正的 Access 专业人士,因为那个人可以在几个小时内完成需要你几周才能学会的东西。

如果有一个简单的灵丹妙药解决方案,它可能已经完成了。

在大多数情况下,当应用程序有价值时,这意味着它很可能是由至少具有一定能力水平的人创建的。所以这表明这个应用程序可能有一些很好的价值和设计。

不过,您可以查看所有 Access 开发人员都习惯的一些基本清单。第一个当然是拆分数据库(注意这往往不会加快应用程序的速度,但会增加稳定性和可靠性)。如果应用程序没有拆分,那么这通常表明构建器不是最佳的。

既然应用程序已拆分,接下来是一些基本的其他提示:

始终向用户部署程序的编译版本。

如果有多个用户 – 检查 + 确保与后端保持持久连接。

关闭曲目名称自动更正。

以上步骤以及要检查的事项列表如下:

http://www.granite.ab.ca/access/performancefaq.htm

以上是无需以任何实际实质性方式修改应用程序即可检查的最终清单。

但是,归根结底,最好的办法是让具有出色访问技能的人加入。如果他们没有这方面的预算,那么也许你会找到愿意花时间做志愿者的人。 (毕竟,这就是我们在这里所做的)。

正如我所指出的,如果您有一个 .net 或基于 oracle 的解决方案,Access 通常会给予更多的关怀,并且在很多方面都没有那么宽容。

虽然我提供了一个指向建议方法列表的链接,但您确实希望谨慎对待复杂的应用程序并搞乱 - 此类应用程序需要更加小心,因为它更容易破坏或损坏某些东西。

不过,请仔细看看上面列出的要尝试的事项 - 这是一个非常棒的清单。

如果您使用 10baseT,那么跳到 100BaseT 会有很大帮助。事实上,我已经多年没有看到 10baseT 连接了? (你确定吗?)。

我的意思是,他们有 2008 年的服务器(那是昂贵的),他们有 Access 2007,也是相当新的,但他们到底是如何使用 10baseT 网卡的?我的意思是,一张 100baseT 网卡需要 10 美元多少钱?我肯定会摆脱这个瓶颈。

【讨论】:

如果有一个简单的灵丹妙药解决方案,它可能已经完成了。 我们不能假设创建它的人是任何类型的专家 - 可能是熟练的业余爱好者。此外,我们不能假设“灵丹妙药”已经完成;除了使用数据库之外,没有人做过任何事情。我确实确认了 10BaseT(查看了那台计算机上的规格),但这是我最不关心的问题,一旦新的预算周期开始,那台计算机就会被更换。服务器是捐赠的——从不再需要它的本地企业回收。我担心的是,如果什么都不做,它会一直是个问题——现在 100Mbps 还是有点慢 我今天完成了compaction,震惊了——不到5分钟,db现在只有45mb。这正常吗? 有没有办法自动化这个过程? (就像每月一次的紧凑型一样,我不必远程进行操作?) @Geldhart Access 中有一个选项可以在关闭数据库时压缩数据库 - 我不确定 Access 2000,所以你需要搜索它 - 它应该在文件周围的某个地方菜单 - 当前数据库选项【参考方案2】:

谢谢各位。压缩数据库后,加载数据库的性能要好得多。虽然我自己不会重做数据库,但至少我的客户可以停止(有理由)抱怨它在工作站上加载的速度有多快,甚至是 10BaseT 恐龙(网卡是我在那里之前的替换卡,他们的旧显然,这家伙会使用一堆用过的零件)。

我们稍后会考虑拆分数据库,但他们明白这是一项“安全”功能,而不是性能。

感谢您对此的所有帮助。

【讨论】:

拆分数据库是一种性能奖励,特别是当您将前端存储在客户端(=最终用户本地)机器上时。

以上是关于处理大小超过 1 GB 并通过网络访问的 Access 数据库的主要内容,如果未能解决你的问题,请参考以下文章

Wix:处理大于 2 GB 的文件

批处理文件返回文件夹大小并删除内容(如果大于50gb)

Web.config 设置无法接受超过 1 GB 的文件大小

在 PHP 中获取大文件(> 2 GB)文件大小的最佳方法? [复制]

批处理 - 特定文件夹的文件大小(以 GB 为单位)的脚本

ORA -12953: 请求超过允许的最大数据库大小 11GB