有没有办法成功导入超过 4GB 的 bacpac,我需要在其中更改排序规则?

问题描述

我正在将数据库从本地 sql 迁移到 Azure。这是我们已经执行过多次的过程,并且成功。

这个过程通常很简单。我将数据库导出到数据层应用程序,将扩展名从 .bacpac 更改为 .zip,获取 model.xml 文件,将排序规则从 latin1_General_CI_AS 更改为 sql_latin1_General_CP1_CI_AS,重新计算校验和,更新 Origin.xml 文件,将其保存回来到 .zip 文件,将扩展名从 .zip 更改回 .bacpac 并导入。轻轻松松。

但这次不是。

.bacpac 比平常大很多,大约 4GB

作为练习,我尝试简单地提取 model.xml 并将其保存回 zip 文件,根本不修改它。当我第二次尝试这样做时,Windows 抱怨 .zip 文件“已损坏”????

即使我根本不修改 .bacpac,当我尝试导入它时,导入也会抱怨: 请求 ID 为“”的 ImportExport 操作因“无法加载包”而失败。不支持多磁盘 ZIP 格式。不支持多磁盘 ZIP 格式。'。

我被困在这里。有什么我可以在这里做的吗?例如: 是否可以采用更大的 (4GB+ ) bacpac 并重新配置它,使其不被视为“多磁盘”ZIP 格式?或许使用 7zip 或诸如此类?

谢谢

解决方法

万一其他人遇到同样的问题....我想出了一个解决方法。这不是一个完整的解决方案,我仍然愿意听取解决方案,但这几乎可以接受。

我们迁移的数据库包含一个带有 VARCHAR(MAX) 列的表,用于存储从文档中提取的文本,以便我们可以在该表上实现全文索引,并为用户提供某些搜索功能.该表非常大(ish) - 绝对与数据库的其余部分相比。

当我创建一个包含整个数据库的 .bacpac 时除了那个表,bacpac 小得多,事实上小得多,我们通常的过程再次工作,我可以更正排序规则和导入.bacpac,从而迁移整个数据库,除了一张表。

完成后,我转到 SSMS 中的本地数据库,右键单击并使用“任务-导入数据”向导,将源指向包含“大表”的本地副本,将目标指向已迁移的Azure 数据库并导入表,确保正确定义其列。以这种方式进行导入大约需要一个小时,但这在我们的业务中是可以接受的时间范围。导入后,我重新创建约束、键和索引,并重新创建全文索引。

这不是我问题的正确“答案”。它在我们的特定情况下对我们有用,并且可能对遇到相同问题的其他读者有用。如果是这样,不客气。如果没有,我希望其他人提出一个更好的答案,通常有效。这是希望