Скрипт автоматизированного разворачивания бекапа MSSQL базы
Те, кто часто сталкиваются с задачей поднятия различных бекапов баз, рано или поздно задумываются об автоматизации этого процесса. Вот и я решил создать подобный скрипт.
Скрипт принимает один единственный параметр - полное имя файла бекапа.
Перед использованием необходимо отредактировать скрипт и настроить параметры под себя:
- DestinationPath - путь, где будет развернут заданный бекап
- ServerName, UserName, Password - параметры соединения с СУБД
После выполнения скрипта, в папке DestinationPath будет создана папка с именем базы, в которой будут храниться файлы данных и лога и произойдет связывание пользователя Supervisor с одноименным логином.
Сергей, я так понимаю Restore.sql отсутствует потому как в cmd написано
del Restore.sql
:)
Именно - это временный файл. После его выполнения в нем уже нет надобности.
Теперь понял. А почему сразу не выполнить этот запрос через osql?
Сначала так и пробовал. Текст запроса оказался слишком большим для такого способа выполнения.
Здорово :) Я мечтала о такой штуке, а теперь она есть! :)
Сереж, а можно сразу для восстановленной базы проводить сопоставление fkeys? Куда это добавить в скрипт?
Можно продублировать предпоследнюю строку и в ней заменить
exec sp_change_users_login 'Auto_Fix', 'Supervisor'
на
exec sp_change_users_login 'update_one', 'fkeys', 'fkeys'
Я бы добавил еще несколько улучшений:
1. Передача параметров через командную строку. Постоянно править файл неудобно. И если не передали, то спросить пользователя в консоли.
2. Добавить поддержку Windows авторизации
3. Обработать корректно если система не знает где утилита osql - в переменной PATH не добавлен путь или вы запустили файл не в папке с osql.
Для меня эти все опции, которые правятся в скрипте, статичны. И было бы не удобно их все время вводить в параметрах скрипта. Как варинат можно анализировать, если соотв-ий параметр не задан, то использвать константное значение.
Сергей, все верное - часть параметров очень часто статична: имя пользователя, пароль, сервер, а вот Имя БД, имя файла бекапа в моем случае нет, то править все время файл не удобно или хранить много таких скриптов или сделать самые часто изменяемые параметры - опциональными.
Добавил такую возможность.
Теперь, если задан второй параметр, то он воспринимается как имя базы, иначе имя базы определяется по имени файла бекапа.
Если задан третий параметр, то он воспринимается как папка, в которую будут помещены файлы БД, иначе - этот параметр берется из переменной DestinationPath, указанной в скрипте.
Эти два параметра не обязательные. Архив со скриптом обновил.