А я говорил что бесплатный LogParser может быть весьма полезен. При правильном его использовании.
Ситуация следующая: в журнале FTP надо выбрать записи касающиеся передачи ночного бекапа базы данных. Но не просто строку где было установлено соединение, но также строку о его успешном завершении. Например из следующего фрагмента в результат должны попасть и "Opening data connection" и "Transfer Complete".
Фрагмент ftpzip.log:
...
Local directory now E:\backup_db\DB.
ftp> lcd e:\backup_db\DB
mput *.zip
200 PORT Command OK
150 Opening data connection for db1506190314.zip (12.168.1.53,4108)
226 Transfer Complete
ftp: 2276702207 bytes sent in 180,45Seconds 12616,52Kbytes/sec.
ftp> ftp>
cd \
250 Directory successfully changed to "/"
и т.д.
...
Local directory now E:\backup_db\DB.
ftp> lcd e:\backup_db\DB
mput *.zip
200 PORT Command OK
150 Opening data connection for db1506190314.zip (12.168.1.53,4108)
226 Transfer Complete
ftp: 2276702207 bytes sent in 180,45Seconds 12616,52Kbytes/sec.
ftp> ftp>
cd \
250 Directory successfully changed to "/"
и т.д.
Оказывается, в LogParser в это можно сделать одним запросом! Строки вызова LogParser помещаем в любой пакетный файл:
-- куда поместить вывод запроса
set Output = "D:\test\base\Out"
set Output = "D:\test\base\Out"
-- откуда берем данные
set Input = "D:\test\base\MyDB\ftpzip.log"
set Input = "D:\test\base\MyDB\ftpzip.log"
-- сам запуск LogParser-а
LogParser.exe file:FTPQuery.sql?Path=%Input%+Out=%Output% -o:CSV -fileMode:0
LogParser.exe file:FTPQuery.sql?Path=%Input%+Out=%Output% -o:CSV -fileMode:0
А вот и наш FTPQuery.sql. Весь фокус в том что все строки при обрабокте LogParser-ом имеют индекс. Поэтому чтобы получить три строки подряд нам надо согласно шаблона '%db15% по имени файла бекапа выбрать еще две строки ниже, т.е. те у которых индекс будет отличаться на +1 и +2 соответственно:
Select LogFileName, Index, Text
INTO '%Out%\ftpzip.res'
FROM '%Path%'
WHERE Index in (
SELECT add(Index,2)
FROM '%Path%'
WHERE (Text like '%db15%'))
OR
Index in (
SELECT add(Index,1)
FROM '%Path%'
WHERE (Text like '%db15%'))
OR
Index in (
SELECT Index
FROM '%Path%'
WHERE (Text like '%db15%'))
И имеем результат.
LogFilename,Text
D:\test\_base\DB\ftprar1.log,17,"150 Opening data connection for db1506190314.zip (12.168.1.53,4108)"
D:\test\_base\DB\ftprar1.log,18,226 Transfer Complete
D:\test\_base\DB\ftprar1.log,19,"ftp: 2276702207 bytes sent in 180,45Seconds 12616,52Kbytes/sec.
...
D:\test\_base\DB\ftprar1.log,17,"150 Opening data connection for db1506190314.zip (12.168.1.53,4108)"
D:\test\_base\DB\ftprar1.log,18,226 Transfer Complete
D:\test\_base\DB\ftprar1.log,19,"ftp: 2276702207 bytes sent in 180,45Seconds 12616,52Kbytes/sec.
...
Успехов.
No comments:
Post a Comment
А что вы думаете по этому поводу?