Microsoft Fabric SQL 数据库的 SqlPackage

适用于:✅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 数据库的离线和更动态的开发周期。

先决条件

安装

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 数据库中的备份还原

  1. 如果使用来自 Azure 或 SQL Server 环境的 .bacpac,可能需要更改源数据库以确保其符合 Fabric T-SQL 功能范围内的 SQL 数据库。 有关允许 SqlPackage 属性跳过某些不受支持的对象的替代方法,请参阅 提取和发布可移植性

  2. 像往常一样,通过 Fabric 界面在 Fabric 中创建新的 SQL 数据库

  3. 从设置中复制连接字符串。

    来自 Fabric 门户的屏幕截图,其中显示了 SQL 数据库的连接字符串页。

  4. 从终端使用 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.bacpacsourceconnectionstring 可以在 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 导出

提取并发布

示意图显示了 SQL 数据库项目如何移动架构更改。

.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