Автоматическая миграция файловых групп в SQL Server - PullRequest
3 голосов
/ 02 февраля 2010

Недавно я пытался реструктурировать старую базу данных, которая не была разработана с файловыми группами (просто по умолчанию 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. По крайней мере, для основной части перетаскивания и воссоздания первичного ключа. Но добавьте в накладные расходы выяснение всех зависимостей и генерацию сценариев удаления / воссоздания для всех внешних ключей, и это начинает казаться, что это чуть больше того порога, когда нужно больше автоматизировать и полностью протестировать, чем просто выполнять каждую таблицу вручную, как в примере выше.

Итак, вопрос в следующем: Может ли этот процесс быть автоматизирован каким-либо достаточно простым способом? Есть ли альтернативы тому, что я написал выше?

Спасибо!

1 Ответ

2 голосов
/ 02 февраля 2010

Самый простой способ сделать это, IMO, это использовать один из инструментов сравнения схем ( Мой инструмент , SQL-код красных ворот Сравнение , Apex SQL Diff в качестве пары примеров) для создания скрипта вашей схемы. Затем отредактируйте этот скрипт, чтобы создать все пустые объекты в нужных группах файлов. Сделав это, вы можете использовать те же инструменты для сравнения вашей новой БД с правильными файловыми группами, и они сгенерируют сценарии для переноса данных для вас. Стоит протестировать несколько, чтобы найти наиболее подходящий для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...