无法导入包。警告 SQL72012:目标中存在该对象

问题描述 投票:0回答:5

我使用“任务”>“导出数据层应用程序”将 Azure 数据库导出到 .bacpac 文件。最近,当我尝试将其导入本地数据库服务器(任务 > 导入数据层应用程序)时,遇到此错误:

Could not import package.
Warning SQL72012: The object [MyDatabase_Data] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source' check box.
Warning SQL72012: The object [MyDatabase_Log] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source' check box.
Error SQL72014: .Net SqlClient Data Provider: Msg 12824, Level 16, State 1, Line 5 The sp_configure value 'contained database authentication' must be set to 1 in order to alter a contained database.  You may need to use RECONFIGURE to set the value_in_use.
Error SQL72045: Script execution error.  The executed script:
IF EXISTS (SELECT 1
           FROM   [master].[dbo].[sysdatabases]
           WHERE  [name] = N'$(DatabaseName)')
    BEGIN
        ALTER DATABASE [$(DatabaseName)]
            SET CONTAINMENT = PARTIAL 
            WITH ROLLBACK IMMEDIATE;
    END


Error SQL72014: .Net SqlClient Data Provider: Msg 5069, Level 16, State 1, Line 5 ALTER DATABASE statement failed.
Error SQL72045: Script execution error.  The executed script:
IF EXISTS (SELECT 1
           FROM   [master].[dbo].[sysdatabases]
           WHERE  [name] = N'$(DatabaseName)')
    BEGIN
        ALTER DATABASE [$(DatabaseName)]
            SET CONTAINMENT = PARTIAL 
            WITH ROLLBACK IMMEDIATE;
    END

 (Microsoft.SqlServer.Dac)

我按照其他帖子的建议并尝试在 SQL Azure 数据库上运行它:

sp_configure 'contained database authentication', 1;  
GO  
RECONFIGURE;  
GO

但是,它说

Could not find stored procedure 'sp_configure'.

我理解Azure中的等效语句是: https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-database-scoped-configuration-transact-sql?view=sql-server-2017

“sp_configure '包含数据库身份验证', 1;”的等效语句是什么?

sql-server azure-sql-database
5个回答
77
投票

解决方案是针对本地/本地 SQL Server 的

master
数据库执行此操作:

sp_configure 'contained database authentication', 1;  
GO  
RECONFIGURE;  
GO

感谢 David Browne - MicrosoftAlberto Morillo 提供的快速解决方案。


5
投票

我遇到了同样的问题,通过命令提示符导入 bacpac 解决了这个问题。在链接 Import Bacpac 中,转到 SQLPackage 部分并运行那里提供的命令。

sqlpackage.exe /a:import /tcs:"Data Source=<serverName>.database.windows.net;Initial Catalog=<migratedDatabase>;User Id=<userId>;Password=<password>" /sf:AdventureWorks2008R2.bacpac /p:DatabaseEdition=Premium /p:DatabaseServiceObjective=P6

1
投票

对我有用的解决方案是直接将数据库从azure复制到我的本地主机。

  1. 在本地数据库服务器中创建一个新数据库。

  2. 右键单击新数据库,任务 -> 导入数据。

  3. 为Azure db提供数据: enter image description here

  4. 为您的本地主机提供数据: enter image description here

  5. 单击“下一步”。选中第一个复选框以选择全部。

  6. 在下一个表单上选择 -> 立即运行

  7. 等待该过程完成。 enter image description here


0
投票

使用 Azure 门户导入 bacpac:

在 Azure SQL 导入向导的第一步中选择的排序规则非常重要!

它需要与用于创建 bacpac 的源数据库中的排序规则相匹配。

sqlpackage 和 SSMS 方法不需要此步骤。


0
投票

我知道这个问题已经有近 5 年历史了,但今天我们遇到了同样的问题。问题是 .bacpac 是由竞争对手为客户创建的,该客户正从他们的平台转移到我们的平台,除了给我们 .bacpac 之外,他们没有动力进行合作。我们无法直接连接到他们的 Azure 数据库,因此我们所能做的就是尝试使其与我们获得的 .bacpac 一起使用。

现在我无法提供非常具体的细节,因为我不能 100% 确定 .bacpac 中到底有哪些内容对于这家特定公司来说过于具体,所以我只能从最广泛的角度描述我们所做的事情.

基本上我做了以下事情:

  1. 将 .bacpac 扩展名更改为 .zip 并将所有内容提取到一个文件夹中
  2. 在记事本中编辑 model.xml 文件
  3. 我对示例本地数据库做了同样的事情,我也将其导出为 .bacpac
  4. DataSchemaModel 节点看起来非常不同。所以我删除了
  5. 然后我看了
  6. 之后事情就变得有点棘手了。我转到 model.xml 文件的末尾,找到了一个类似 的元素
  7. 我删除了诸如之类的东西

之后,我重新计算了 model.xml 校验和(有大量在线资源向您展示如何做到这一点),然后我将其全部压缩到一个新的 .bacpac 中

它需要一些尝试和错误,我不记得确切的事件顺序,但有一两次它抱怨引用了我已删除的内容,但我删除了这些节点并重复创建了一个新的 .bacpac 和最终它毫无错误地导入了。

我想我删除的一些内容可能对于我们竞争对手的软件的正确运行很重要,但它并没有影响我们想要迁移到我们自己的系统中的数据,所以它对我们来说“足够好”。

发布此内容以防万一它对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.