有哪些策略可用于将Access数据库迁移到基于SQL Server的应用程序?

时间:2010-02-09 04:33:23

标签: sql database ms-access migration

我正在考虑开展一个项目,将非常大的MS Access应用程序迁移到基于SQL Server的新系统。现有系统本质上是一个拥有几十个用户的ERP应用程序,它们都通过网络共享Access数据库。该数据库有大约300个表和许多混乱的VBA代码。这个系统开始崩溃(实际上,只要它有效就令人惊讶。)

由于Access应用程序的大小和复杂性,“大爆炸”方法并不可行。绳索掉大块功能并将它们零碎地迁移到新系统似乎是明智的。在迁移过程中,我预计需要几个月的时间,可能需要两个数据库都在运行,并且能够在两个系统中查询和修改数据。

我考虑使用类似ADO.NET实体框架的东西来实现数据抽象层来处理这个问题,但据我所知,实体框架没有Access提供程序。

我的方法看起来合理吗?人们用什么其他策略来实现类似目标?

4 个答案:

答案 0 :(得分:4)

您可能会发现主要问题是使用MS Access JET引擎作为后端。我假设你有一个Access FE(前端),除了表和BE(后端 - 仅表)之外的所有对象。

您可能会发现将数据迁移到SQL Server并将Access FE链接到该服务器将有助于立即缓解问题。

然后,如果您不想继续使用MS Access作为FE,您可以考虑将其分解为“模块”,并使用单独的开发平台逐个重新设计模块。

答案 1 :(得分:3)

答案 2 :(得分:2)

我建议将后端升级到SQL Server作为第1步。

但我永远不会去建议的第2步(即用其他东西替换Access前端)。我建议投入精力修复架构的缺陷,并调整Access应用程序以使用新架构。

显然,从来没有这样的事情,当你升级时,一切都只是起作用 - 以前很快的事情就是狗,有些以前很慢的东西会很快。而且我发现通常情况下,问题往往是而不是你预期它们会在哪里。您只能通过测试找出需要修复的内容。

基本上,任何效果不佳的东西都会重新构建,或者完全在服务器端移动。

利用现有Access应用程序的投资,而不是从头开始抛弃所有这些。只要您不认为它与Jet / ACE后端的工作方式相同,Access就是SQL Server后端的优秀前端。

答案 3 :(得分:0)

...大声思考......我认为这可行。

我认为应用程序的复杂性存在于各种VBA模块中,而不是数据库表/模式本身。因此,可能的迁移路径可能首先将数据存储迁移到SQL服务器,完全按原样,如下所示:

  • 防止数小时内对数据进行任何更改
  • 将所有表复制到SQL服务器;一定要创建相同的索引。
  • 创建链接表到ODBC Source指向SQL Server上新创建的表
    这些表应该与原始表具有相同的名称(因此可能需要重命名,例如使用前导下划线,以供可能的参考)。
  • 现在,可以重新启动应用程序,并且应该使用SQL表而不是Access表。所有逻辑应该像以前一样工作(正确......),可能会有慢的预期,这取决于两台机器之间的距离。

以上所有内容都可以在大约一天的工作中进行测试;最乏味的是在SQL服务器上创建表(其中大部分可以自动化,我敢肯定)。下一个最乏味的任务是断言应用程序有效地像以前一样工作,但是它的存储在SQL上。
编辑:正如评论所建议的那样,我应该强调,有一种[合理的]可能性,在SQL服务器后端,应用程序不能顺利运行,并且可能需要数周的努力在测试和修复。但是,除非由于对问题中未表达的应用程序的洞察而可以预见到其中一些困难,否则我建议应该考虑尝试“原样”迁移到SQL Server;毕竟,它可能只需要很少的努力,如果没有,我们很快就会知道。因此,这是一个高回报,低风险的提案......

使用这种方法寻求的主要优势是在[作为OP期望]期间将存在单个存储,在此期间旧的Access应用程序将与新应用程序共存。

这种方法的缺点是,至少在一开始,原始数据库的模式被复制 verbatim ,即包括一些已知的怪癖和遗产 - 遗产的特质。这些模式问题(和底层应用程序逻辑)可以及时得到纠正,但这当然不像新应用程序启动 ab initio 那样容易,它有自己独立的存储和不同的模式

将存储移动到SQL服务器后,可以在新应用程序中重写Access应用程序中最常用和/或最独立的模块,并且当原始应用程序的重要部分被移植时,有效使用,通过选择beta测试者或实际用户可以开始切换到新的应用程序。

可能,某种基于屏幕抓取的逻辑或其他系统可用于生成混合应用程序,该应用程序将为最终用户提供全面的应用程序,有时可以使用新逻辑,有时可以使用原始MS-访问计划。