Access数据库数据迁移

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。常见做法是:

  1. 用 SQL Server Express(免费,单库最大 10GB)或其它数据库作为新的数据存储;
  2. 用微软的 SQL Server 迁移助手(SSMA for Access)等工具迁移表结构和数据;
  3. 原来的 Access 前端改为通过 ODBC 链接到 SQL Server 的表,员工继续使用熟悉的界面;
  4. 之后再按计划,把常用功能逐步迁移到新的应用程序。

迁移时要重点检查:没有主键的表、自动编号字段、日期和是/否字段的转换、查询里用到的 Access 专有函数。

迁移前要先弄清楚的事

  • 数据库里有多少张表、哪些表最大、哪些表没有主键;
  • 有多少个窗体、报表、查询和 VBA 模块,业务逻辑写在哪里;
  • 有没有链接到其它 Access 文件、Excel 文件或外部数据源。

这些信息决定了迁移的工作量和风险。我们的离线体检工具可以在不读取任何业务记录的前提下,自动统计出这些结构信息。

常见问题

怎么查看 Access 数据库现在有多大?
直接在文件资源管理器里查看 .mdb 或 .accdb 文件的大小即可。如果超过 1GB,就应该开始规划;超过 1.5GB 要尽快处理。
压缩和修复多久做一次?
取决于数据更新频率。日常写入较多的数据库,建议每周在无人使用时做一次,做之前先备份。注意压缩修复需要独占打开数据库。
迁移到 SQL Server 要花钱吗?
微软提供免费的 SQL Server Express 版本,单个数据库最大 10GB,对大多数中小企业的业务系统已经足够。数据量更大或需要更多功能时再考虑付费版本。
迁移后员工还要学新系统吗?
如果采用“数据迁到 SQL Server、Access 界面通过链接表继续使用”的方式,员工的操作界面基本不变,可以先过渡,再按计划替换界面。

本文由 长沙数分信息科技有限公司(RELIFT)技术团队撰写。文中涉及的厂商支持政策以官方最新公告为准;处理生产环境前,请先完整备份程序和数据。