适用于:✅Microsoft Fabric 中的 SQL 数据库
在本教程中,你将了解如何处理 Fabric SQL 数据库中的 SqlPackage。
SqlPackage 是一种 CLI,提供数据库可移植性和数据库部署。
- 在 Azure 或 Fabric 中托管的数据库的可移植性(导入/导出)可确保以后要迁移的数据可移植到其他平台。 - 可移植性包括通过独立数据库副本(
.bacpac
或.dacpac
文件)在 SQL Server、Azure SQL 数据库、Azure SQL 托管实例以及在 Fabric 中的 SQL 数据库之间移动。
SqlPackage 还可以轻松实现对数据库对象的增量更改部署(例如,在表中添加新列、修改现有存储过程等)。
- SqlPackage 可以提取包含数据库中对象定义的
.dacpac
文件,并发布.dacpac
文件,将该对象状态应用到新的或现有的数据库。 - 发布操作还与 SQL 项目集成,支持 SQL 数据库的离线和更动态的开发周期。
先决条件
- 需要现有的 Fabric 容量。 如果没有,请启动 Fabric 试用版。
- 确保启用 Fabric SQL 数据库租户设置。
- 创建新的工作区或使用现有的 Fabric 工作区。
- 创建或使用现有的 Fabric SQL 数据库。 如果没有,请创建新的 Fabric SQL 数据库。
- 安装 .NET 8 SDK。
安装
SqlPackage 作为 dotnet 工具适用于 Windows、macOS 和 Linux。 可以使用以下命令安装它:
dotnet tool install --global Microsoft.SqlPackage
作为一个全局 dotnet 工具,SqlPackage 在终端中作为任何文件夹中的 sqlpackage
提供。
使用 SqlPackage 导入数据库
.bacpac
是数据库的一个可移植副本,适用于某些迁移和测试场景。 你可以将该 导入到一个空的 SQL 数据库。.bacpac
注意
.bacpac
不是备份,也不是备份/还原功能的替代项。 有关 Fabric 中 SQL 数据库的备份的详细信息,请参阅 Microsoft Fabric 中的 SQL 数据库中的自动备份 ,以及 从 Microsoft Fabric 中的 SQL 数据库中的备份还原。
如果使用来自 Azure 或 SQL Server 环境的
.bacpac
,可能需要更改源数据库以确保其符合 Fabric T-SQL 功能范围内的 SQL 数据库。 有关允许 SqlPackage 属性跳过某些不受支持的对象的替代方法,请参阅 提取和发布可移植性 。像往常一样,通过 Fabric 界面在 Fabric 中创建新的 SQL 数据库。
从设置中复制连接字符串。
从终端使用 sqlpackage 文件夹中的 import 命令。 提供你的所有者
<servername>
和<database_name>
。sqlpackage /action:import /sourcefile:"C:\DatabaseName.bacpac" /targetconnectionstring:"Data Source=tcp:<server_name>.database.fabric.microsoft.com,1433;Initial Catalog=<database_name>;MultipleActiveResultSets=False;Connect Timeout=30;Encrypt=True;TrustServerCertificate=False;ConnectRetryCount=6;ConnectRetryInterval=10;Authentication=Active Directory Interactive"
- 从 SQL 数据库设置对话框中替换连接字符串。
- 将
sourcefile
值替换为本地计算机上的.bacpac
名称 (DatabaseName
) 和___location
。
有关导入的详细信息,请参阅 SqlPackage 导入。
使用 SqlPackage 导出数据库
导出 .bacpac
是反向操作,其中 targetfile
是 .bacpac
,sourceconnectionstring
可以在 SQL 数据库设置对话框中找到,如前面的示例所示。 提供你的所有者 <servername>
和 <database_name>
。 例如:
sqlpackage /action:export /targetfile:"C:\DatabaseName.bacpac" /sourceconnectionstring:"Data Source=tcp:<server_name>.database.fabric.microsoft.com,1433;Initial Catalog=<database_name>;MultipleActiveResultSets=False;Connect Timeout=30;Encrypt=True;TrustServerCertificate=False;ConnectRetryCount=6;ConnectRetryInterval=10;Authentication=Active Directory Interactive"
有关导出的详细信息,请参阅 SqlPackage 导出。
提取并发布
.dacpac
是一个数据库架构模型文件,其中包含源数据库中表、存储过程和其他对象的定义。 可以使用 SqlPackage 或 SQL 数据库项目从现有数据库创建此文件。
SqlPackage 能够将 .dacpac
部署到新的(空)数据库或以增量方式更新现有数据库以匹配所需的 .dacpac
状态。
-
提取从现有数据库创建
.dacpac
或 sql 文件。 -
发布将
.dacpac
部署到数据库。
SqlPackage 的发布和提取语法类似于导入/导出命令。
警告
建议使用 SqlPackage 将 SQL 项目或 .dacpac
部署到 Fabric 中的 SQL 数据库。 从 Visual Studio 部署 .dacpac
可能不会成功。
若要部署从 Azure SQL 数据库、SQL Server 或针对 Fabric 中非 SQL 数据库平台的 SQL 项目创建的 .dacpac
,请将属性 /p:AllowIncompatiblePlatform=true
添加到 SqlPackage 发布命令中。
将可移植性内容提取和发布
虽然 SqlPackage 导入/导出命令关注使用.bacpac
格式的数据可移植性,但提取和发布命令能够实现使用.dacpac
格式的数据可移植性。 提取和发布属性可用于控制提取和发布作的行为,并为平台之间的转换提供更大的灵活性。
若要提取.dacpac
和包含数据,请使用/p:ExtractAllTableData=true
属性。 提取操作创建一个.dacpac
,其中包含源数据库中的架构和数据。 该属性 /p:ExtractReferencedServerScopedElements=false
不包括在 Fabric 中的 SQL 数据库中不支持的服务器范围元素。 以下命令从 Fabric 中的现有 SQL 数据库中提取包含数据的 .dacpac
。
sqlpackage /action:extract /sourceconnectionstring:"Data Source=tcp:<server_name>.database.fabric.microsoft.com,1433;Initial Catalog=<database_name>;MultipleActiveResultSets=False;Connect Timeout=30;Encrypt=True;TrustServerCertificate=False;ConnectRetryCount=6;ConnectRetryInterval=10;Authentication=Active Directory Interactive" /targetfile:"C:\extracted.dacpac" /p:ExtractAllTableData=true /p:ExtractReferencedServerScopedElements=false
若要 发布 从数据中提取的 .dacpac
,无需额外的属性。 但是,可以使用多个属性来控制发布作的行为:
-
/p:AllowIncompatiblePlatform=true
允许部署从其他平台(例如 Azure SQL 数据库、SQL Server)提取的.dacpac
。 -
/p:ExcludeObjectTypes=Logins;Users
排除在 Fabric 中发布到 SQL 数据库时可能会遇到兼容性问题的对象类型。 有关可排除的对象类型的完整列表,请参阅 SqlPackage 发布。
与 SqlPackage 导入命令类似,在发布到 Fabric 中的 SQL 数据库之前 .dacpac
,需要在 Fabric 中创建数据库。 可以通过 Fabric 门户或其他 Fabric 接口创建数据库。 以下命令将提取出的 .dacpac
发布到 Fabric 中的空 SQL 数据库:
sqlpackage /action:publish /sourcefile:"C:\extracted.dacpac" /targetconnectionstring:"Data Source=tcp:<server_name>.database.fabric.microsoft.com,1433;Initial Catalog=<database_name>;MultipleActiveResultSets=False;Connect Timeout=30;Encrypt=True;TrustServerCertificate=False;ConnectRetryCount=6;ConnectRetryInterval=10;Authentication=Active Directory Interactive" /p:AllowIncompatiblePlatform=true /p:ExcludeObjectTypes=Logins;Users