我想设置一个计划的任务,每十五分钟运行一次工作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屏幕本身上“主键违例”的预期错误….问题已解决。