我昨晚使用 SQL Azure 导入/导出服务获取的 BACPAC 遇到了一些奇怪的问题。
在我们的数据库中有 2 个相关表。
dbo.Documents --All Documents in the database
Id
DocName
Extension
dbo.ProcessDocuments --Doc's specific to a process
Id
DocumentId (FK -> dbo.Documents.Id with Check Constraint)
ProcessId
根据该架构,ProcessDocuments
表不可能包含主 Documents
表中没有伴随条目的行。
但是,当我在另一个环境中恢复数据库后,我最终得到了
ProcessDocuments
中有 7001 个条目。 Documents
中只有 7000 个等效条目(缺少 1 个)。尝试恢复 ProcessDocuments
ALTER TABLE CHECK CONSTRAINT
时恢复失败
我唯一能想象的是,当进行备份时,它会按顺序(按字母顺序???)遍历表,并一次备份数据1表,然后发生了类似以下的事情。
文档
得到备份。包含 7000 个条目- 有人向系统添加了新的流程文档/插入到
文档
和流程文档
ProcessDocuments
已备份。包含 7001 个条目
如果是这种情况,那么在使用 BACPAC 作为有效的灾难恢复 Assets 时会产生一个巨大的问题,因为如果在系统有数据移动时使用它们,则您的 BACPAC 可能包含数据完整性问题。
是这样的吗?或者谁能解释一下还有什么可能导致这种情况?
最佳答案
数据导出使用数据库上的批量操作,并且不保证是事务性的,因此您所描述的问题可能并且最终会发生。
“导出操作对数据库中每个表的数据执行单独的大容量复制,因此不能保证数据的事务一致性。您可以使用 Windows Azure SQL 数据库复制数据库功能来制作数据的一致副本。数据库,并从副本执行导出。” http://msdn.microsoft.com/en-us/library/windowsazure/hh335292.aspx
<小时/>如果您想创建事务一致的备份,您必须首先复制数据库(这可能会花费您很多,具体取决于数据库的大小),然后将复制的数据库导出为 BACPAC(正如 ramiramilu 指出的那样)http://msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx
您可以自己做或使用RedGate SQL Azure Backup但据我了解,他们遵循与上述完全相同的步骤,因此,如果您选择他们一致的备份选项,您也会付出代价。
关于sql-server - SQL Azure 导出/Bacpacs 和外键完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21162857/