将 Access 数据库迁移到 SQL Server

您所在的位置:网站首页 access无法导入数据 将 Access 数据库迁移到 SQL Server

将 Access 数据库迁移到 SQL Server

2023-10-22 22:25| 来源: 网络整理| 查看: 265

我们都有限制,Access 数据库也不例外。 例如,Access 数据库的大小限制为 2 GB,不能支持超过 255 个并发用户。 因此,当 Access 数据库可以转到下一级别时,可以迁移到 SQL Server。 SQL Server (无论是在本地还是 Azure 云中) 都支持大量数据、更多的并发用户,并且其容量比 JET/ACE 数据库引擎更大。 本指南可让你顺利开始开发SQL Server,有助于保留所创建的 Access 前端解决方案,并且希望鼓励你将 Access 用于将来的数据库解决方案。 更新大小向导已从 Access 2013 中的 Access 中删除,因此现在可以使用 Microsoft SQL Server 迁移助手 (SSMA) 。 若要成功迁移,请遵循以下阶段。

数据库迁移到数据库的SQL Server 准备工作

以下部分提供背景和其他信息,以帮助你入门。

关于拆分数据库

所有 Access 数据库对象都可以在一个数据库文件中,也可以存储在两个数据库文件中:前端数据库和后端数据库。 这称为 拆分数据库, 旨在便于在网络环境中共享。 后端数据库文件只能包含表和关系。 前端文件必须仅包含所有其他对象,包括窗体、报表、查询、宏、VBA 模块以及后端数据库的链接表。 迁移 Access 数据库时,它类似于拆分数据库,SQL Server充当现在位于服务器上的数据的新后端。

因此,仍可以使用链接表维护前端 Access 数据库,SQL Server表。 实际上,可以受益于 Access 数据库提供的快速应用程序开发,以及 SQL Server。

SQL Server优势

仍然需要一些了解,以迁移到SQL Server? 下面是一些可考虑的其他优势:

更多并发用户    SQL Server可以处理比 Access 更多的并发用户,并可在添加更多用户时最大程度地减少内存需求。

提高可用性    使用SQL Server,可以在数据库使用时动态备份(增量备份或完整备份)。 因此,不必强制使用户退出数据库即可备份数据。

高性能和可伸缩性    此SQL Server数据库的性能通常比 Access 数据库更好,尤其是对于大小为 TB 的大型数据库。 此外,SQL Server并行处理查询,在单个进程中使用多个本机线程来处理用户请求,可以更快、更高效地处理查询。

提高了安全性    使用受信任的连接,SQL Server Windows 系统安全性集成,以提供对网络和数据库的单一集成访问,同时利用这两个安全系统的最佳功能。 这样,管理复杂的安全方案就容易得多。 SQL Server是敏感信息(如身份证号、信用卡数据和机密地址)的理想存储。

即时可恢复性     如果操作系统崩溃或断电,SQL Server数分钟内自动将数据库恢复到一致状态,无需数据库管理员干预。

VPN 的使用    无法访问 VPN (虚拟网络) 无法访问。 但是SQL Server,远程用户仍可以使用桌面上的 Access 前端数据库,以及SQL SERVER位于 VPN 防火墙后面的后端。

Azure SQL Server    除了云解决方案的好处SQL Server,无需停机、智能优化、全局可伸缩性和可用性、消除硬件成本并减少管理。

选择最佳 Azure SQL Server选项

如果要迁移到 Azure SQL Server,有三个选项可供选择,每个选项都有不同的优势:

单一数据库/弹性池    此选项具有其自己的一组通过数据库数据库服务器SQL资源。 单一数据库与单个数据库中的包含SQL Server。 还可以添加弹性池,弹性池是通过数据库服务器管理的共享资源集SQL集合。 最常用的备份SQL Server内置备份、修补和恢复功能。 但是,无法保证确切的维护时间,并且从 SQL Server迁移可能很难。

托管实例    此选项是具有一组共享资源的系统和用户数据库的集合。 托管实例与本地SQL Server高度兼容的 SQL Server实例。 托管实例具有内置的备份、修补和恢复,并且可以轻松从 SQL Server。 但是,有少量的SQL Server功能不可用,无法保证确切的维护时间。

Azure 虚拟机    此选项允许在 Azure SQL Server虚拟机内部运行运行。 可以完全控制SQL Server和简单的迁移路径。 但需要管理备份、修补程序和恢复。

有关详细信息,请参阅"选择 Azure 的数据库迁移路径 "和"在 Azure SQL Server适当的迁移选项。

第一步

在运行 SSMA 之前,可以先解决几个有助于简化迁移过程的问题:

添加表索引和主键    确保每个 Access 表都有索引和主键。 SQL Server要求所有表至少有一个索引,并且如果可以更新表,则要求链接表具有主键。

检查主键/外键关系    确保这些关系基于数据类型和大小一致的字段。 SQL Server外键约束中数据类型和大小不同的联接列。

删除"附件"列    SSMA 不迁移包含附件列的表。

运行 SSMA 之前,请执行以下步骤。

关闭 Access 数据库。

确保连接到数据库的当前用户也关闭数据库。

如果数据库采用.mdb 文件格式,则删除用户级安全性。

备份数据库。 有关详细信息,请参阅"使用备份和还原过程保护数据"。

提示    请考虑在 桌面上安装 Microsoft SQL Server Express 版本,该版本支持高达 10 GB,是一种免费且更易于运行和检查迁移的方法。 连接时,请使用 LocalDB 作为数据库实例。

提示    如果可能,请使用独立的 Access 版本。 如果只能使用 Microsoft 365 ,请使用 Access 2010 数据库引擎在使用 SSMA 时迁移 Access 数据库。 有关详细信息,请参阅Microsoft Access 数据库引擎 2010 Redistributable。

运行 SSMA

Microsoft 提供了 Microsoft SQL Server助手 (SSMA) 简化迁移。 SSMA 主要迁移表并选择没有参数的查询。 窗体、报表、宏和 VBA 模块不会转换。 元数据SQL Server资源管理器显示 Access 数据库对象和SQL Server对象,以便查看这两个数据库的当前内容。 如果你决定在将来传输其他对象,这两个连接将保存在迁移文件中。

注意    迁移过程可能需要一些时间,具体取决于数据库对象的大小和必须传输的数据量。

若要使用 SSMA 迁移数据库, 请首先通过 双击下载的 MSI 文件下载并安装软件。 请确保为计算机安装相应的 32 或 64 位版本。

安装 SSMA 后,在桌面上打开它,最好从具有 Access 数据库文件的计算机中打开它。

还可以在从共享文件夹中的网络访问 Access 数据库的计算机上打开它。

按照 SSMA 中的开始说明提供基本信息,例如 SQL Server 位置、要迁移的 Access 数据库和对象、连接信息以及是否要创建链接表。

如果要迁移到 2016 SQL Server或更高版本,并且想要更新链接表,请通过选择"审阅工具">"项目设置"或"常规"> rowversion列。

rowversion 字段有助于避免记录冲突。 Access 在链接SQL Server使用此 rowversion 字段来确定记录上次更新的时间。 此外,如果将 rowversion 字段添加到查询,Access 会使用它在更新操作后重新选择该行。 这可以通过帮助避免写入冲突错误和记录删除方案(当 Access 检测到与原始提交不同的结果时(例如,浮点数数据类型和修改列的触发器可能发生)时发生,来提高效率。 但是,请避免在窗体、报表或 VBA 代码中使用 rowversion 字段。 有关详细信息,请参阅 rowversion。

注意    避免将 rowversion 与时间戳混淆。 虽然关键字时间戳是 SQL Server 中 rowversion 的同义词,但无法将 rowversion 用作数据输入的时间戳。

若要设置精确的数据类型,请选择"审阅工具">"项目设置">类型映射"。 例如,如果只存储英语文本,可以使用 varchar 而不是 nvarchar 数据类型。

转换对象

SSMA 将 Access 对象SQL Server对象,但它不会马上复制对象。 SSMA 提供要迁移的以下对象的列表,以便你可以决定是否要将它们移到SQL Server数据库:

表和列

选择不带参数的查询。

主键和外键

索引和默认值

检查限制 (允许零长度列属性、列验证规则、表验证)

最佳做法是使用 SSMA 评估报告,该报告显示转换结果,包括错误、警告、信息消息、执行迁移的时间估计,以及实际移动对象之前要执行的错误更正步骤。

转换数据库对象会从 Access 元数据获取对象定义,将它们转换为等效 的 Transact-SQL (T-SQL) 语法,然后将此信息加载至项目中。 然后,可以使用 SQL Server 或 SQL Azure 元数据资源管理器来查看SQL Server或SQL Azure属性。

若要将对象转换、加载和迁移到 SQL Server,请遵循本指南。

提示    成功迁移 Access 数据库后,请保存项目文件供以后使用,以便可以再次迁移数据以进行测试或最终迁移。

链接表

请考虑安装最新版本的 SQL Server OLE DB 和 ODBC 驱动程序,而不是使用随 Windows SQL Server本机驱动程序。 不仅较新的驱动程序速度更快,而且还支持 Azure SQL驱动程序所不支持的新功能。 可以在使用转换后的数据库的每台计算机中安装驱动程序。 有关详细信息,请参阅适用于 SQL Server的 Microsoft OLE DB 驱动程序 18 和适用于 SQL Server 的 Microsoft ODBC 驱动程序 17。

迁移 Access 表后,可以链接到现在SQL Server托管数据的表。 直接从 Access 进行链接还提供了一种更简单的方式来查看数据,而不是使用更复杂的SQL Server管理工具。  根据数据库管理员设置的权限,可以查询和编辑SQL Server 数据。

注意    如果在链接过程中链接到 SQL Server 数据库时创建 ODBC DSN,请使用新应用程序的所有计算机上创建相同的 DSN,或者以编程方式使用 DSN 文件中存储的连接字符串。

有关详细信息,请参阅 "链接到 Azure 数据库或从 Azure SQL Server导入数据,以及导入或链接到 SQL Server 数据库中的数据。

提示   不要忘记使用 Access 中的链接表管理器方便地刷新和重新链接表。 有关详细信息,请参阅"管理链接表"。

测试和修订

以下部分介绍迁移期间可能会遇到的常见问题,以及如何解决这些问题。

查询

仅转换选择查询;其他查询则不是,包括选择接受参数的查询。 某些查询可能无法完全转换,并且 SSMA 在转换过程中报告查询错误。 可以手动编辑使用 T-SQL转换的对象。 语法错误可能还需要手动将特定于 Access 的函数和数据类型转换为SQL Server类型。 有关详细信息,请参阅将 Access SQL 与 SQL Server TSQL 进行比较。

数据类型

Access 和 SQL Server具有类似的数据类型,但请注意以下潜在问题。

大数    大数数据类型存储非货币的数值,并且与大数SQL兼容数据类型。 可以使用此 数据类型 高效计算大数,但需要使用 Access 16 (16.0.7812 或更高版本) .accdb 数据库文件格式,并且使用 64 位版本的 Access 时性能更好。 有关详细信息,请参阅"使用大数 "数据类型 64 位或 32 位版本的 Office 之间选择。

是/否    默认情况下,Access"是/否"列将转换为SQL Server字段。 为了避免记录锁定,请确保将位字段设置为不允许 NULL 值。 在 SSMA 中,可以选择位列,将 Allow Nulls 属性设置为 NO。 在 TSQL 中,使用 CREATE TABLE 或 ALTER TABLE 语句。

日期和时间    有几个日期和时间注意事项:

如果数据库的兼容级别为 2016 (SQL Server 2016) 或更高版本,并且链接表包含一个或多个日期时间或 datetime2 列,则表可能会返回结果#deleted消息。 有关详细信息,请参阅Access 链接表,SQL-Server数据库返回#deleted。

使用 Access 日期/时间数据类型映射到日期/时间数据类型。 使用 Access Date/Time Extended 数据类型映射到具有较大日期和时间数据类型日期/时间范围的datetime2。 有关详细信息,请参阅"使用日期/时间已延长"数据类型。

在查询查询SQL Server时,请考虑时间和日期。 例如:

19/1/1 和 1/31/19 之间的 DateOrdered 可能不包含所有订单。

DateOrdered Between 1/1/19 00:00:00 AM and 1/31/19 11:59:59 PM 确实包括所有订单。

附件   附件数据类型 Access 数据库中存储文件。 在SQL Server中,有几个选项需要考虑。 可以从 Access 数据库提取文件,然后考虑将指向文件的链接存储在 SQL Server 数据库中。 或者,可以使用 FILESTREAM、FileTables 或远程 BLOB 存储 (RBS) 将附件存储在 SQL Server 数据库中。

超链接    Access 表包含不支持SQL Server的超链接列。 默认情况下,这些列将转换为 nvarchar () SQL Server,但你可以自定义映射以选择较小的数据类型。 在 Access 解决方案中,如果将控件的 Hyperlink 属性设置为 true,则仍然可以在窗体和报告中使用超链接行为。

多值字段    Access 多值字段将转换为SQL Server值集的 ntext 字段。 由于 SQL Server 不支持模拟多对多关系的多值数据类型,因此可能需要进行额外的设计和转换工作。

有关映射 Access 和 SQL Server数据类型的信息,请参阅"比较数据类型"。

注意    多值字段不会转换,在 Access 2010 中已停用。

有关详细信息,请参阅日期和时间类型、字符串和二进制类型以及数字类型。

Visual Basic

尽管 VBA 不受 SQL Server,但请注意以下可能的问题:

查询中的 VBA 函数    Access 查询支持对查询列中的数据使用 VBA 函数。 但是,使用 VBA 函数的 Access 查询不能在 SQL Server 运行,因此所有请求的数据都传递给 Microsoft Access 进行处理。 在大多数情况下,这些查询应转换为 传递查询。

查询中的用户定义函数    Microsoft Access 查询支持使用 VBA 模块中定义的函数处理传递给它们的数据。 查询可以是独立查询、SQL/报表记录源中的语句、窗体、报表和表字段上组合框和列表框的数据源,以及默认或验证规则表达式。 SQL Server运行这些用户定义的函数。 可能需要手动重新设计这些功能,并将其转换为存储SQL Server。

优化性能

到目前为止,使用新的后端查询优化性能SQL Server决定何时使用本地或远程查询。 将数据迁移到 SQL Server时,还会从文件服务器迁移到客户端-服务器数据库计算模型。 遵循以下一般准则:

在客户端上运行小型只读查询,以便快速访问。

在服务器上运行长时读/写查询,以利用更高的处理能力。

使用筛选器和聚合最大程度地减少网络流量,以便仅传输所需的数据。

优化客户端服务器数据库模型中的性能

有关详细信息,请参阅"创建传递查询"。

下面是其他建议的准则。

在服务器上放入逻辑     应用程序还可使用视图、用户定义的函数、存储过程、计算字段和触发器来集中和共享应用程序逻辑、业务规则和策略、复杂查询、数据验证和引用完整性代码,而不是在客户端上。 问问自己,能否更好更快地在服务器上执行此查询或任务? 最后,测试每个查询以确保最佳性能。

在窗体和报告中使用视图    在 Access 中,执行以下操作:

对于窗体,SQL只读窗体使用只读视图,将SQL/写入窗体的索引视图用作记录源。

对于报表,请使用SQL视图作为记录源。 但是,请为每个报表创建单独的视图,以便更轻松地更新特定报表,而不会影响其他报表。

最大程度减少在窗体或报表加载数据    在用户要求之前不显示数据。 例如,将 recordsource 属性留空,让用户在窗体上选择筛选器,然后使用筛选器填充 recordsource 属性。 或者,使用 DoCmd.OpenForm 和 DoCmd.OpenReport 的 where 子句 (用户所需的) 记录。 请考虑关闭记录导航。

使用异类查询时请小心   避免运行合并本地 Access 表和SQL Server表(有时称为混合查询)的查询。 这种类型的查询仍然需要 Access 将所有 SQL Server 数据下载到本地计算机,然后运行查询,它不会在 SQL Server 中运行查询。

何时使用本地表    请考虑对很少更改的数据使用本地表,例如一个国家/地区或地区的省/自治区/直辖市列表。 静态表通常用于筛选,在 Access 前端上可以更好地执行。

有关详细信息,请参阅数据库引擎优化顾问、使用性能分析器优化Access数据库,以及优化链接到 Microsoft Office 的Access SQL Server。

另请参阅

Azure 数据库迁移指南http://datamigration.microsoft.com/

Microsoft 数据迁移博客

Microsoft Access SQL Server迁移、转换和大小调整https://www.fmsinc.com/consulting/sqlserverupsizing.aspx

共享 Access 桌面数据库的方法



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3