sbis_copy_db.bat в планировщике 2008R2

Конфигурирование, исправление ошибок Pervasive.SQL.

Правила форума
Тема закрыта! Все обсуждения теперь ведутся в группе СБИС 2.Х
Подробнее о том как найти группы и вступить в них.

sbis_copy_db.bat в планировщике 2008R2

2008R2, Pervasive SQL 9.5
Для ежедневных резервных копий (база - около 45 Гб) решил использовать батничек из комплекта СБиС++ Бухгалтерия.
Код: Выделить всё
@echo off
echo.
echo Скрипт для автоматической архивации базы данных СБиС++ в формате Pervasive.SQL
echo Должен запускаться на сервере, иначе не будет работать заморозка базы данных!
echo Параметры запуска:
echo    sbis_copy_db.bat КаталогБД КаталогРезервнойКопии
echo.

rem Путь доступа к каталогу базы данных
set DB_PATH=E:\SBIS\SBIS_DB\db_ci

rem Путь доступа к каталогу для хранения "снимка" базы данных, по умолчанию создается в каталоге запуска скрипта - имя базы данных
set COPY_PATH=E:\copy_ci\temp

rem Путь доступа к каталогу резервных копий
set ARC_PATH=\\192.168.8.21\Backup\SBIS_DB\ci

rem Путь к каталогу с временными файлами, по умолчанию создается в каталоге запуска скрипта
rem Внимание! Поскольку xcopy не понимает в /exclude кавычки, TMP_PATH не должен содержать пробелы
set TMP_PATH=.

rem Команда вызова Butil
set BUTIL=butil.exe

rem Команда вызова архиватора
set ARC=sbis_update_backup.exe

rem Путь доступа к лог-файлу этого скрипта
set LOG_FILE=sbis_copy_db.log

rem Путь доступа к лог-файлу для отправки на email
set EMAIL_LOG_FILE=sbis_copy_db.email.log

rem Настройки для отправки лога по почте
rem EMAIL_SMTP - адрес SMTP-сервера, пока он не указан, почта не отправляется
set EMAIL_SMTP=192.168.8.6
set EMAIL_SMTP_PORT=25
set EMAILER=blat\blat.exe
set EMAIL_FROM=admin@r41-nalog.ru
set EMAIL_TO=admin@r41-nalog.ru

rem Ставим отметку в лог-файле о том, что запущен скрипт
call :msg2log

if "%EMAIL_SMTP%"=="" (
   call :msg2log "Отправка протокола на email не настроена!"
)

rem Очищаем email_log, чтобы не послалось лишнего
del %EMAIL_LOG_FILE%

rem Делаем проверку наличия каталогов и параметров
if "%DB_PATH%"=="" (
   call :msg2log "Не указан каталог базы данных!"
   goto SEND_LOG
)

if not exist "%DB_PATH%" (
   call :msg2log "Не найден каталог базы данных по адресу" ""%DB_PATH%"!"
   goto SEND_LOG
)
call :msg2log "Каталог базы данных:" ""%DB_PATH%""

if "%ARC_PATH%"=="" (
   call :msg2log "Не указан каталог резервных копий!"
   goto SEND_LOG
)
if not exist "%ARC_PATH%" (
   call :msg2log "Не найден каталог резервных копий по адресу" ""%ARC_PATH%"!"
   goto SEND_LOG
)
call :msg2log "Каталог резервных копий:" ""%ARC_PATH%""

if "%BUTIL%"=="" (
   call :msg2log "Не указан butil.exe!"
   goto SEND_LOG
)

rem Очищаем каталог временной копии базы данных
rd "%COPY_PATH%" /q /s
call :msg2log "Каталог временной копии " ""%COPY_PATH%"" "очищен!"

rem Создаем список имен файлов базы данных
dir /S/B "%DB_PATH%\*.mkd" > "%TMP_PATH%\sbis_copy_db.lst"

rem Замораживаем базу данных
call :msg2log "Выполняется заморозка базы данных: %BUTIL% -STARTBU..."
"%BUTIL%" -STARTBU "@%TMP_PATH%\sbis_copy_db.lst" >> %LOG_FILE%
if "%ERRORLEVEL%"=="0" (
   call :msg2log "Заморозка базы данных" ""%DB_PATH%"" "выполнена успешно!"
) else (
   call :msg2log "Ошибка! Заморозка базы данных" ""%DB_PATH%"" "не была выполнена!"
   goto SEND_LOG
)

rem Делаем копию замороженной базы данных
call :msg2log "Делается временная копия базы данных..."
echo .^^^^^^ > "%TMP_PATH%\sbis_copy_db.exclude"
xcopy "%DB_PATH%\*.*" "%COPY_PATH%" /I/Y /EXCLUDE:%TMP_PATH%\sbis_copy_db.exclude
del /q "%TMP_PATH%\sbis_copy_db.exclude"

rem Размораживаем базу данных
call :msg2log "Выполняется разморозка базы данных: %BUTIL% -ENDBU..."
"%BUTIL%" -ENDBU "@%TMP_PATH%\sbis_copy_db.lst" >> %LOG_FILE%
if "%ERRORLEVEL%"=="0" (
   call :msg2log "Разморозка базы данных" ""%DB_PATH%"" "выполнена успешно!"
   del /q "%TMP_PATH%\sbis_copy_db.lst"
) else (
   call :msg2log "Ошибка! Разморозка базы данных" ""%DB_PATH%"" "не была выполнена!"
)

rem Запаковываем временную копию базы данных
call :msg2log "Выполняется архивация базы данных: " "%ARC%" "%COPY_PATH%" "%ARC_PATH%" "DB"
"%ARC%" "%COPY_PATH%" "%ARC_PATH%" "DB"
if "%ERRORLEVEL%"=="0" (
   call :msg2log "Архивация базы данных"  ""%DB_PATH%"" "выполнена успешно!"
) else (
   call :msg2log "Ошибка! Возникли ошибки при архивации базы данных"  ""%DB_PATH%"" "!"
)

:SEND_LOG
if not "%EMAIL_SMTP%"=="" (
   echo Протокол архивации базы данных "%DB_PATH%" > "%TMP_PATH%\sbis_copy_db.email.subj"
   %EMAILER% %EMAIL_LOG_FILE% -to %EMAIL_TO% -sf "%TMP_PATH%\sbis_copy_db.email.subj" -charset ibm866 -q -log %LOG_FILE% -server %EMAIL_SMTP% -port %EMAIL_SMTP_PORT% -f %EMAIL_FROM% -try 10
   call :msg2log "Отправлено письмо c протоколом."
)

goto :EOF

rem Вспомогательная подпрограмма для формирования записи в лог-файл и на консоль
:msg2log
set DATE_TIME=%DATE% %TIME:~0,-3%
echo %DATE_TIME% %~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9
echo %DATE_TIME% %~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9 >> %LOG_FILE%
echo %DATE_TIME% %~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9 >> %EMAIL_LOG_FILE%
goto :EOF


Скрипт запускается, делает копию, уведомление отправляет.

Но при попытке добавить его в планировщик он работать отказывается.
Настройки у задачи следующие:
"Выполнять вне зависимости от регистрации пользователя" - логин/пароль администратора
С галочкой "скрытая задача" игрался.
Настроить для "2008/Vista", "2008R2" пробовал.

Результат один и тот же: сразу после запуска из планировщика пишет, что "операция успешно завершена" и ничего не происходит (ни одного лог-файла и бэкапа).

Понимаю, что вопрос больше по 2008 винде нежели по первазиву, но может быть кто-то сталкивался с такой проблемой и знает путь ее решения.
Vladimir Babarin 
» 04 май 2011, 06:39


Решил проблему указав везде полные пути.
Vladimir Babarin 
» 04 май 2011, 07:11




Вернуться в Pervasive.SQL