Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有哪些策略可用于将Access数据库迁移到基于SQL server的应用程序?_Sql_Database_Ms Access_Migration - Fatal编程技术网

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

有哪些策略可用于将Access数据库迁移到基于SQL server的应用程序?,sql,database,ms-access,migration,Sql,Database,Ms Access,Migration,我正在考虑进行一个项目,将一个非常大的MS Access应用程序迁移到一个基于SQL Server的新系统。现有系统本质上是一个ERP应用程序,有几十个用户,所有用户都通过网络共享Access数据库。该数据库有大约300个表和大量凌乱的VBA代码。这个系统开始崩溃了(事实上,令人惊讶的是,它工作了这么久) 由于访问应用程序的规模和复杂性,“大爆炸”方法实际上并不可行。将大块的功能捆绑起来并将它们零碎地迁移到新系统似乎是明智的。在迁移过程中(我预计需要几个月),两个数据库可能都需要运行,并且能够查

我正在考虑进行一个项目,将一个非常大的MS Access应用程序迁移到一个基于SQL Server的新系统。现有系统本质上是一个ERP应用程序,有几十个用户,所有用户都通过网络共享Access数据库。该数据库有大约300个表和大量凌乱的VBA代码。这个系统开始崩溃了(事实上,令人惊讶的是,它工作了这么久)

由于访问应用程序的规模和复杂性,“大爆炸”方法实际上并不可行。将大块的功能捆绑起来并将它们零碎地迁移到新系统似乎是明智的。在迁移过程中(我预计需要几个月),两个数据库可能都需要运行,并且能够查询和修改两个系统中的数据

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

我的方法合理吗?人们还使用了哪些其他策略来实现类似的目标?

…大声思考。。。我想这可能行得通

我认为应用程序的复杂性在于各种VBA模块,而不是数据库表/模式本身。因此,一个可能的迁移路径可以是首先将数据存储迁移到SQL server,如下所示:

  • 在几个小时内防止对数据进行任何更改
  • 将所有表复制到SQL server;一定要创建相同的索引
  • 创建指向SQL Server上新创建表的ODBC源的链接表
    这些表应与原始表具有相同的名称(因此可能需要重命名,例如使用前导下划线,以供参考)
  • 现在,应用程序可以重新启动,并且应该使用SQL表而不是Access表。所有逻辑都应该像以前一样工作(右…),根据两台机器之间的距离,可能会出现预期的慢度
所有这些都可以在一天左右的工作中进行测试;最乏味的是在SQLServer上创建表(我相信大部分都可以自动化)。下一个最乏味的任务是断言应用程序与以前一样有效地工作,但其存储在SQL上
编辑:正如一条评论所建议的,我应该强调,应用程序在SQL server后端下很可能无法顺利运行,可能需要数周的艰苦测试和修复。但是,除非由于对问题中未表达的应用程序的深入了解而可以预见其中的一些困难,否则我建议应考虑尝试“按原样”迁移到SQL Server;毕竟,它可能只需要很少的努力就可以工作,如果不行,我们很快就会知道这一点。因此,这是一个高回报、低风险的方案

这种方法的主要优点是,在[如OP预期的那样]较长的时间内,旧的访问应用程序将与新的应用程序共存,将有一个单一的存储

这种方法的缺点是,至少在一开始,原始数据库的模式是逐字复制的,即包括一些已知的怪癖和遗留的herited特性。这些模式问题(以及底层应用程序逻辑)可以及时纠正,但这当然不如新应用程序从一开始就使用自己的、独立的、存储的和不同的模式那么容易

将存储移动到SQL server后,Access应用程序中使用最多和/或最独立的模块可以在新应用程序中重新写入,并且随着原始应用程序的重要部分被移植,选择beta测试人员或实际用户的有效使用可以开始切换到新应用程序

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

…大声思考。。。我想这可能行得通

我认为应用程序的复杂性在于各种VBA模块,而不是数据库表/模式本身。因此,一个可能的迁移路径可以是首先将数据存储迁移到SQL server,如下所示:

  • 在几个小时内防止对数据进行任何更改
  • 将所有表复制到SQL server;一定要创建相同的索引
  • 创建指向SQL Server上新创建表的ODBC源的链接表
    这些表应与原始表具有相同的名称(因此可能需要重命名,例如使用前导下划线,以供参考)
  • 现在,应用程序可以重新启动,并且应该使用SQL表而不是Access表。所有逻辑都应该像以前一样工作(右…),根据两台机器之间的距离,可能会出现预期的慢度
所有这些都可以在一天左右的工作中进行测试;最乏味的是在SQLServer上创建表(我相信大部分都可以自动化)。下一个最乏味的任务是断言应用程序与以前一样有效地工作,但其存储在SQL上
编辑:正如一条评论所建议的,我应该强调,应用程序在SQL server后端下很可能无法顺利运行,可能需要数周的艰苦测试和修复。霍维夫
 a - DELETE existing record, then INSERT imported record
 b - UPDATE existing record from imported record