суббота, 19 декабря 2015 г.

MS SQL Server Management Studio: как забэкапить большую БД и потом восстановить ее под другим именем (сделать копию)

Не знаю, как у кого, а у меня в целях разработки иногда возникает необходимость копировать БД (например, скопировать боевую БД, чтоб потом на копии ставить эксперименты). Если БД сравнительно небольшая - удобно действовать через Tasks - Generate Scripts:

однако, в какой-то момент БД разрастается настолько, что этот способ становится неприменим (или крайне неудобен).

Другой способ - сделать это через механизм Бэкапа и восстановления. Путь очень кривой и неудобный. В плане юзабилити это, практически, идеальный отрицательный пример.

Начать с того, файл бэкапа может быть сохранен только в файловой системе сервера. В расшаренную сетевую папку у меня сохранить не получилось. Так что, если у вас нет на сервере доступа к папке с правами на запись - этот способ сразу не для вас :(

Итак, описание процесса.

Бэкап
У меня Management Studio Sql server 2012 Express
1) Tasks -Back up



2)  опции бэкапа:

-убеждаемся, что стоит правильная БД-источник
-тип - Full, галочка "Copy-only Backup" (я так понял, там есть механизмы инкрементивного бэкапа, когда бэкапятся только изменения в БД с момента прошлого бэкапа - мы это все отключаем)
-в списке Destination с помощью очень неудобного инструментария добавляем путь назначения для бэкапа, включая имя файла. расширение - добавляем по вкусу.
Там есть возможность указать несколько путей - не стал разбираться, для чего это

все, жмем ОК, бэкап случается, файл лежит на сервере БД по указанному пути.



Восстановление

- убедитесь, что нет БД с именем, под которым вы собираетесь восстанавливать БД.
-Databases - Restore Database
 
-в появившемся окне на вкладке General выбераем Source - Device, открываем диалог выбора файлов:

 -с помощью того же упоротого инструментария вводим путь к нашему файлу бэкапа (опять же, в терминах файловой системы сервера) (не хочу скриншотить эту жесть)
-далее в поле Destination - Database вводим имя несуществующей БД, в которую будем восстанавливать
--теперь - тупой финт, без которого работать не будет:
-переходим на вкладку Files  и в именах (обоих) файлов исправляем имя исходной БД на имя новой:

(идея в том, чтоб имена файлов не совпадали с именами файлов, уже используемых существующей БД)

ву а ля