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

06 Jan
Published by Nicholas

Обновление 1С

Случилось так, что взял я на поддержку порядка пятидесяти не типовых баз данных 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. Разблокирует базу для входа пользователей.

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

Комментарии

Аватар пользователя Павел

Файл какого содержания? ))

Аватар пользователя Александр

Добрый день.
Где содержание?

Аватар пользователя Nicholas

Прошу прощения. Не прикрепился листинг файла :)

Аватар пользователя Nicholas

Добавил небольшое описание скрипта.

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
CAPTCHA
Вы человек или автоматическая спам-рассылка?
Target Image