zoukankan      html  css  js  c++  java
  • 注意SQLServer2012中带参数的XP_ReadErrorLog

    --15:26 2014-6-10
    数据库错误日志通知其中有一部分是检测ERRORLOG中若有用户登录失败信息时,会记录到Errorlog表,并邮件提醒。
    当时直接从同事那拿过来的脚本(08),按理说版本都是向前兼容的。平常有个习惯,会把相关脚本在测试环境下先运行,更新、插入的会先看同条件下的SELECT
    当把下面的语句放在2012查询窗口运行时,理所当然认为会返回相应结果

    1 exec master.dbo.xp_ReadErrorLog 0, 1, 'Failed', 'login',@startTime,@endTime,'DESC'

    消息 22004,级别 12,状态 1,第 0 行
    执行扩展存储过程时出错: 参数类型无效
    解答#1 网上查找 Using xp_Readerrorlog, to find related error we used to put string in ' ' while in sql 2012 its changed to " "
    改成" "再次在2012查询窗口运行

    1 exec master.dbo.xp_ReadErrorLog 0, 1, "Failed", "login",@startTime,@endTime,'DESC'

    正常返回结果,把代码放到作业步骤下面,作业历史记录都成功。直到6月9号查看ERRORLOG发现有很多Login failed信息,但却没收到相关邮件,想起那个作业是不是有问题。
    首先想到的是数据库邮件设置问题,直接运行作业里面的发送邮件的代码,是可以收到邮件的。
    然后怀疑里面统计影响行数的@@ROWCOUNT,接着查Errorlog表也没数据!也就是说根本就没有筛选出数据,是数据问题还是其他异常?再次把代码拿出来,放到查询窗口,时间区间改成有Login failed时段,显示有记录出来。可为什么当时作业没把这些记录到Errorlog表中。
    多次测试(本地、服务器),2012作业里面用' '它会报错,用" "不报错,但表中没数据插入!开始怀疑是作业中对" "的判别。
    网上查找 在最后面看到这样一段回复
    exec xp_readerrorlog 0, 1, N'error', N'', N'2012-08-22 00:00:01.000', N'9999-12-31', N'desc'
    works on ss2012 -- the N beging the key
    Note that you actually don't need it on the date / order options:
    exec xp_readerrorlog 0, 1, N'error', N'', '2012-08-22 00:00:01.000', '9999-12-31', 'desc'
    will work as well
    2012查询窗口运行

    1 exec master.dbo.xp_ReadErrorLog 0, 1,N'failed',N'login',@startTime,@endTime,'DESC'

    确实有返回记录,把这个放入到作业下,运行有记录插入。然后将更改放到服务器上,用错误密码登录数据库,产生一条Login failed日志,之后收到一封错误日志的邮件。
    补充:08R2作业中,上面三种方式都可以正常运行

     1 declare @startTime datetime
     2 declare @endTime datetime
     3 set @startTime = DATEADD(day,-1,GETDATE())
     4 set @endTime = GETDATE()
     5 insert into dbo.Errorlog(LogDate,ProcessInfo,Text)
     6 exec master.dbo.xp_ReadErrorLog 0, 1, 'Failed', 'login',@startTime,@endTime
     7 insert into dbo.Errorlog(LogDate,ProcessInfo,Text)
     8 exec master.dbo.xp_ReadErrorLog 0, 1,N'failed',N'login',@startTime,@endTime
     9 insert into dbo.Errorlog(LogDate,ProcessInfo,Text)
    10 exec master.dbo.xp_ReadErrorLog 0, 1, "Failed", "login",@startTime,@endTime
  • 相关阅读:
    阿里巴巴java开发手册学习
    策略模式
    windows常用技巧
    nginx学习
    Tomcat入门
    ThreadPoolTaskExecutor的简单使用
    linux服务器测试性能
    HAProxy1.5.x tcp example
    Haproxy开启日志
    Fix rpmdb: Thread died in Berkeley DB library
  • 原文地址:https://www.cnblogs.com/Uest/p/3780120.html
Copyright © 2011-2022 走看看