我正在尝试通过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 database
,Importing package schema and data into database
和Updating database
操作失败,并创建了一个空数据库。
我不确定登录或创建用户在导入数据库时的重要性,您知道为什么会发生此错误吗?
答案 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,以获得最佳的用户体验。