尝试将 BACPAC 从 blob 存储导入到 ssms 时收到 CREATE USER 错误

Posted

技术标签:

【中文标题】尝试将 BACPAC 从 blob 存储导入到 ssms 时收到 CREATE USER 错误【英文标题】:Recieving CREATE USER error when attempt to import BACPAC from blob storage to ssms 【发布时间】:2020-01-05 06:31:21 【问题描述】:

我正在尝试通过 Azure Blob 存储备份和还原位于 Azure SQL 数据库中的数据库。为此,我在所选数据库上运行 Export Data-Tier Application... 并成功地将其作为 BACPAC 文件存储在 blob 容器中。现在我正在尝试执行反向操作并导入Data-Tier Application... 以检查备份过程功能是否正确,但是在此过程中我收到以下错误:

无法导入包。

错误 SQL72014:.Net SqlClient 数据提供者:消息 15063,级别 16, 状态 1,第 1 行登录已经有一个不同的帐户 用户名。

错误 SQL72045:脚本执行错误。执行的脚本:CREATE USER [username] FOR LOGIN [username];

(Microsoft.SqlServer.Dac)

这会导致Importing databaseImporting package schema and data into databaseUpdating database 操作失败,并创建一个空数据库。

我不确定登录或创建用户在导入数据库时​​与何处相关,您知道为什么会发生此错误吗?

【问题讨论】:

【参考方案1】:

在 master 上运行此查询。它将为您提供服务器级别存在的登录列表。

SELECT A.name as userName, B.name as login, B.Type_desc, default_database_name, B.* 
FROM sys.sysusers A 
    FULL OUTER JOIN sys.sql_logins B 
       ON A.sid = B.sid 
WHERE islogin = 1 and A.sid is not null

在您要导出为 bacpac 的数据库上运行此命令,以便稍后将其导入您的 SQL Server 实例:

SELECT DB_NAME(DB_ID()) as DatabaseName, * FROM sys.sysusers

您需要删除在服务器级别(在主数据库上)存在的数据库上的登录。之后尝试将数据库导出为 bacpac 并将其导入您的 SQL Server 实例。

如果您不想删除当前 SQL Azure 数据库上的这些登录名/用户,请将其复制为新的 Azure SQL,删除登录名,将其导出,然后在完成后删除复制的数据库。

如果要在 Azure 中恢复 bacpac,请使用门户上的“导入”选项而不是 SSMS。

下载最新的 SSMS 以获得最佳用户体验。

【讨论】:

以上是关于尝试将 BACPAC 从 blob 存储导入到 ssms 时收到 CREATE USER 错误的主要内容,如果未能解决你的问题,请参考以下文章

Azure sql 数据库导出到存储 blob 失败

如何将所有文件从 blob 存储容器导入和处理到 azure databricks

我可以使用 Sqoop 将数据从 SQL Server 导入 Azure Blob 存储吗

从global到mooncake迁移SQL Azure

将 BLOB(图像)从 oracle 导入到 hive

使用 CLI 工具 (sqlpackage.exe / PS dbatools) 时通过 BACPAC / DACPAC 导入数据库在用户上失败