Быстрое восстановление бэкапа на тестовую базу

0. 178 12.02.19 16:16 Сейчас в теме
Кто как восстанавливает свежие бэкапы на тестовые базы. Лично я довольно долго использовал для этого SQL скрипт. С ним меньше возни, чем с интерфейсом, который меняется из версии к версии. Кто-то использует bat файлы, тоже быстрый и надежный способ. В данной публикации я делюсь приложением, написанным на C#, которое восстанавливает базу из бэкапа, и даже при необходимости может перед восстановлением сохранить копию *.cf.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Darklight 27 12.02.19 17:21 Сейчас в теме
Как мне кажется, для здешней адитории такое лучше на 1С писать (в виде внешней обработки, например) а не на C#, на крайняк на OneScript с подключенной библиотекой winforms

Да, и ещё довод в пользу более тесной интеграции с 1С - это ещё и считывание данных о подключении к СУБД из самой инфраструктуры 1С т.е. из кластера - чтобы надо было лишь выбрать ИБ откуда и ИБ куда (причём из списка, в котором сначала указаны кластеры, там же могут быть уже указаны и имеющиеся бэкапы (ну это отдельно настраивается для каждой ИБ и/или общим каталогом))! Вот тогда да - это было бы действительно "быстро" - но лишь по части GUI-взаимодействия, а не по части техники работы с самим бэкапом!

Да и зачем программе путь к файлам БД? Тем более, что это не обязан быть один каталог!
ixilimuse; +1 Ответить
2. ixilimuse 178 13.02.19 06:45 Сейчас в теме
(1)Безусловно Ваши доводы имеют основание, описанная Вами обработка была бы интересна как в написании так и в рассмотрении, возьму на заметку идею.

Данная утилитка разумеется написана во первых, забавы ради, во вторых, просто потому что я устал каждый раз в скрипте подменять наименование базы, путь к свежему бэкапу и т.п. Через интерфейс всегда был параноидальный страх забыть отметить какой-нибудь флажок или еще что напутать. Всегда по многу раз перепроверял, занимало много времени.
Как раз параллельно занимался другим проектом на C#+1С, поэтому решил смастерить по быстрому утилитку. Скорость исключительно в GUI-взаимодействии, как Вы правильно заметили.

Про путь к файлам БД, исключительно потому что я в своем скрипте (шаблонном) использовал эти пути. Тот самый скрипт был взят за основу программы.

RESTORE DATABASE [db_name] 
FROM  DISK = N'D:\Backup\SomeBackupFile.bak' 
WITH  FILE = 1,  
MOVE N'upp_SomeBase' TO 
N'D:\MSSQL\DATA\SomeBase_test.mdf',  
MOVE N'upp_SomeBase_log' TO 
N'D:\MSSQL\DATA\SomeBase_test_log.ldf',  
NOUNLOAD,  
REPLACE,  
STATS = 10
GO
Показать
3. Matveev_VS 14.02.19 13:25 Сейчас в теме
Подскажи, в чем именно ошибки при восстановлении ?

2019-02-14 01:11 > ViewDBList() error: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.
2019-02-14 01:13 > ViewDBList() error: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.
2019-02-14 01:16 > ViewDBList() error: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.
2019-02-14 01:17 > TestConnection() error: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.
2019-02-14 01:18 > TestConnection() error: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.
2019-02-14 01:19 > Запускаем восстановление базы данных: buh3_ecodor_00
2019-02-14 01:19 > Восстанавливаем из файла: D:\Backup_SQL\buh_ecodor_00\buh_ecodor_00_backup_2019_02_12_05­0001_5847766.bak
2019-02-14 01:19 > RestoreDB() error: RESTORE DATABASE прервано с ошибкой.
Логический файл "upp_db" не является частью базы данных "buh3_ecodor_00". Используйте RESTORE FILELISTONLY для вывода списка имен логических файлов.
2019-02-14 01:24 > Запускаем восстановление базы данных: buh3_ecodor_00
2019-02-14 01:24 > Восстанавливаем из файла: D:\Backup_SQL\buh_ecodor_00\buh_ecodor_00_backup_2019_02_12_05­0001_5847766.bak
2019-02-14 01:24 > RestoreDB() error: RESTORE DATABASE прервано с ошибкой.
Логический файл "upp_db" не является частью базы данных "buh3_ecodor_00". Используйте RESTORE FILELISTONLY для вывода списка имен логических файлов.
ixilimuse; +1 Ответить
4. ixilimuse 178 15.02.19 06:41 Сейчас в теме
(3) Прошу прощения, сразу не описал, сейчас поправлю в статье.

1. Первые ошибки связаны вероятно с тем что не введен правильный пользователь и пароль для СУБД. Чаще всего пользователь SA и пароль какой был введен по умолчанию.
После того как введете нажмите "сохранить настройки" что бы при следующем запуске не было таких проблем.

2. Я забыл упомянуть что не все настройки выведены в интерфейс, так как не часто меняются в пределах одной компании. В xml файле, есть такой параметр как логическое имя БД. В MS SQL Managment Studio можно посмотреть вот тут, в свойствах базы:
Прикрепленные файлы:
5. Matveev_VS 15.02.19 15:26 Сейчас в теме
Оставьте свое сообщение
Вопросы с вознаграждением