如何确保在每十五分钟使用LogParser将IIS日志加载到SQL Server时不会有重复?

我想设置一个计划的任务,每十五分钟运行一次工作Web服务器,它将在今天的IIS日志文件上运行LogParser,并将其插入到SQL Server数据库表中。

如何确保我不复制任何重复数据,同时确保所有logging都已被复制?

另外我怎么会得到LogParser总是看今天的日志文件,而不运行昂贵的查询,如SELECT * FROM ex*.log和使用date和时间条件?

我一直在玩的是:

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

但是如果我每隔半小时跑一次,我肯定会得到重复的条目。 另外,如果因为某种原因没有工作,我最终会丢失一些数据,我将在每天早上的前一天覆盖整个文件。

有小费吗?

你检查了'-iCheckPoint'开关吗? 它存储最后一次运行的时间戳,并只访问后续logging。

在玩了一段时间后,我实际上可以回答自己的问题。

能够看到今天的IIS日志的代码是:

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

我不确定这是否适用于不符合英国标准的date,但这对我有用。 上面的代码在今天的date是24/02/2011:

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

我通过简单地在SQL Server表中的RecordNumber列上创build一个PRIMARY KEY来克服这个问题,这有助于阻止重复。

另外,在集群环境中,我通过在(ComputerName,RecordNumber)上创build一个复合PRIMARY KEY来克服这个问题,并且这个工作很棒,因为它在我的环境中总是一个独特的组合。

当在LOG PARSER中有意地testing了一个重复的日志parsing时,它显示了LOG PARSER屏幕本身上“主键违例”的预期错误….问题已解决。