Собственно довольно нехитрый инструмент, позволяющий быстро восстановить, свежий или на определенную дату, бэкап, на любую из тестовых баз. Также программка может перед восстановлением выгрузить конфигурацию БД в *.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, нажав правой кнопкой на базе данных, и выбрав пункт "Свойства". Во вкладке "Файлы", видны эти параметры.
Как мне кажется, для здешней адитории такое лучше на 1С писать (в виде внешней обработки, например) а не на C#, на крайняк на OneScript с подключенной библиотекой winforms
Да, и ещё довод в пользу более тесной интеграции с 1С — это ещё и считывание данных о подключении к СУБД из самой инфраструктуры 1С т.е. из кластера — чтобы надо было лишь выбрать ИБ откуда и ИБ куда (причём из списка, в котором сначала указаны кластеры, там же могут быть уже указаны и имеющиеся бэкапы (ну это отдельно настраивается для каждой ИБ и/или общим каталогом))! Вот тогда да — это было бы действительно «быстро» — но лишь по части GUI-взаимодействия, а не по части техники работы с самим бэкапом!
Да и зачем программе путь к файлам БД? Тем более, что это не обязан быть один каталог!
(1)Безусловно Ваши доводы имеют основание, описанная Вами обработка была бы интересна как в написании так и в рассмотрении, возьму на заметку идею.
Данная утилитка разумеется написана во первых, забавы ради, во вторых, просто потому что я устал каждый раз в скрипте подменять наименование базы, путь к свежему бэкапу и т.п. Через интерфейс всегда был параноидальный страх забыть отметить какой-нибудь флажок или еще что напутать. Всегда по многу раз перепроверял, занимало много времени.
Как раз параллельно занимался другим проектом на C#+1С, поэтому решил смастерить по быстрому утилитку. Скорость исключительно в GUI-взаимодействии, как Вы правильно заметили.
Про путь к файлам БД, исключительно потому что я в своем скрипте (шаблонном) использовал эти пути. Тот самый скрипт был взят за основу программы.
Показать
Подскажи, в чем именно ошибки при восстановлении ?
2019-02-14 01:11 > ViewDBList() error: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.
0001_5847766.bak
0001_5847766.bak
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
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
2019-02-14 01:24 > RestoreDB() error: RESTORE DATABASE прервано с ошибкой.
Логический файл «upp_db» не является частью базы данных «buh3_ecodor_00». Используйте RESTORE FILELISTONLY для вывода списка имен логических файлов.
(3) Прошу прощения, сразу не описал, сейчас поправлю в статье.
1. Первые ошибки связаны вероятно с тем что не введен правильный пользователь и пароль для СУБД. Чаще всего пользователь SA и пароль какой был введен по умолчанию.
После того как введете нажмите «сохранить настройки» что бы при следующем запуске не было таких проблем.
2. Я забыл упомянуть что не все настройки выведены в интерфейс, так как не часто меняются в пределах одной компании. В xml файле, есть такой параметр как логическое имя БД. В MS SQL Managment Studio можно посмотреть вот тут, в свойствах базы:
(4) Спасибо