Назад | Перейти на главную страницу

Как обеспечить отсутствие дубликатов при использовании LogParser для загрузки журналов IIS в SQL Server каждые пятнадцать минут?

Я хотел бы настроить запланированную задачу для запуска каждые пятнадцать минут на рабочем веб-сервере, который будет запускать LogParser в сегодняшнем файле журнала IIS и вставлять его в таблицу базы данных SQL Server.

Как я могу гарантировать, что я не копирую какие-либо повторяющиеся данные, но в то же время гарантирую, что все записи были скопированы?

Также, как мне заставить LogParser всегда просматривать текущий файл журнала без выполнения дорогостоящих запросов, таких как SELECT * FROM ex*.log и используя дату и время?

До сих пор я играл с:

SELECT *
FROM \\Path\To\Logs\ex*.log
WHERE date = SYSTEM_DATE()
AND time > SUB(SYSTEM_TIME(), TO_TIMESTAMP('00:30', 'hh:mm'))

Однако, если я буду запускать это каждые полчаса, я обязательно получу повторяющиеся записи. Кроме того, если это не сработает по какой-либо причине, у меня будут отсутствующие данные, которые я устраню, просто перезаписав весь файл за предыдущий день каждое утро.

Какие-нибудь советы?

Вы проверили переключатель «-iCheckPoint»? Он хранит временную метку последнего запуска и обращается только к последующим записям.

Я преодолел эту проблему, просто создав ПЕРВИЧНЫЙ КЛЮЧ в столбце RecordNumber в таблице SQL-сервера, что помогло предотвратить дублирование.

Кроме того, в кластерной среде я преодолел это, создав составной ПЕРВИЧНЫЙ КЛЮЧ на (ComputerName, RecordNumber), и это сработало отлично, поскольку в моей среде это всегда была уникальная комбинация.

При намеренном тестировании синтаксического анализа дублированного журнала в LOG PARSER он обнаружил ожидаемую ошибку «нарушение первичного ключа» на самом экране LOG PARSER .... и проблема была решена.

После некоторой игры я действительно могу ответить на часть своего вопроса.

Код для просмотра только сегодняшнего журнала IIS:

SELECT *
FROM \\Path\To\Logs\ex%date:~8,2%%date:~3,2%%date:~0,2%.log

Я не уверен, работает ли это для дат, которые не являются стандартами Великобритании, но это работает для меня. Приведенный выше код генерирует это для сегодняшней даты, 24/02/2011:

SELECT *
FROM \\Path\To\Logs\ex110224.log