使用 SSMA 将 Access 2007 数据库应用程序迁移到 SQL Server 2005 - 问题

Posted

技术标签:

【中文标题】使用 SSMA 将 Access 2007 数据库应用程序迁移到 SQL Server 2005 - 问题【英文标题】:Migrate Access 2007 Database Application to SQL Server 2005 using SSMA - Issues 【发布时间】:2009-03-02 02:36:57 【问题描述】:

我已经设法在我的计算机上启动并运行 SQL Server 2005 Express,以便在“真实世界”中尝试之前进行一些测试。

我有一个相当大的 MS Access 2007 数据库应用程序,我需要迁移到 SQL Server 保留“前端”作为用户界面。 (该应用程序已经是一个“拆分”数据库 有前端和后端......)

我已经对使用 SSMA 将我的 Access 数据库迁移到 SQL 进行了一些初步测试 服务器快递。

显然我不明白一些事情,我想我会看看是否有人知道 任何想法。

从概念上讲,我认为需要发生的是 驻留在需要迁移到 SQL Server 的服务器上的数据库 然后前端重新链接到后端中的(现在链接到 SQL)表。

当我使用 SSMA 执行此操作时,我最终会在后端重命名表 访问类似于“SSMA$myTableNameHere$local”的文件。我也 获取下面显示为 ODBC 链接表的原始表名。

到目前为止一切顺利。

但是....当我从 FRONT END 重新建立链接表时( 用户界面)我能看到的只是“SSMA$myTableNameHere$local”名称 原始表名。(现在通过 ODBC 链接) 我可以链接到“SSMA,,,”表,但这意味着更改 每个查询中的每个表,每个表单和前面的所有代码 结尾!不是我真正想做的事情。

所以....

我想我会尝试迁移 FRONT END 看看会发生什么。

我最终得到的是一种情况,基本上它可以工作(有 一些我还没有看过的严重错误和问题......比如 丢失数据等!!!!)我仍然得到“SSMA$myTableNameHere$local” 表和具有原始名称的 ODBC 链接表。

我试图理解......这是否意味着我们会这样做 在前端迁移,然后将相同的文件复制到每个用户的 电脑?

我有点困惑的另一个主题是我无法通过 ODBC 进行链接 到本地机器(即我的电脑)上的 SQL Server Express,所以我无法测试 迁移后端,然后像我一样通过前端链接到表 过去更多地是在客户端/服务器的情况下。

【问题讨论】:

Wisemonkey,你可能应该回答第二个问题,并给它一个单独的问题,可以回答它。 【参考方案1】:

假设 SSMA 用指向 SQL Server 的链接替换您后端的表,您所需要做的就是删除 您的前端中的原始表链接并导入新创建的表链接从后端。然后您可以丢弃后端,因为它不再用于任何用途。

【讨论】:

是的。现在我可以通过 ODBC 连接到 SQL Server,这很有意义。从前端链接到表名后,我必须从表名中删除一些字符,这样我的应用程序才能工作,但现在一切似乎都正常。感谢您的帮助。【参考方案2】:

我确实使用 ODBC.Instruction 将所有表从 Access DB 后端一一传输到 SQL Server 2005: 开放存取数据库(后端) 右键表,需要转移 向下滚动下拉框并选择 ODBC 数据库 选择数据源对话框打开,单击“新建”按钮 新建数据源对话框打开 滚动到底部并选择 SQL Server,单击下一步 为您的数据源命名,单击下一步,单击完成 创建新数据源对话框打开 给出一些描述或留空,键入 SQL Server 的名称(在您的机器上安装 SQL Server 时,您命名它) 点击下一步,点击下一步 选中“将默认数据库更改为复选框 选择您要将数据传输到的数据库 点击下一步,点击完成 注意:在执行所有这些操作之前,您需要在 SQL Server 上创建新数据库(空) 现在:右键单击任何表,选择导出,从下拉列表中选择 ODBC,从数据源窗口中选择您的数据源,您已创建,单击确定 将 SQL Server 与 SQL Management Studio Express 一起使用。 所有日期都必须有输入掩码;所有文本和备注必须允许零长度 = 是 毕竟从Access后端断开所有链接,并从SQL.RENAME所有新链接的表到旧名称建立链接。使用前端用户界面,直到做一些新的。

【讨论】:

使用为此目的设计的工具要容易得多。迄今为止最好的一款是 SQL Server Migration Assistant for Access。我很确定它可以升级到 SQL Server 2008 和 2005。它允许您测试升级并查看哪些错误,以便您可以在更新之前更正源数据。【参考方案3】:

请原谅我对 Acronym Soup 的了解不足,但我假设 SSMA 是 SQL Server 2005“导入数据向导”或 Access 中用于将数据发送到 SQL Server 的向导。您似乎从 Access 将数据发送到 SQL Server - 这是您不想做的事情。您想使用 SQL Server 中的 DTS(现在称为 SSIS 什么的?)将数据导入 SQL Server。然后,您将在 SQL Server 中拥有您的表。然后,只需为 SQL Server 创建您的 DSN 条目并重新链接您的表。一切都应该很好。

总的来说,一般规则是使用 SQL Server 导入 Access 表,而不是使用 Access 将数据发送到 SQL Server。

【讨论】:

SSMA 是“SQL Server 迁移助手”。在这种情况下,我使用了为将 Access Db 迁移到 SQL Server 而设计的那个。我的问题的根源是我无法让 ODBC 数据源连接到本地计算机上的 SQL srver。现在我已经解决了其余的问题。 Tx 4 你的帮助。【参考方案4】:

我会咬紧牙关,将 SQLServer 端的表重命名为原始数据库中的友好名称。你可能会遇到更少的问题。特别是如果您在 MS Access 端有任何嵌入式代码。

至于您现在将如何部署 MS Access 端,应该是在用户的工作站上创建 ODBC 链接,然后将 MS Access 文件复制到他们的桌面(尽管您可能想要制作 MDE(或2007 版)以防止他们意外破坏它)。

【讨论】:

【参考方案5】:

坦率地说,既然您已经迁移,您需要查看表的设计。根据我的经验,Access 迁移向导在选择正确的数据类型方面做得很差。例如,如果您有一个备注字段,您可能很容易改用 varchar 字段,但我使用的最后一个向导(早期版本)总是将它们转换为文本字段。如果您过去犯过这个错误,现在也是考虑一些修复的时候了,例如将日期文件设置为日期时间而不是基于字符。

在经历过他们做得非常糟糕之后,我永远不会考虑再次使用向导进行数据迁移。

您还会发现,仅仅将数据转换为 SQL Server 通常不足以真正获得任何性能优势。您将需要测试所有查询并考虑是否可以将它们转换为存储过程,而不是如果它们很慢。消除从 Jet SQL 到 T-sql 的转换可以提高性能。另外,t-sql 的许多功能可以提高没有 Access 等效项的性能。 Access 在性能调整方面并不重要,但要获得使用 SQL Server 后端进行性能调整的好处,您需要编写 SQL Server 特定的查询。如果 Access 表没有正确索引,则需要考虑索引。

【讨论】:

【参考方案6】:

使用 odbc 时使用 SSMA 是不同的。如果您的应用程序使用完全访问(后端和前端)。您可以轻松地操作对象绑定表单,使用DAO等。没有问题,然后当您需要将数据库迁移到sql server时,您可以直接使用odbc(通过将自己的表链接到sql server),ssma,...主要问题如何在客户端保留有界表单、查询和代码。 如果您直接使用 odbc,您必须自己重新链接所有对象并更改代码,但如果您使用 ssma,您无需执行任何操作,您将继续像以前一样工作。 SSMA 的问题是,如果您在其他地方使用另一个 sql server 开发客户端,如何将前端部署到客户端?

【讨论】:

以上是关于使用 SSMA 将 Access 2007 数据库应用程序迁移到 SQL Server 2005 - 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SSMA(用于访问 SQL Server)将具有不同列的表迁移到现有表中?

用于 Access 的 SQL Server 迁移助手:日期数据类型

将 Oracle 表链接到 Access 2007 文件(性能)

如何在 C# 中使用 Access 2007 链接表管理器

MS Access:Access 2016 应用程序能否与 Access 2007 一起使用?

Powershell 与 Access 2007 的交互,如何将报告另存为 PDF?