如何导入交易不一致的bacpac

时间:2015-07-16 19:47:10

标签: azure-sql-database bacpac

well-known在SQL Azure上创建bacpac并不能保证在导出实时更改数据库时保持事务一致性。

接受的解决方法是先创建数据库的快照,然后复制它,然后再导出。

这种方法非常荒谬,因为它迫使用户花费额外的资金用于关系数据库存储。实际上,在SQL Azure的旧时代,数据库按当天计费,因此从生产数据库中创建每日bacpacs主要用于将成本加倍(现在它按小时计费,如果我不是误)。

然而,我的问题与此无关。我的问题如下 - 如果我可以接受交易不一致的bacpac,有没有办法实际恢复(即导入它)?问题很简单 - 因为不再满足某些约束,导入失败(例如,FK异常)。虽然bacpac还原只不过是从架构重新创建数据库,然后是批量导入,但整个过程完全不透明,并且对用户没有太多控制。但是,由于Azure SQL工具总是不断变化,如果可能的话,我不会感到惊讶。

所以,回顾一下,问题是:给出了一个可能不一致的bacpac(即一些不知不觉的持有者),是否有办法(无需编写大量代码)将其导入内部部署数据库?

1 个答案:

答案 0 :(得分:1)

尝试使用BCP.exe导入数据。

  1. bacpac是一个zip文件。您可以通过更改其文件来打开bacpac 扩展到.zip。所有数据都以.bcp文件格式捕获 '数据'文件夹。
  2. 将数据文件夹从zip文件中移出并保存到下面的第4步。
  3. 将.zip扩展名更改回.bacpac和 导入它。它仅使用模式创建数据库。
  4. 使用bcp.exe,将.bcp文件导入数据库中的表。 https://msdn.microsoft.com/en-us/library/ms162802.aspx
  5. 排查并修复数据不一致问题。
  6. 如果您已经知道哪个表包含不一致的数据,则只能移出该表的bcp文件并使用bcp导入它们。