导出到 BACPAC 文件 - Azure SQL 数据库和 Azure SQL 托管实例
适用于: Azure SQL 数据库
Azure SQL 托管实例
如果需要为存档或移动到其他平台而导出数据库,可将数据库架构和数据导出到 BACPAC 文件。 BACPAC 文件是一个扩展名为 BACPAC 的 ZIP 文件,它包含来自数据库的元数据和数据。 可将 BACPAC 文件存储在 Azure Blob 存储中或本地位置的本地存储中,之后可导入回 Azure SQL 数据库、Azure SQL 托管实例或 SQL Server 实例。
为保证导出的事务处理方式一致,必须确保导出期间未发生写入活动,或者正在从数据库的事务处理方式一致性副本中导出。
如果是导出到 Blob 存储,则 BACPAC 文件的最大大小为 200 GB。 若要存档更大的 BACPAC 文件,请使用 SqlPackage 导出到本地存储。
Azure 存储文件名不能以
.
结尾,并且不能包含空格字符或<
、>
、*
、%
、&
、:
、\
、/
、?
等特殊字符。 文件名的长度应该少于 128 个字符。如果导出操作超过 20 个小时,可能会取消操作。 为提高导出过程中的性能,可以进行如下操作:
- 暂时提高计算大小。
- 在导出期间终止所有读取和写入活动。
- 对所有大型表上的非 null 值使用聚集索引。 如果不使用聚集索引,当时间超过 6-12 个小时时,导出可能会失败。 这是因为导出服务需要完成表格扫描,才能尝试导出整个表格。 确认表是否针对导出进行优化的一个好方法是,运行
DBCC SHOW_STATISTICS
并确保 RANGE_HI_KEY 不是 null 并且值分布良好。 有关详细信息,请参阅 DBCC SHOW_STATISTICS。
对于较大的数据库,BACPAC 导出/导入可能需要很长时间,并且可能会因各种原因失败。
备注
BACPAC 不能用于备份和还原操作。 Azure 会自动为每个用户数据库创建备份。 有关详细信息,请参阅业务连续性概述和 Azure SQL 数据库中的自动备份或 Azure SQL 托管实例中的自动备份。
备注
使用专用链接导入和导出目前处于预览版阶段。
目前不支持使用 Azure 门户从 Azure SQL 托管实例导出数据库的 BACPAC。 请参阅注意事项。
备注
处理通过 Azure 门户或 PowerShell 提交的导入/导出请求的计算机需要存储 BACPAC 文件以及数据层应用程序框架 (DacFX) 生成的临时文件。 相同大小的数据库之间所需的磁盘空间差异很大,所需的磁盘空间最多可能是数据库大小的 3 倍。 运行导入/导出请求的计算机只有 450 GB 的本地磁盘空间。 因此,某些请求可能会失败,并显示错误 There is not enough space on the disk
。 在这种情况下,解决方法是在具有足够本地磁盘空间的计算机上运行 SqlPackage。 我们建议使用 SQLPackage 导入/导出大于 150 GB 的数据库以避免此问题。
若要使用 Azure 门户导出数据库,请打开数据库页,并在工具栏上选择“导出”。
指定 BACPAC 文件名,为导出选择现有的 Azure 存储帐户和容器,然后提供用于访问源数据库的相应凭据。 即使你是 Azure 管理员,此处也需要 SQL Server 管理员登录名,因为是 Azure 管理员并不等同于在 Azure SQL 数据库或 Azure SQL 托管实例中拥有管理员权限。
选择“确定”。
若要监视导出操作的进度,请打开包含所导出数据库的服务器的相应页面。 在“数据管理”下,选择“导入/导出历史记录”。
在大多数生产环境中,建议使用 SQLPackage 实用工具来实现缩放和性能。 可以针对表的子集并行运行多个 SqlPackage 命令,以加速导入/导出操作。
若要使用 SqlPackage 命令行实用程序导出 SQL 数据库中的数据库,请参阅导出参数和属性。 SQLPackage 实用工具适用于 Windows、macOS 和 Linux。
此示例演示如何通过 Active Directory 通用身份验证,使用 SqlPackage 来导出数据库:
SqlPackage /a:Export /tf:testExport.BACPAC /scs:"Data Source=apptestserver.database.chinacloudapi.cn;Initial Catalog=MyDB;" /ua:True /tid:"apptest.partner.onmschina.cn"
Azure Data Studio 是一款免费的开源工具,可用于 Windows、Mac 和 Linux。 “SQL Server dacpac”扩展为包括导出和导入在内的 SqlPackage 操作提供向导接口。 有关安装和使用该扩展的详细信息,请参阅 SQL Server dacpac 扩展。
SQL Server Management Studio 提供了一个向导,用于将 Azure SQL 数据库或 SQL 托管实例数据库中的数据库导出到 BACPAC 文件。 请参阅导出数据层应用程序。
不支持使用 PowerShell 从 Azure SQL 托管实例导出数据库的 BACPAC。 请参阅注意事项。
使用 New-AzSqlDatabaseExport cmdlet 向 Azure SQL 数据库服务提交导出数据库请求。 根据数据库的大小,导出操作可能需要一些时间才能完成。
$exportRequest = New-AzSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName `
-DatabaseName $DatabaseName -StorageKeytype $StorageKeytype -StorageKey $StorageKey -StorageUri $BacpacUri `
-AdministratorLogin $creds.UserName -AdministratorLoginPassword $creds.Password
若要检查导出请求的状态,请使用 Get-AzSqlDatabaseImportExportStatus cmdlet。 如果在提交请求后立即运行此 cmdlet,通常会返回“状态: 正在进行”。 显示“状态: 成功”时,表示导出完毕。
$exportStatus = Get-AzSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
[Console]::Write("Exporting")
while ($exportStatus.Status -eq "InProgress")
{
Start-Sleep -s 10
$exportStatus = Get-AzSqlDatabaseImportExportStatus -OperationStatusLink $exportRequest.OperationStatusLink
[Console]::Write(".")
}
[Console]::WriteLine("")
$exportStatus
使用数据库操作 - 取消 API 或 Powershell Stop-AzSqlDatabaseActivity 命令取消导出请求。 以下是 PowerShell 命令的示例:
Stop-AzSqlDatabaseActivity -ResourceGroupName $ResourceGroupName -ServerName $ServerName -DatabaseName $DatabaseName -OperationId $Operation.OperationId
备注
若要取消导出操作,需要具有以下角色之一:
- SQL DB 参与者角色或
- 具有
Microsoft.Sql/servers/databases/operations
权限的自定义 Azure RBAC 角色
- 不支持使用本文所述方法将 BACPAC 文件导出到 Azure 高级存储。
- 目前不支持有防火墙的存储。
- 目前不支持不可变存储。
- Azure SQL 托管实例当前不支持使用 Azure 门户或 Azure PowerShell 将数据库导出到 BACPAC 文件。 若要将托管实例导出到 BACPAC 文件,请使用 SQL Server Management Studio (SSMS) 或 SQLPackage。
- 目前,导入/导出服务在需要 MFA 时不支持 Microsoft Entra ID 身份验证。
- 导入/导出服务仅支持 SQL 身份验证和 Microsoft Entra ID。 导入/导出与 Microsoft 标识应用程序注册不兼容。
- 若要了解单一数据库和共用数据库的长期备份保留(作为导出数据库进行存档的替代方法),请参阅长期备份保留。 可以使用 SQL 代理作业来安排仅复制数据库备份作为长期备份保留的替代方案。
- 要了解如何将 BACPAC 导入到 SQL Server 数据库,请参阅将 BACPAC 导入 SQL Server 数据库。
- 若要了解如何从 SQL Server 数据库导出 BACPAC,请参阅导出数据层应用程序
- 若要了解如何使用数据迁移服务迁移数据库,请参阅使用 DMS 从 SQL Server 脱机迁移到 Azure SQL 数据库。
- 如果要从 SQL Server 中导出作为迁移到 Azure SQL 数据库的准备,请参阅将 SQL Server 数据库迁移到 Azure SQL 数据库。
- 若要了解如何安全地管理和共享存储密钥和共享访问签名,请参阅适用于 Blob 存储的安全建议。