你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用专用链接导入或导出 Azure SQL 数据库

适用于:Azure SQL 数据库

本文介绍如何在 Azure SQL 逻辑服务器上将“允许访问 Azure 服务”设置为“关闭”的情况下,使用专用链接导入或导出 Azure SQL 数据库。

运行导入或导出要求将 允许访问 Azure 服务 设置为 ON,否则导入或导出操作将失败并出现错误。

注意

使用专用链接导入/导出 Azure SQL 数据库的功能目前以预览版提供。

数据库导入/导出专用链接是由Microsoft创建的由服务管理的专用终结点。 启用后,专用链接专门用于数据库导入/导出过程、Azure SQL 数据库和相关 Azure 存储服务的所有通信。 服务托管的专用终结点是特定虚拟网络和子网中的专用 IP 地址。

必须在单独的步骤中为 Azure SQL 逻辑服务器和 Azure Blob 存储帐户手动批准专用终结点,本教程中包括详细信息。

“导入/导出专用链接”体系结构的屏幕截图。

可以通过 Azure 门户、PowerShell 或使用 REST API 配置导入/导出专用链接。

需要启用和批准导入专用链接。 在 Azure 中创建专用链接是自动完成的。

  1. 转到要在其中导入数据库的 Azure SQL 逻辑服务器的“概述”页。 从工具栏中选择“导入数据库”。
  2. 在“导入数据库”页中,选中“使用专用链接”选项复选框。
  3. 输入存储帐户、身份验证凭据、数据库详细信息,然后选择“确定”。

需要启用和批准导出专用链接。 创建专用链接在 Azure 中是自动执行的。

  1. 转到要导出的 Azure SQL 数据库的“概述”页。 从工具栏中选择“导出”。
  2. 在“导出数据库”页中,选中“使用专用链接”选项复选框。
  3. 输入存储帐户、身份验证凭据、数据库详细信息,然后选择“确定”。

新的专用终结点必须由专用链接中心或 Azure SQL 数据库中的用户批准,或者可以在各自的 Azure 门户位置单独批准这两个专用链接。

  1. 在 Azure 门户中导航到专用链接中心。 在 Azure 搜索框中,搜索“专用链接”。 选择 专用链接

  2. 在专用链接中心,选择 延迟的连接

  3. 选择使用导入/导出服务创建的两个专用终结点。 选择 批准

    Azure 门户专用链接中心的屏幕截图,其中显示了如何批准这两个专用链接。

选项 2:在 Azure 门户中单独批准专用终结点连接

  1. 转到托管数据库的 Azure SQL 逻辑服务器。

  2. 在“安全”下的“资源”菜单中,选择 网络

  3. 选择“专用访问”选项卡。

  4. 专用终结点连接下的列表中,选择使用导入/导出服务创建的专用终结点。

  5. 选择“批准”。

    Azure 门户的屏幕截图,其中显示了如何批准 Azure SQL 数据库专用链接。

  6. 转到托管了包含 BACPAC (.bacpac) 文件的 Blob 容器的存储帐户。

  7. 安全 + 网络下,选择 网络

  8. 选择 专用终结点连接 选项卡。

  9. 在列表中,选择导入/导出服务的专用终结点。

  10. 选择“批准”以批准连接。

    Azure 门户的屏幕截图,其中显示了如何批准 Azure 存储中的 Azure 存储专用链接。

3.检查导入/导出状态

  1. 在 Azure SQL 服务器和 Azure 存储帐户中批准专用终结点后,将启动数据库导入或导出作业。 在此之前,这些作业处于暂停状态。
  2. 可以在“Azure SQL Server”页的“数据管理”部分下的“导入/导出历史记录”页中检查数据库导入或导出作业的状态。 Azure 门户的屏幕截图,其中显示了如何检查导入/导出作业状态。

使用 New-AzSqlDatabaseImport cmdlet 向 Azure 提交导入数据库请求。 根据数据库大小,导入操作可能需要一些时间才能完成。 基于 DTU 的预配模型支持为每个层选择数据库最大大小值。 导入数据库时,使用 Azure SQL 数据库支持的版本和服务目标值。

在以下 PowerShell 代码示例中提供自己的 <values>,该示例导入名为 sample.bacpac 的 .bacpac 文件,并创建包含 2 个常规用途 vCore 的 Azure SQL 数据库。

$importRequestParams = @{
   ResourceGroupName                   = "<resourceGroupName>"
   ServerName                          = "<serverName>"
   DatabaseName                        = "<databaseName>"
   DatabaseMaxSizeBytes                = "<databaseSizeInBytes>"
   StorageKeyType                      = "StorageAccessKey"
   StorageKey                          = $(Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -StorageAccountName "<storageAccountName>").Value[0]
   StorageUri                          = "https://myStorageAccount.blob.core.windows.net/importsample/sample.bacpac"
   Edition                             = "GeneralPurpose"
   ServiceObjectiveName                = "GP_Gen5_2"
   UseNetworkIsolation                 = $true
   StorageAccountResourceIdForPrivateLink = "/subscriptions/<subscriptionId>/resourceGroups/<resource_group_name>/providers/Microsoft.Storage/storageAccounts/<storage_account_name>"
   SqlServerResourceIdForPrivateLink   = "/subscriptions/<subscriptionId>/resourceGroups/<resource_group_name>/providers/Microsoft.Sql/servers/<server_name>"
   AdministratorLogin                  = "<userID>"
   AdministratorLoginPassword          = $(ConvertTo-SecureString -String "<password>" -AsPlainText -Force)
}

$importRequest = New-AzSqlDatabaseImport @importRequestParams

使用 New-AzSqlDatabaseExport cmdlet 向 Azure SQL 数据库服务提交导出数据库请求。 根据数据库的大小,导出操作可能需要一些时间才能完成。

在以下 PowerShell 代码示例中提供自己的 <values>

$exportRequestParams = @{
   ResourceGroupName                   = "<resourceGroupName>"
   ServerName                          = "<serverName>"
   DatabaseName                        = "<databaseName>"
   StorageKeyType                      = "StorageAccessKey"
   StorageKey                          = $(Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -StorageAccountName "<storageAccountName>").Value[0]
   StorageUri                          = "https://myStorageAccount.blob.core.windows.net/importsample/sample.bacpac"
   UseNetworkIsolation                 = $true
   StorageAccountResourceIdForPrivateLink = "/subscriptions/<subscriptionId>/resourceGroups/<resource_group_name>/providers/Microsoft.Storage/storageAccounts/<storage_account_name>"
   SqlServerResourceIdForPrivateLink   = "/subscriptions/<subscriptionId>/resourceGroups/<resource_group_name>/providers/Microsoft.Sql/servers/<server_name>"
   AdministratorLogin                  = "<userID>"
   AdministratorLoginPassword          = $(ConvertTo-SecureString -String "<password>" -AsPlainText -Force)
}

$exportRequest = New-AzSqlDatabaseExport @exportRequestParams

用于执行导入和导出作业的现有 API 支持专用链接。 请参阅 导入数据库 API

限制

目前,用于导入/导出的专用链接具有以下限制:

  • 若要将专用链接与导入/导出配合使用,用户数据库和 Azure 存储 Blob 容器必须托管在同一种类型的 Azure 云上。 例如,要么将两者托管在 Azure 商业云中,要么将两者托管在 Azure 政府云中。 不支持跨云类型托管。

  • 目前不支持使用 PowerShell 从 Azure SQL 托管实例导入或导出数据库。

  • 当用户数据库或 Azure 存储帐户受资源锁保护时,不应使用导入/导出专用链接。

  • 需要手动批准新的专用终结点连接才能完成导出操作。 开始导出后,转到专用链接中心的“挂起的连接”并批准连接,这可能需要几分钟才能显示。

  • 使用专用链接进行导入操作不支持在创建新数据库时指定备份存储冗余,而是会使用默认异地冗余备份存储冗余创建新的数据库。 解决方法是首先使用 Azure 门户或 PowerShell 和所需的备份存储冗余创建一个空数据库,然后将 BACPAC 文件导入这个空数据库。

  • 结合使用专用链接和 REST API 的导入操作只能对现有数据库执行,因为 API 使用数据库扩展名。 解决方法是创建一个具有所需名称的空数据库,然后使用专用链接调用导入 REST API。