Access 数据库快到 2GB 上限、多人用经常损坏,怎么办?
RELIFT 技术团队发布 阅读约 3 分钟
Access 单个数据库文件的大小上限是 2GB(包含系统对象),越接近上限越容易出问题,多人通过共享目录同时写入也容易导致损坏。短期先做压缩修复和自动备份,再把程序界面和数据拆成前后端;数据量和用户数继续增长时,应把数据迁移到 SQL Server 等正规数据库,Access 只保留界面或逐步替换。
- Access 单个 .mdb/.accdb 文件上限是 2GB,超过后无法继续写入
- 删除数据不会自动缩小文件,需要定期“压缩和修复”
- 多人通过网络共享同一个文件时,网络不稳定或异常断开是损坏的主要原因
- 先拆分前端(界面)和后端(数据),能明显降低损坏风险
- 数据迁到 SQL Server 后,原有 Access 界面可以通过链接表继续使用,实现平滑过渡
2GB 上限是怎么回事?
Access 的单个数据库文件,不管是老格式 .mdb 还是新格式 .accdb,最大都是 2GB,而且这个大小包含了 Access 自己的系统对象。文件接近上限时,写入会失败,各种奇怪的错误也会变多。
还有一个容易被忽略的地方:删除数据并不会让文件变小。被删除的数据占用的空间要通过“压缩和修复”才能释放。所以一个用了很多年、从来没压缩过的数据库,体积往往比实际数据大很多。
为什么多人使用时容易损坏?
很多中小企业的用法是:把一个 Access 数据库放在某台电脑的共享目录里,几个人通过局域网同时打开使用。这种用法最大的风险是:
- 某个人正在写入时,网络断开、电脑休眠或断电;
- 通过无线网络或 VPN 访问共享文件;
- 每个人打开的都是同一个“既有界面又有数据”的文件,任何一个人的操作异常都可能影响整个文件。
损坏后常见的症状包括:提示“无法识别的数据库格式”、某些记录显示为乱码或“#已删除”、打开速度明显变慢。
处理方案:从小到大
| 方案 | 适用情况 | 效果 |
|---|---|---|
| 定期压缩修复 + 自动备份 | 任何时候都应该先做 | 释放空间、修复轻微问题、损坏后可以恢复 |
| 拆分前后端 | 多人共用、文件体积较大 | 降低损坏风险,界面升级不影响数据 |
| 历史数据归档 | 大量多年前的数据基本不再查询 | 主库体积明显下降 |
| 数据迁移到 SQL Server | 接近上限、多人并发、需要对接其它系统 | 彻底解决容量和并发问题 |
1. 先做压缩修复和自动备份
在 Access 中,“文件 → 信息 → 压缩和修复数据库”可以手动执行。做之前一定要先复制一份完整备份。同时设置每天自动备份数据库文件到另一台电脑或网盘,保留多天的版本。
2. 拆分前端和后端
把一个文件拆成两个:
- 后端:只放数据表,放在共享目录;
- 前端:放窗体、查询、报表和代码,每个人的电脑上各放一份,通过“链接表”访问后端。
Access 自带“数据库拆分器”可以完成这个操作。拆分后,前端损坏只影响一台电脑,修改界面也不需要所有人同时退出。
3. 把数据迁移到 SQL Server
当数据库接近 2GB、用户越来越多,或者需要和电商、财务等其它系统对接时,就应该把数据迁出 Access。常见做法是:
- 用 SQL Server Express(免费,单库最大 10GB)或其它数据库作为新的数据存储;
- 用微软的 SQL Server 迁移助手(SSMA for Access)等工具迁移表结构和数据;
- 原来的 Access 前端改为通过 ODBC 链接到 SQL Server 的表,员工继续使用熟悉的界面;
- 之后再按计划,把常用功能逐步迁移到新的应用程序。
迁移时要重点检查:没有主键的表、自动编号字段、日期和是/否字段的转换、查询里用到的 Access 专有函数。
迁移前要先弄清楚的事
- 数据库里有多少张表、哪些表最大、哪些表没有主键;
- 有多少个窗体、报表、查询和 VBA 模块,业务逻辑写在哪里;
- 有没有链接到其它 Access 文件、Excel 文件或外部数据源。
这些信息决定了迁移的工作量和风险。我们的离线体检工具可以在不读取任何业务记录的前提下,自动统计出这些结构信息。
常见问题
- 怎么查看 Access 数据库现在有多大?
- 直接在文件资源管理器里查看 .mdb 或 .accdb 文件的大小即可。如果超过 1GB,就应该开始规划;超过 1.5GB 要尽快处理。
- 压缩和修复多久做一次?
- 取决于数据更新频率。日常写入较多的数据库,建议每周在无人使用时做一次,做之前先备份。注意压缩修复需要独占打开数据库。
- 迁移到 SQL Server 要花钱吗?
- 微软提供免费的 SQL Server Express 版本,单个数据库最大 10GB,对大多数中小企业的业务系统已经足够。数据量更大或需要更多功能时再考虑付费版本。
- 迁移后员工还要学新系统吗?
- 如果采用“数据迁到 SQL Server、Access 界面通过链接表继续使用”的方式,员工的操作界面基本不变,可以先过渡,再按计划替换界面。
本文由 长沙数分信息科技有限公司(RELIFT)技术团队撰写。文中涉及的厂商支持政策以官方最新公告为准;处理生产环境前,请先完整备份程序和数据。