如何修复sqlpackage失败以将bacpac文件还原到Linux,而不是Windows



我有一个来自Azure SQL数据库的.bacpac文件,我正在尝试使用以下命令将其安装到SQL Server 2019 for Linux中:

sqlpackage /Action:Import /tsn:h-dev /tu:sa /tp:{sa password} /tdn:G_External /sf:G_External.bacpac

这将创建以下输出:

Importing to database 'G_External' on server 'h-dev'.
Creating deployment plan
Initializing deployment
*** The source contains users that rely on an external authentication provider that is not supported by the target. These users will be treated as users without logins.
Time elapsed 00:00:24.07
*** An unexpected failure occurred: Object reference not set to an instance of an object.

当我在Windows 2019上的SQL Server 10安装中执行相同的操作时,它可以工作:

SqlPackage.exe /Action:Import /tsn:DESKTOP-NM51MHA /tdn:G_External /sf:G_External.bacpac
Importing to database 'G_External' on server 'DESKTOP-NM51MHA'.
Creating deployment plan
Initializing deployment
*** The source contains users that rely on an external authentication provider that is not supported by the target. These users will be treated as users without logins.
Verifying deployment plan
Analyzing deployment plan
Importing package schema and data into database
Updating database
Importing data
Processing Import.
...
Successfully imported database.
Time elapsed 00:01:45.27

我该如何解决这个问题?或者,如何从sqlpackage获取更多信息以诊断问题所在?

SQLServer 版本:

Linux:

sqlcmd -S localhost -U sa -P {sa password} -Q "SELECT @@VERSION"
Microsoft SQL Server 2019 (RTM-CU1) (KB4527376) - 15.0.4003.23 (X64)
Dec  6 2019 14:53:33
Copyright (C) 2019 Microsoft Corporation
Developer Edition (64-bit) on Linux (Ubuntu 16.04.6 LTS) <X64>

窗户:

SQLCMD.EXE -S localhost -Q "SELECT @@VERSION"
Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
Sep 24 2019 13:48:23
Copyright (C) 2019 Microsoft Corporation
Developer Edition (64-bit) on Windows 10 Home 10.0 <X64> (Build 18363: ) (Hypervisor)

作为解决方法,请尝试不同版本的sqlpackage。

SqlPackage.exe 的发行说明页面包含以前版本的 sqlpackage 的下载链接。

就我而言,sqlpackage 版本 18.4(内部版本 15.0.4573.2(适用于此 .bacpac 文件,而版本 18.4.1(内部版本 15.0.4630.1(则没有。

对于在使用sqlpackage时可能遇到此模糊错误消息的其他任何人,有一个/Diagnostics开关将转储大量有关sqlpackage正在做什么的调试消息。

/Diagnostics:true->打印出诊断信息

/Diagnostics:false-> 仅打印结果信息(默认(

使用此开关应有助于确定备份文件中发生错误的确切位置。此开关至少出现在 v17.4.0 中,但可能更早。v17.4.0 可以追溯到当前版本历史记录所示。

最新更新