Azure sql database 如何导入事务不一致的bacpac

Azure sql database 如何导入事务不一致的bacpac,azure-sql-database,bacpac,Azure Sql Database,Bacpac,这是因为在SQLAzure上创建bacpac并不能保证导出实时、不断变化的数据库时的事务一致性 公认的解决方法是首先通过复制数据库快照,然后进行导出来创建数据库快照 这种方法非常荒谬,因为它迫使用户在关系数据库存储上花费额外的钱。事实上,在SQL Azure的早期,数据库是按天计费的,因此从生产数据库创建每日BACPAC基本上是用来加倍成本的(如果我没有弄错的话,现在是按小时计费) 然而,我的问题不是关于这一点。我的问题如下-如果我可以接受交易不一致的bacpac,是否有任何实际恢复(即导入)的

这是因为在SQLAzure上创建bacpac并不能保证导出实时、不断变化的数据库时的事务一致性

公认的解决方法是首先通过复制数据库快照,然后进行导出来创建数据库快照

这种方法非常荒谬,因为它迫使用户在关系数据库存储上花费额外的钱。事实上,在SQL Azure的早期,数据库是按天计费的,因此从生产数据库创建每日BACPAC基本上是用来加倍成本的(如果我没有弄错的话,现在是按小时计费)

然而,我的问题不是关于这一点。我的问题如下-如果我可以接受交易不一致的bacpac,是否有任何实际恢复(即导入)的方法?问题很简单-因为某些约束不再满足,导入失败(例如,FK异常)。虽然bacpac恢复只不过是从模式中重新创建数据库,然后进行批量导入,但整个过程完全不透明,用户没有多少控制权。然而,由于Azure SQL工具总是在不断变化,如果这成为可能,我不会感到惊讶


因此,概括一下,问题是:如果bacpac可能不一致(即某些约束不成立),是否有方法(不编写大量代码)将其导入本地数据库?

尝试使用BCP.exe导入数据

  • bacpac是一个zip文件。您可以通过更改bacpac的文件来打开它 扩展到.zip。所有数据都以.bcp文件格式捕获到 “数据”文件夹
  • 将数据文件夹从zip文件中移出,并将其保存到下面的步骤4中
  • 将.zip扩展名改回.bacpac,然后 导入它。它创建一个只包含模式的数据库
  • 使用bcp.exe,将.bcp文件导入数据库中的表。
  • 排除故障并修复数据不一致

  • 如果您已经知道哪个表包含不一致的数据,您可以仅移出该表的bcp文件,并使用bcp导入它们。

    注意:根据最近的一篇博文(),“导入/导出不能完全由内置备份替代。导入/导出以及客户端工具(如SSDT和SSMS)仍然建议用于在Azure SQL数据库内外迁移数据。“因此,我的问题仍然与新层相关。谢谢。如果您在回答中包含bcp工具调用的命令行示例(对于第4步),这将非常有用。”。请注意,在执行第4步之前,可能需要禁用约束,并在第5步使用“dbcc checkconstraints”进行后续操作。@DavidAirapetyan是另一个选项,希望有帮助。