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

Публикация № 1001697

Администрирование - Архивирование (backup)

Программирование инструменты разработчик

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

Собственно довольно нехитрый инструмент, позволяющий быстро восстановить, свежий или на определенную дату, бэкап, на любую из тестовых баз. Также программка может перед восстановлением выгрузить конфигурацию БД в *.cf.

Важно: для выгрузки в cf, должен быть зарегистрированный объект COM 1С. 

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

Собственно настройки хранятся в файле settings.xml

<?xml version="1.0" encoding="utf-8"?>
<PropsFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <User>SA</User>
  <Password>123</Password>
  <MainInstance>SQL_Server</MainInstance>
  <DefaultDB>IvanovTest</DefaultDB>
  <ConfigPath>C:\Program Files (x86)</ConfigPath>
  <BackUpPath>C:\Program Files</BackUpPath>
  <NeedSaveConfig>true</NeedSaveConfig>
  <EveryDayNewLogFile>false</EveryDayNewLogFile>
  <LogMainFileName>MainLog</LogMainFileName>
  <DataSourcePath>D:\MSSQL\DATA</DataSourcePath>
  <ComUser>ExtAdm</ComUser>
  <ComPass>123</ComPass>
  <LogicalDBName>upp_db</LogicalDBName>
  <LogicalDBLogName>upp_db_log</LogicalDBLogName>
</PropsFields>

Разберем по порядку. 

Параметры: User, Password, MainInstance, DefaultDB, ConfigPath, NeedSaveConfig, BackUpPath, DataSourcePath выведены в интерфейс и не требуют правки через XML.

А вот остальные сейчас расскажу для чего нужны.

EveryDayNewLogFile - Может иметь значение false или true. Обозначает необходимость каждый день писать логи в новый лог-файл. Если стоит истина, тогда каждый новый день создается новый лог файл. Имя файла содержит дату. Если нет, то всегда пишется в один файл.

LogMainFileName - Имя файла-лога, в который всегда будут писаться логи. Используется в том случае если предыдущий параметр равен false.

ComUser - Имя пользователя в ИС 1С. Тот пользователь под которым можно подключиться через COM соединение. 

ComPass - Пользователь для пользователя который был указан в предыдущем параметре.

LogicalDBName - Логическое имя файла базы данных

LogicalDBLogName - Логическое имя файла лога базы данных

Два последних параметра можно посмотреть через MS SQL Managments Studio, нажав правой кнопкой на базе данных, и выбрав пункт "Свойства". Во вкладке "Файлы", видны эти параметры. 

 

2

Скачать файлы

Наименование Файл Версия Размер
Архив с исходными файлами
.zip 910,60Kb
12.02.19
2
.zip 910,60Kb 2 Скачать
Архив с exe.
.zip 224,42Kb
12.02.19
2
.zip 224,42Kb 2 Скачать

См. также

Специальные предложения

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

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

Да и зачем программе путь к файлам БД? Тем более, что это не обязан быть один каталог!
ixilimuse; +1 Ответить
2. ixilimuse 171 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. Amur_MVS 114 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 171 15.02.19 06:41 Сейчас в теме
(3) Прошу прощения, сразу не описал, сейчас поправлю в статье.

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

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