假设我有一个名为 MyDatabase 的本地数据库。我想将它移动到 Azure SQL 并替换当前驻留在那里的名为 MyDatabase 的现有数据库。我知道如何在本地创建 BACPAC 文件。我知道如何将 BACPAC 导入我的 Azure 存储帐户。但是,一旦 BACPAC 在 Azure 存储中,我不知道用存储中的副本覆盖现有 MyDatabase 数据库的首选方法。我可以导入 BACPAC 文件并创建第二个数据库,然后删除第一个,并重命名刚刚导入的数据库。但是,这样做是最好的还是首选的方式?
你是对的。在 Azure 中,您无法在现有数据库上恢复,只能在“新的或空的”上恢复。
您有几种方法可以从 .BACPAC 文件中恢复。
.\sqlpackage.exe
您可以使用命令行工具直接从您的本地 .BACPAC 位置 执行此操作。.\sqlpackage.exe /a:Import /sf:C:\filename.bacpac /tsn:ServerName.database.windows.net /tdn:destinationDBName ` /tu:adminaccountName@serverName /tp:$credentialPW
您还可以使用您在存储帐户中上传的副本。
$ResourceGroupName = "RGName" $ServerName = 'ServerName' $DatabaseName = "DestinationDBName"
$StorageName = "StorageAccountName" $StorageKeyType = "StorageAccessKey" $StorageUri = "http://$StorageName.blob.core.windows.net/swwstoragecontainer/BackpacFileName.bacpac" $StorageKey = "********* **************************"
$credential = 获取证书
$importRequest = New-AzureRmSqlDatabaseImport -ResourceGroupName $ResourceGroupName -ServerName $ServerName
-DatabaseName $DatabaseName -StorageKeytype $StorageKeyType -StorageKey $StorageKey
-StorageUri $StorageUri -AdministratorLogin $credential.UserName -AdministratorLoginPassword $credential.Password ` -Edition Standard -ServiceObjectiveName S0 -DatabaseMaxSizeBytes 50000获取 AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
在门户中,您可以直接将
.BACPAC
文件作为数据库导入您的服务器。显然,并非如此。您可以将 .bacpac 文件恢复到现有的 Azure SQL 数据库中,例如,当您确实需要保留Azure SQL 数据库的相同实例时,因为它已包含在 Azure 环境中。一个必要条件是:目标数据库必须是空的,即像刚刚创建的一样。但是,如果您已经有一个不为空的目标数据库(当然!),您可以“清理”数据库,在其上下文中运行以下脚本,以超级用户身份登录:
最后 4 个语句是可选的。其中前 3 个用于检查/查看某些参数,最后一个用于删除特定的数据库级触发器(如果存在)。
之后,您可以使用标准 sqlpackage.exe 实用程序将您拥有的 .bacpac 文件恢复到目标数据库,在管理提升的命令行窗口中运行它,如下所示:
只需将 [braced_values] 替换为真实的,它应该可以工作。运行时,该实用程序可能会显示一条警告消息,以黄色显示,如下所示:
你可以忽略它。根据数据库的大小和复杂性,恢复过程可能需要很长时间,因此请确保等待完成,并显示消息:成功导入数据库。
希望有帮助。