Имя: Пароль:
IT
Админ
SqlCmd - вывод ошибок выполнения скрипта в лог
0 BrainDamage
 
12.02.16
15:47
Такой вопрос.
Если батник, который выполняет копирование бэкапов баз и развертывание их в тестовую базу.

Нужно писать лог ошибок при восстановлении бэкапа, сейчас это реализовано таким образом:

В цикле for /r обхожу директорию с *.bak файлами, дальше использую sqlcmd для восстановления бэкапа, при этом создаю два файла 1. лог ошибки, 2. лог восстановления, но оба файла создаются для каждой восстанавливаемой базы.

А хотелось бы дописывать логи в конец уже ранее созданного файла.

Текст фрагмента скрипта такой:

rem Запускаем цикл по каталогу с бэкапами
for /r E:\temp\backup\ %%i in (*.bak) do (
echo %%i
set TempScriptDir=%temp%\

rem задаем переменную полного пути имени файла
set FullFileName=%%i
Echo !FullFileName!
rem задаем переменную имени файала без пути и расширения
set NameFile=%%~ni
Echo !NameFile!

echo *********************************************************************
Rem надо изменить кодовую страницу для возможности записи логов на кириллице
chcp 65001

rem запускаем скрипт восстановления текущего файла и одновременно записи в лог ошибок и результатов выполнения
SqlCmd -S "SV-02" -U "sa" -P "1111111" -b -V10 -i "E:\RestoreScripts\restore.sql" -r0 2>E:\RestoreLogs\!NameFile!Error.log 1>E:\RestoreLogs\!NameFile!Restore.log -v Backupfile="'!FullFileName!'"
If  ERRORLEVEL 16 Set errorrestore=true
rem If  ERRORLEVEL 16 Goto ErrorExit
)

Вот тут никак нельзя писать в один файл:

SqlCmd -S "SV-02" -U "sa" -P "1111111" -b -V10 -i "E:\RestoreScripts\restore.sql" -r0 2>E:\RestoreLogs\!NameFile!Error.log 1>E:\RestoreLogs\!NameFile!Restore.log -v Backupfile="'!FullFileName!'"

Или может как-нибудь по другому сделать?
1 zenik
 
12.02.16
15:48
> - перезапытсывает файл
2 zenik
 
12.02.16
15:49
>> - Дописывает в конец
3 zenik
 
12.02.16
15:49
* перезаписывает
4 zenik
 
12.02.16
15:50
Видимо 2>>E и 1>>E должно помоч
5 BrainDamage
 
12.02.16
15:50
(3) пробовал, не хочет работать :(
6 zenik
 
12.02.16
16:01
Как вариант, добавь дату в имя файла - будет каждое восстановление в свой файл писать.
7 BrainDamage
 
12.02.16
16:07
(6) Сейчас примерно так и работает;
...r0 2>E:\RestoreLogs\!NameFile!Error.log...

Переменная !NameFile!  - название файла бэкапа.

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

И потом еще есть мысль отправлять файл с ошибками на почту, для анализа.