gpt4 book ai didi

sql-server - SQL Server 中的自动文件组迁移

转载 作者:行者123 更新时间:2023-12-02 02:35:12 26 4
gpt4 key购买 nike

最近我一直在尝试重构一个没有设计文件组的旧数据库(只是默认的 PRIMARY),除此之外,我将一堆表移动到一个新的 驻留在 SAN 上的数据 文件组。我知道如何迁移数据:

ALTER TABLE MyTable
DROP CONSTRAINT PK_MyTable WITH (MOVE TO [MyDB_Data])

ALTER TABLE MyTable
ADD CONSTRAINT PK_MyTable
PRIMARY KEY CLUSTERED (MyID)
ON [MyDB_Data]

但该死的,如果这不是我做过的最乏味的工作。而且很容易出错。有一次我在移动一个 30 GB 的表的过程中(我假设,因为没有进度指示器),然后我意识到我不小心在 PK 中包含了一个值列。所以我不得不重新开始。

当表有很多依赖项时,情况会更糟。那么我不能只删除主键;我必须删除并重新创建引用它的每个外键。这导致了数百行样板文件;乘以 100 个表,它就变得彻头彻尾的愚蠢。我的手腕受伤了。

有人想出一个捷径吗?是否有任何工具(价格考虑了一次性使用的概念)可以做到这一点?也许这里有人以前不得不经历这个过程并编写了他们不介意分享的自己的工具/脚本?

SSMS 显然不会这样做 - 它只能为非聚集索引生成迁移脚本(并且它们必须是索引,而不是 UNIQUE 约束 - 至少在几个表上,对于无论好坏,聚簇索引实际上并不是主键,它是一个不同的 UNIQUE 约束。

倒不是语法复杂到写不出代码生成器。至少对于基本的删除和重新创建主键部分。但是加上计算所有依赖关系和为所有外键生成删除/重新创建脚本的开销,这开始感觉它刚刚超过了那个阈值,自动化和全面测试比只做每个表要多得多与上面的示例一样手动。

因此,问题是:这个过程能否以任何合理直接的方式实现自动化?除了我上面写的内容,还有其他替代方法吗?

谢谢!

最佳答案

在我看来,最简单的方法是使用模式比较工具之一(My toolred gate's SQL CompareApex SQL Diff 作为示例)创建模式脚本。然后,编辑该脚本以在正确的文件组中创建所有空对象。完成后,您可以使用相同的工具将新数据库与正确的文件组进行比较,它们将生成脚本来为您迁移数据。值得测试多个,以找出最适合您的。

关于sql-server - SQL Server 中的自动文件组迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com