快速入门:将 BACPAC 文件导入到新的 Azure SQL 数据库

可以使用 BACPAC 文件(扩展名为 .bacpac 且包含数据库的元数据和数据的 zip 文件)将 SQL Server 数据库迁移到 Azure SQL 数据库。 可以从 Azure blob 存储(仅限标准存储)或从本地位置中的本地存储导入 BACPAC 文件。 若要最大程度地提高导入速度,则可以指定一个较高的服务层和计算大小(例如 P6)。 然后,可以在导入成功后进行缩减。 导入的数据库的兼容性级别基于源数据库的兼容性级别。

Important

导入数据库后,可选择以当前兼容级别(对于 AdventureWorks2008R2 数据库是级别 100)或更高级别操作数据库。 有关在特定兼容级别操作数据库的影响和选项的详细信息,请参阅 ALTER DATABASE Compatibility Level(更改数据库兼容级别)。 有关与兼容级别相关的其他数据库级别设置的信息,另请参阅 ALTER DATABASE SCOPED CONFIGURATION(更改数据库范围的配置)。

在 Azure 门户中从 BACPAC 文件导入

本部分介绍如何在 Azure 门户中根据存于 Azure blob 存储中的 BACPAC 文件创建 Azure SQL 数据库。 该门户仅支持从 Azure blob 存储导入 BACPAC 文件。

若要在 Azure 门户中导入数据库,请打开将托管导入的逻辑服务器对应的页面,然后在工具栏上选择“导入数据库”。

数据库导入

选择存储帐户、容器,以及要导入的 BACPAC 文件。 指定新数据库大小(通常与源数据库相同)并提供目标 SQL Server 凭据。

监视导入的进度

若要监视导入的进度,请打开导入的数据库的逻辑服务器页,在“设置”下,选择“导入/导出历史记录”。 成功导入后,状态为“已完成”。

若要验证数据库在服务器上是否处于活动状态,请选择“SQL 数据库”并验证新数据库是否为“联机”。

使用 SqlPackage 从 BACPAC 文件导入

若要使用 SqlPackage 命令行实用工具导入 SQL 数据库,请参阅导入参数和属性。 SqlPackage 具有最新的 SQL Server Management StudioSQL Server Data Tools for Visual Studio。 还可以从 Microsoft 下载中心下载最新的 SqlPackage

在大多数生产环境中,建议使用 SqlPackage 来实现缩放和性能。 如需 SQL Server 客户顾问团队编写的有关使用 BACPAC 文件进行迁移的博客,请参阅 Migrating from SQL Server to Azure SQL Database using BACPAC Files(使用 BACPAC 文件从 SQL Server 迁移到 Azure SQL 数据库)。

以下 SqlPackage 命令可将 AdventureWorks2008R2 数据库从本地存储导入到名为 mynewserver20170403 的 Azure SQL 数据库逻辑服务器。 它将创建名为 myMigratedDatabase 的新数据库,其中包含高级服务层和 P6 服务目标。 根据你的环境更改这些值。

SqlPackage.exe /a:import /tcs:"Data Source=mynewserver20170403.database.chinacloudapi.cn;Initial Catalog=myMigratedDatabase;User Id=<your_server_admin_account_user_id>;Password=<your_server_admin_account_password>" /sf:AdventureWorks2008R2.bacpac /p:DatabaseEdition=Premium /p:DatabaseServiceObjective=P6

Important

Azure SQL 数据库逻辑服务器在端口 1433 上进行侦听。 若要从公司防火墙后连接到逻辑服务器,该防火墙必须打开此端口。

此示例演示如何通过 Active Directory 通用身份验证,使用 SqlPackage 来导入数据库。

SqlPackage.exe /a:Import /sf:testExport.bacpac /tdn:NewDacFX /tsn:apptestserver.database.chinacloudapi.cn /ua:True /tid:"apptest.partner.onmschina.cn"

使用 PowerShell 从 BACPAC 文件导入

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

$importRequest = New-AzureRmSqlDatabaseImport 
   -ResourceGroupName "<your_resource_group>" `
   -ServerName "<your_server>" `
   -DatabaseName "<your_database>" `
   -DatabaseMaxSizeBytes "<database_size_in_bytes>" `
   -StorageKeyType "StorageAccessKey" `
   -StorageKey $(Get-AzureRmStorageAccountKey -ResourceGroupName "<your_resource_group>" -StorageAccountName "<your_storage_account").Value[0] `
   -StorageUri "https://myStorageAccount.blob.core.chinacloudapi.cn/importsample/sample.bacpac" `
   -Edition "Standard" `
   -ServiceObjectiveName "P6" `
   -AdministratorLogin "<your_server_admin_account_user_id>" `
   -AdministratorLoginPassword $(ConvertTo-SecureString -String "<your_server_admin_account_password>" -AsPlainText -Force)

可以使用 Get-AzureRmSqlDatabaseImportExportStatus cmdlet 检查导入的进度。 如果在提交请求后立即运行此 cmdlet,通常会返回“状态: 正在进行”。 显示“状态: 成功”时,表示导入完毕。

$importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
[Console]::Write("Importing")
while ($importStatus.Status -eq "InProgress")
{
    $importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
    [Console]::Write(".")
    Start-Sleep -s 10
}
[Console]::WriteLine("")
$importStatus

Tip

有关另一个脚本示例,请参阅从 BACPAC 文件导入数据库

限制

不支持导入到弹性池中的数据库。 可以将数据导入到单一数据库,然后将数据库移到池。

使用向导导入

还可以使用以下向导。

后续步骤