Недавно я пытался реструктурировать старую базу данных, которая не была разработана с файловыми группами (просто по умолчанию PRIMARY
), и, среди прочего, переместить группу таблиц в новую файловую группу Data
, расположенную в сети 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 ГБ, прежде чем я понял, что случайно включил один из столбцов значений в PK. Поэтому мне пришлось начинать все сначала.
Еще хуже, когда в таблице много зависимостей. Тогда я не могу просто отбросить первичный ключ; Я должен удалить и воссоздать каждый внешний ключ , который ссылается на него. Это приводит к сотням линий шаблона; умножьте на 100 таблиц, и это станет прямо асинином. Мои запястья болят.
Кто-нибудь придумал ярлык для этого? Есть ли какие-нибудь инструменты (оцениваемые с учетом одноразового использования), которые могут это сделать? Возможно, кому-то здесь уже приходилось проходить этот процесс и написать свой собственный инструмент / скрипт, которым он не против поделиться?
SSMS не будет этого делать, очевидно - она может генерировать сценарии миграции только для некластеризованных индексов (и они должны быть индексами, а не UNIQUE
ограничениями) по крайней мере для нескольких таблиц, в лучшую или в худшую сторону, кластерный индекс на самом деле не является первичным ключом, это другое ограничение UNIQUE
).
Дело не в том, что синтаксис настолько сложен, что я не могу написать для него код gen. По крайней мере, для основной части перетаскивания и воссоздания первичного ключа. Но добавьте в накладные расходы выяснение всех зависимостей и генерацию сценариев удаления / воссоздания для всех внешних ключей, и это начинает казаться, что это чуть больше того порога, когда нужно больше автоматизировать и полностью протестировать, чем просто выполнять каждую таблицу вручную, как в примере выше.
Итак, вопрос в следующем: Может ли этот процесс быть автоматизирован каким-либо достаточно простым способом? Есть ли альтернативы тому, что я написал выше?
Спасибо!