Случилось так, что взял я на поддержку порядка пятидесяти не типовых баз данных 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. Разблокирует базу для входа пользователей.
Теперь я просто кладу вечером файл обновления в нужную папку, прихожу утром и, на всякий случай, проверяю логи, дабы убедиться, что все обновилось.
Источник: http://infostart.ru/public/324286/
Один комментарий на «Автоматическое обновление и резервное копирование баз 1С»