gifts2017

Автоматическое обновление и резервное копирование баз 1С

Опубликовал Nicholas Mikuslas (Nicholas) в раздел Администрирование - Архивирование (backup)

Случилось так, что взял я на поддержку порядка пятидесяти не типовых баз данных 1С, но с одинаковой конфигурацией. А базы эти расположены в разных городах, в разных часовых поясах, да на разных серверах. И чтобы сделать обновление, приходилось тратить много часов на то, чтобы слезно попросить пользователей выйти из базы, сделать резервную копию и накатить новую конфигурацию. Долго сказка сказывается, да не быстро дело делается. Решил я этот процесс автоматизировать...

Выковал я из стали BAT-файл, да вооружил им Шедулер серверный. А файл тот был следующего содержания:

@ECHO OFF
CLS

SET BASE_NAME=ИмяБазыДанных
SET CONNECT_STR="File=""D:\1C_Base\МояБазаДанных"";"
SET USER_NAME=Update
SET USER_PWD=123

SET START_FILE="C:\Program Files (x86)\1cv82\8.2.19.90\bin\1cv8.exe"
SET BACKUP_DIR=D:\1C_Base\etc\Backup
SET CF_DIR=D:\1C_Base\etc\Update
SET LOG_DIR=D:\1C_Base\etc\Update\Log

SET UNLOCK_CODE=КодРазрешения

SET CF_FILE=%CF_DIR%\1Cv8.cf
SET LOG_FILE=%LOG_DIR%\%BASE_NAME%_%date:~6,4%-%date:~3,2%-%date:~0,2%.log
SET DUMP_FILE=%BACKUP_DIR%\%BASE_NAME%_%date:~6,4%-%date:~3,2%-%date:~0,2%.dt

IF NOT EXIST %CF_FILE% EXIT

ECHO --- Start the update %DATE% %TIME% ---
ECHO --- Start the update %DATE% %TIME% --- >> %LOG_FILE%
ECHO.
ECHO. >> %LOG_FILE%

ECHO --- Completion of the inactive terminal sessions ---
ECHO --- Completion of the inactive terminal sessions --- >> %LOG_FILE%
tskill *1cv8* /a /v
@ECHO.
@ECHO. >> %LOG_FILE%

ECHO --- Shutdown users ---
ECHO --- Shutdown users --- >> %LOG_FILE%
START "" /wait %START_FILE% ENTERPRISE /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /DisableStartupMessages /CЗавершитьРаботуПользователей /Out%LOG_FILE% -NoTruncate 
ECHO.
ECHO. >> %LOG_FILE%

IF EXIST %DUMP_FILE% GOTO NO_BACKUP

ECHO --- Creating a backup ---
ECHO --- Creating a backup --- >> %LOG_FILE%
ECHO Backup file: %DUMP_FILE%
ECHO Backup file: %DUMP_FILE% >> %LOG_FILE%
START "" /wait %START_FILE% DESIGNER /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /UC%UNLOCK_CODE% /DumpIB%DUMP_FILE% /Out%LOG_FILE% -NoTruncate
ECHO.
ECHO. >> %LOG_FILE%

:NO_BACKUP

ECHO --- Configuration update ---
ECHO --- Configuration update --- >> %LOG_FILE%
ECHO Update file: %CF_FILE%
ECHO Update file: %CF_FILE% >> %LOG_FILE%
START "" /wait %START_FILE% DESIGNER /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /UC%UNLOCK_CODE% /LoadCfg%CF_FILE% -WarningsAsErrors /Out%LOG_FILE% -NoTruncate
ECHO.
ECHO. >> %LOG_FILE%

ECHO --- Information base update ---
ECHO --- Information base update --- >> %LOG_FILE%
START "" /wait %START_FILE% DESIGNER /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /UC%UNLOCK_CODE% /UpdateDBCfg -WarningsAsErrors /Out%LOG_FILE% -NoTruncate
ECHO.
ECHO. >> %LOG_FILE%

ECHO --- Unlock database ---
ECHO --- Unlock database --- >> %LOG_FILE%
START "" /wait %START_FILE% ENTERPRISE /IBConnectionString%CONNECT_STR% /N%USER_NAME% /P%USER_PWD% /WA- /DisableStartupMessages /CРазрешитьРаботуПользователей /UC%UNLOCK_CODE% /Out%LOG_FILE% -NoTruncate
ECHO.
ECHO. >> %LOG_FILE%

ECHO --- End of update %DATE% %TIME% ---
ECHO --- End of update %DATE% %TIME% --- >> %LOG_FILE%
ECHO.
ECHO. >> %LOG_FILE%

PAUSE

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

CONNECT_STR - строка подключения к информационной базе. В случае файлового варианта должна выглядить так "File=""D:\1C_Base\МояБазаДанных"";" (обратите внимание на двойные кавычки). Для клиент-серверного варината "Srvr=""ИмяСервера"";Ref=""МояБазаДанных"";".

USER_NAME и USER_PWD - Соответственно логин и пароль пользователя под которым делается обновление. Полные права давать не обязательно, в типовых конфигурациях достаточно права администрирования.

START_FILE - Путь к программе 1С:Предприятие. Следует обратить внимание на то, что нужно обращаться к конкретному релизу (например, "C:\Program Files (x86)\1cv82\8.2.19.90\bin\1cv8.exe"), а не к файлу запускатору ("C:\Program Files (x86)\1cv82\common\1cestart.exe"). Дело в том, что этот файл запускает еще один новый процесс, а сам закрывается. В этом случае BAT-файл не будет дожидаться завершения каждого отдельного действия и запустить несколько версий 1С одновременно.

BACKUP_DIR - Путь для резервных копий. Имена файлов генерируются как ИмяБазыДанных_Год-Месяц-Число.

CF_DIR - Путь к файлу обновления 1Cv8.cf. Если файл в указанной директории есть, то начинается обновление, если нет - работа BAT-файла завершается.

LOG_DIR - Путь где будут храниться лог-файлы. Имена файлов генерируются как Год-Месяц-Число_ИмяБазыДанных.

Прошу прощения за английские слова. Проблема в том, что BAT-файл должен быть в кодировке 866 OEM, а лог программа 1С пишет в 1251 ANSI.

Итак, что делает скрипт.

1. Проверяет наличие файла обновления по указанному пути. Если файла нет, то скрипт завершается.

2. Убивает зависшие процессы: tskill *1cv8* /a /v

3. Завершает работу всех пользователей и блокирует базу для входа.

4. Если в текущую дату еще не делалась резерваная копия, то делает выгрузку данных.

5. Обновляет конфигурацию.

6. Обновляет информационную базы.

7. Разблокирует базу для входа пользователей.

Теперь я просто кладу вечером файл обновления в нужную папку, прихожу утром и, на всякий случай, проверяю логи, дабы убедиться, что все обновилось.

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

Наименование Файл Версия Размер Кол. Скачив.
Update.bat
.bat 2,63Kb
20.01.15
23
.bat 2,63Kb 23 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Ololo Anonim (ololoanonim) 20.01.15 12:13
2. Andrey Moskvin (mmoozzgg) 20.01.15 13:39
3. Nicholas Mikuslas (Nicholas) 21.01.15 06:38
(2) mmoozzgg, изначально планировал количество батников по количеству серверов. Но в итоге, пришел к мнению, что лучше сделать отдельный батник на каждую базу. Иначе, в случае какой-либо ошибки могут не обновиться все базы. Плюс обновления нескольких баз можно запускать параллельно.
В общем-то, пути на всех серверах у меня одинаковые, поэтому созданик батника сводится к его копированию и изменению всего двух параметров: BASE_NAME и
CONNECT_STR, в редких случаях еще меняю версию в START_FILE (в идеале хочу везде обновиться до одной версии).
4. TMV 21.01.15 11:14
(0),
порядка пятидесяти не типовых баз данных 1С, но с одинаковой конфигурацией
Не РБД ли?
5. Nicholas Mikuslas (Nicholas) 21.01.15 13:46
6. Марина Чирина (chmv) 28.01.15 17:05
7. Константин Куликов (Светлый ум) 02.02.15 10:10
К этой же теме хорошо было бы дописать удаление старых БекАпов, ибо место не резиновое. Не сталкивались с такой задачей?
Было бы интересно посмотреть на реализацию.
8. Nicholas Mikuslas (Nicholas) 02.02.15 14:03
(7) Светлый ум, при желании и достаточном времени можно и такой задачей заняться.
Думаю ничего сложно в этом нет. Будет что-то типа (на практике не проверял):

FORFILES /P "%BACKUP_DIR%" /S /D -1 /C "CMD /C IF @ISDIR==FALSE DEL /F /Q "%BACKUP_DIR%@REALPATH""

Теоретически этот код должен удалять все файлы старше одного дня.
Светлый ум; +1 Ответить
9. Артур Аюханов (artbear) 10.02.15 00:12
Без обид, но очередной велосипед.
Батник не дает ту свободу обработки, что дает более мощный скриптовый язык :(
Где обработка ошибок?
Много еще граблей сломаешь на этом пути :(
10. Nicholas Mikuslas (Nicholas) 10.02.15 09:11
(9) artbear, не претендую на оригинальность, ничего сложного, ничего особо нового - стандартные механизмы 1С. Но, в данный момент, эти батники меня очень спасают от рутинной работы. Если есть примеры скриптов с более богатым функционалом и обработкой ошибок, подалитесь, пожалуйста.
11. Джон До (jdo) 15.03.15 17:18
(10) Nicholas, да пожалуйста. Мне не жалко. http://infostart.ru/public/138493/ . Этими скриптами я схранял 32 базы. Половина Бухгалтерия, половина Зряплата, всё это выкладывалось на ФТП, а через 62 дня оставляло один: первый за месяц. И всё это с обработкой ошибок.
12. Джон До (jdo) 15.03.15 17:39
(9) artbear, сейчас пишу на JScript-е backUp + updater на основании 1С-кой обработки ОбновлениеКнфигурации. Цель: создать кроссплатформенный скрипт для автоматического архивирования и обновления нескольких 1С информационных баз (ИБ). Разработка приближается к логическому завершению через неделю. Затем тест на реальных ИБ, надеюсь к началу следующего месяца получу не только рабочую версию, но и оттестированную. Приближаясь к завершению я осознал, что скрипт на базе jscript кроссплатформенным не получится из-за отсутствия встроенных возможностей работы с XML. После отладки придется переводить на Perl. Для кроссплатформенности в Linux для замены COM они (1C-ники) разработали RAS/RAC (Remote Administratiorn Server/Remote Administration Client), а вот для конфтгураций на платформе 8.2 они уже этого делать не будут. Хорошо бы для ЗапретитьРаботуПользователей/РазрешитьРаботуПользователей имплантировать соответствующие функции web-сервиса в библиотеку стандартных подсистем (БСП), а не СОМ соединения, типа DenyUsersWork/AllowUsersWork. Но это надо просить 1С-ников тем у кого есть подписка на поддержку (ИТС). :-(
13. Артур Аюханов (artbear) 20.03.15 00:13
(12) ИМХО лучше юзать 1Script, чем Perl :)
ХМЛ есть, работу с процессами поддерживает, ЗИП есть, много чего есть.
Мы уже много скриптов с автором Андреем (EvilBeaver) понаписали, уже в реальной эксплуатации для нескольких проектов разных команд.
14. Dexter Morgan (DexterMorgan777) 07.05.15 13:10
Спасибо, очень помог ваш пример.
15. Михаил Вин (michawin) 04.09.15 11:31
Здравствуйте ! Не обновляется конфигурация базы данных , может ли быть из за платформы 8.3.6.2100, пробывал также на 8.3.5? Не проверяли?( 6-ой пункт). Если "ручками" зайти в конфигуратор и нажать F7 ,то обновляется без проблем.
16. Nicholas Mikuslas (Nicholas) 04.09.15 17:04
(15) Нет, у меня сейчас такой же релиз. Работает отлично. Что в лог файле? Когда обновляете по F7, предупреждений никаких нет?
17. Михаил Вин (michawin) 07.09.15 05:45
Да есть одно не критичное предупреждение, из за него? Никак не обойти?
18. Nicholas Mikuslas (Nicholas) 07.09.15 06:29
(17) Исправьте его и в следующий раз все будет работать.
19. Михаил Вин (michawin) 07.09.15 07:11
Да, согласен, все сработало , спасибо !
20. Nicholas Mikuslas (Nicholas) 07.09.15 11:31
21. Ёк Макарёк (Shaldryn) 18.10.15 15:30
Автоматическое обновление нетиповой? И как это вы так автоматизировали? Он сам сравнение и объединение делает?
22. TMV 18.10.15 15:53
(21) Shaldryn,"Чукча - не читатель, чукча - писатель".
порядка пятидесяти не типовых баз данных 1С, но с одинаковой конфигурацией
Автоматом обновляется N баз с уже подготовленным CF.
А если интересуетесь
Автоматическое обновление нетиповой?
, то вам Сюда, например.
23. Nicholas Mikuslas (Nicholas) 19.10.15 07:04
(21) Shaldryn, для обновления типовых есть другие механизмы, попроще. А здесь вы сами подготавливаете конфигурацию обновления, кладете ее в определенную папку, запускаете скрипт и он сам делает все рутинные действия по резервному копированию, обновлению и пр.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа