2010-02-02 4 views
3

Недавно я пытался перестроить старую базу данных, которая не была создана с файловыми группами (только по умолчанию PRIMARY) и, среди прочего, переместить кучу таблиц в новую файловую группу , находящуюся на SAN. Я знаю, как перенести данные:Автоматическая миграция файловой группы в SQL Server

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 ГБ, прежде чем я понял, что случайно включил один из столбцов значений в ПК. Поэтому мне пришлось начинать все заново.

Это еще хуже, когда в таблице много зависимостей. Тогда я не могу просто удалить первичный ключ; Мне нужно сбросить и воссоздать каждый внешний ключ, который ссылается на него. Это приводит к сотням строк шаблона; умножьте на 100 таблиц, и он станет полностью asinine. Мои запястья болят.

У кого-нибудь есть ярлык для этого? Могут ли быть какие-либо инструменты там (по цене с понятием одноразового использования), которые могут это сделать? Возможно, кто-то здесь должен был пройти этот процесс раньше и написать собственный инструмент/скрипт, который они не хотели бы делиться?

SSMS этого не сделает, очевидно, что он может генерировать сценарии миграции для некластеризованных индексов (и они должны быть индексами, а не UNIQUE ограничениями - по крайней мере, в нескольких таблицах, к лучшему или к худшему, кластеризованный индекс на самом деле не является первичным ключом, это другое ограничение UNIQUE).

Это не значит, что синтаксис настолько сложный, что я не могу написать код gen для него. По крайней мере, для основной части drop-and-rereate-the-primary-key. Но добавьте накладные расходы на выяснение всех зависимостей и создание сценариев drop/recreate для всех внешних ключей, и это начинает ощущаться, как будто это превысило этот порог, где больше работать, чтобы автоматизировать и полностью протестировать, чем просто делать каждую таблицу вручную, как в примере выше.

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

Спасибо!

ответ

2

Самый простой способ сделать это, ИМО, будет использовать один из инструментов сравнения схемы (My tool, red gate's SQL Compare, Apex SQL Diff как несколько примеров), чтобы создать сценарий вашей схемы. Затем отредактируйте этот скрипт, чтобы создать все объекты, пустые, в правильных группах файлов. Сделав это, вы можете использовать те же инструменты для сравнения своей новой БД с правильными файловыми группами, и они будут генерировать сценарии для переноса данных для вас. Стоит проверить с несколькими, чтобы найти наиболее подходящий для вас.

+0

Выглядит достаточно разумно. Первая часть проста, так как у меня уже есть сценарий создания базы данных, просто не знал, что инструменты сравнения могут обрабатывать перемещения файловой группы. Благодарю. – Aaronaught

Смежные вопросы