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

Кто как восстанавливает свежие бэкапы на тестовые базы. Лично я довольно долго использовал для этого 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:MSSQLDATA</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, нажав правой кнопкой на базе данных, и выбрав пункт "Свойства". Во вкладке "Файлы", видны эти параметры. 

 

5 Comments

  1. Darklight

    Как мне кажется, для здешней адитории такое лучше на 1С писать (в виде внешней обработки, например) а не на C#, на крайняк на OneScript с подключенной библиотекой winforms

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

    Да и зачем программе путь к файлам БД? Тем более, что это не обязан быть один каталог!

    Reply
  2. ixilimuse

    (1)Безусловно Ваши доводы имеют основание, описанная Вами обработка была бы интересна как в написании так и в рассмотрении, возьму на заметку идею.

    Данная утилитка разумеется написана во первых, забавы ради, во вторых, просто потому что я устал каждый раз в скрипте подменять наименование базы, путь к свежему бэкапу и т.п. Через интерфейс всегда был параноидальный страх забыть отметить какой-нибудь флажок или еще что напутать. Всегда по многу раз перепроверял, занимало много времени.

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

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

    RESTORE DATABASE [db_name]
    FROM  DISK = N’D:BackupSomeBackupFile.bak’
    WITH  FILE = 1,
    MOVE N’upp_SomeBase’ TO
    N’D:MSSQLDATASomeBase_test.mdf’,
    MOVE N’upp_SomeBase_log’ TO
    N’D:MSSQLDATASomeBase_test_log.ldf’,
    NOUNLOAD,
    REPLACE,
    STATS = 10
    GO

    Показать

    Reply
  3. Amur_MVS

    Подскажи, в чем именно ошибки при восстановлении ?

    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_SQLuh_ecodor_00uh_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_SQLuh_ecodor_00uh_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 для вывода списка имен логических файлов.

    Reply
  4. ixilimuse

    (3) Прошу прощения, сразу не описал, сейчас поправлю в статье.

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

    После того как введете нажмите «сохранить настройки» что бы при следующем запуске не было таких проблем.

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

    Reply
  5. Amur_MVS

    (4) Спасибо

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *