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

时间:2019-09-02 07:51:35

标签: azure azure-sql-database ssms azure-storage-blobs

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

  

无法导入包。

     

错误SQL72014:.Net SqlClient数据提供程序:消息15063,级别16,   状态1,第1行登录名中已有另一个帐户   用户名。

     

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

     

(Microsoft.SqlServer.Dac)

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

我不确定登录或创建用户在导入数据库时​​的重要性,您知道为什么会发生此错误吗?

1 个答案:

答案 0 :(得分:0)

在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,以获得最佳的用户体验。