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
  • 相关阅读:
    一行代码搞定Dubbo接口调用
    测试周期内测试进度报告规范
    jq 一个强悍的json格式化查看工具
    浅析Docker容器的应用场景
    HDU 4432 Sum of divisors (水题,进制转换)
    HDU 4431 Mahjong (DFS,暴力枚举,剪枝)
    CodeForces 589B Layer Cake (暴力)
    CodeForces 589J Cleaner Robot (DFS,或BFS)
    CodeForces 589I Lottery (暴力,水题)
    CodeForces 589D Boulevard (数学,相遇)
  • 原文地址:https://www.cnblogs.com/Uest/p/3780120.html
Copyright © 2011-2022 走看看