尝试将 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 database
、Importing package schema and data into database
和Updating 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 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何将所有文件从 blob 存储容器导入和处理到 azure databricks
我可以使用 Sqoop 将数据从 SQL Server 导入 Azure Blob 存储吗
使用 CLI 工具 (sqlpackage.exe / PS dbatools) 时通过 BACPAC / DACPAC 导入数据库在用户上失败