对于我正在进行的项目,我们需要客户附近数据库中的客户数据。出于这个原因,我们采用了 Microsoft 的新 Elastic Scale 解决方案。这消除了分片的复杂性,并且仍然使您能够在全球范围内扩展。
目前我面临一个相当重要的问题。我需要将数据从 1 个分片迁移到另一个分片。有一个示例应用程序(合并/拆分)可以做一些事情,但它适用于范围(1..100、101..400 等)。我正在处理的数据库与 Guids 一起工作,所以我们不能使用示例代码。
我自己创建了一个移动/合并管理工具,但在这里遇到了一个问题。起初我想用 ORM 插入所有对象和依赖项。由于一些圆形键,我无法轻松做到这一点。因此,我现在正在创建一个 SQL 脚本。SQL 脚本大约 130MB,只包含INSERT
命令。
所有这些都必须在 1 个事务中完成,因为您不希望迁移完成一半。如果有错误,一切都应该回滚。
运行这个 130MB 的脚本会给我一些错误。我的本地开发机器和 SQL Azure 内存不足。SQL Azure:
缓冲池中可用内存不足
和本地:
资源池“默认”中的系统内存不足,无法运行此查询。
我已经尝试禁用索引,所以这不会在每个INSERT
. 这并没有解决任何问题。
关于如何进行的任何建议?我无法真正拆分脚本,因为必须INSERT
一次编辑所有数据。我认为 SSIS 包也不是一种选择。
创建我自己的数据库事务系统似乎有点矫枉过正且容易出错。
除了INSERT
脚本之外,我还需要DELETE
在“旧”分片/数据库上执行一个脚本,所以我猜这个解决方案也必须适用于这个脚本。我很想在 1 个事务中执行INSERT
和DELETE
脚本,但这在 SQL Azure(分布式事务)上(还)不可能。