注意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

转载于:https://www.cnblogs.com/Uest/p/3780120.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `xp_readerrorlog` 是一个系统存储过程,用于读取 SQL Server 错误日志文件中的信息。它可以帮助你快速查找 SQL Server 实例的错误信息,例如连接失败、备份失败、日志增长等。此存储过程有许多参数,允许你指定要读取的日志文件和时间范围。例如,以下是一个使用 `xp_readerrorlog` 存储过程检索最近 7 天内的错误日志的示例: ``` EXEC xp_readerrorlog 0, 1, N'', N'', N'', N'', '7days'; ``` ### 回答2: xp_readerrorlog 是一种系统存储过程,用于读取 SQL Server 错误日志中的信息。它可以帮助管理员和开发人员快速定位和排查数据库中的问题。xp_readerrorlog 的主要作用是读取 SQL Server 错误日志中的内容,包括错误记录、警告、信息和其他事件的详细描述。 使用 xp_readerrorlog 可以提供诸如以下信息:错误记录的日期和时间、错误等级、错误号、错误描述、错误发生的位置、影响的数据库、错误记录的源头等。这可以帮助管理员迅速了解数据库出现的问题,以便及时进行故障排除和修复。 此外,xp_readerrorlog 还支持通过指定日期范围、关键字等条件来筛选错误日志的结果。管理员可以根据自己的需求来获取特定时间段、特定类型的错误信息,从而更加精确地了解数据库的健康状况。 需要注意的是,只有具有 sysadmin 或 processadmin 角色的用户才有权限执行 xp_readerrorlog 存储过程。为了保护数据库的安全性,应该限制对该存储过程的访问权限,只授权给有需要的用户。 总之,xp_readerrorlog 是 SQL Server 提供的一个非常有用的工具,可以帮助管理员和开发人员迅速定位和解决数据库中出现的错误和问题,提高数据库的可靠性和稳定性。 ### 回答3: xp_readerrorlog 是一个 SQL Server 存储过程,用于读取和分析 SQL Server 错误日志。当 SQL Server 遇到错误或发生异常时,会将相关的错误信息记录在错误日志中。这些错误日志对于排查和解决问题非常有帮助。而 xp_readerrorlog 正是用来访问和检索这些错误日志的。 使用 xp_readerrorlog,我们可以指定需要读取的错误日志的开始时间和结束时间,以及需要过滤的关键词。这样可以有针对性地检索和查看特定时间范围内发生的错误。返回的结果包含相关错误的时间戳、错误级别、错误信息等详细信息。 除了指定时间范围和关键词,xp_readerrorlog 还提供了一个可选的参数,用于指定需要读取的错误日志的文件号码。因为 SQL Server 错误日志会被分割为多个文件,每个文件都有一个唯一的文件号码。通过指定文件号码,我们可以选择读取特定的错误日志文件。 总的来说,xp_readerrorlog 是一个非常有用的工具,可以让我们快速有效地访问和查询 SQL Server 的错误日志,并帮助我们找出和解决数据库中的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值