SQL Server作业报错特殊案例分析
发现问题
一个作业报错,报错信息如下,从错误信息根本看不出为什么出错,手工运行作业又成功了。一时不清楚什么原因导致作业出错。
message
executed as user: nt service\sqlserveragent. ...eration. [sqlstate 01003] (message 8153) mar 6 2019 8:09am [sqlstate 01000] (message 0) mar 7 2019 8:10am [sqlstate 01000] (message 0) mar 7 2019 8:17am [sqlstate 01000] (message 0) mar 6 2019 11:17am [sqlstate 01000] (message 0) mar 7 2019 1:03pm [sqlstate 01000] (message 0) mar 6 2019 4:06pm [sqlstate 01000] (message 0) mar 7 2019 4:07pm [sqlstate 01000] (message 0) mar 6 2019 1:40pm [sqlstate 01000] (message 0) mar 7 2019 1:36pm [sqlstate 01000] (message 0) mar 6 2019 8:02am [sqlstate 01000] (message 0) mar 7 2019 8:06am [sqlstate 01000] (message 0) mar 7 2019 9:47am [sqlstate 01000] (message 0) mar 6 2019 5:38pm [sqlstate 01000] (message 0) mar 7 2019 5:34pm [sqlstate 01000] (message 0) mar 6 2019 3:16pm [sqlstate 01000] (message 0) mar 6 2019 8:07am [sqlstate 01000] (message 0) mar 7 2019 8:09am [sqlstate 01000] (message 0) mar 7 2019 2:18pm [sqlstate 01000] (message 0) mar 7 2019 1:24pm [sqlstate 01000] (message 0) mar 6 2019 8:11am [sqlstate 01000] (message 0) mar 7 2019 8:12am [sqlstate 01000] (message 0) mar 6 2019 11:34am [sqlstate 01000] (message 0) mar 7 2019 11:39am [sqlstate 01000] (message 0) mar 7 2019 4:20pm [sqlstate 01000] (message 0) mar 6 2019 8:51am [sqlstate 01000] (message 0) mar 6 2019 8:44am [sqlstate 01000] (message 0) mar 7 2019 7:31am [sqlstate 01000] (message 0) mar 6 2019 10:46am [sqlstate 01000] (message 0) mar 6 2019 10:10am [sqlstate 01000] (message 0) mar 6 2019 8:08am [sqlstate 01000] (message 0) mar 7 2019 8:04am [sqlstate 01000] (message 0) mar 7 2019 3:19pm [sqlstate 01000] (message 0) mar 6 2019 9:02am [sqlstate 01000] (message 0) mar 7 2019 9:01am [sqlstate 01000] (message 0) mar 7 2019 9:48am [sqlstate 01000] (message 0) mar 7 2019 8:01am [sqlstate 01000] (message 0) mar 6 2019 4:16pm [sqlstate 01000] (message 0) mar 6 2019 2:17pm [sqlstate 01000] (message 0) mar 7 2019 8:31am [sqlstate 01000] (message 0) mar 6 2019 8:04am [sqlstate 01000] (message 0) mar 7 2019 8:08am [sqlstate 01000] (message 0) mar 6 2019 1:08pm [sqlstate 01000] (message 0) mar 7 2019 1:04pm [sqlstate 01000] (message 0) mar 7 2019 2:03pm [sqlstate 01000] (message 0) mar 6 2019 3:18pm [sqlstate 01000] (message 0) mar 6 2019 8:16am [sqlstate 01000] (message 0) mar 6 2019 2:14pm [sqlstate 01000] (message 0) mar 6 2019 4:13pm [sqlstate 01000] (message 0) mar 7 2019 4:10pm [sqlstate 01000] (message 0) mar 6 2019 9:02am [sqlstate 01000] (message 0) mar 7 2019 2:01pm [sqlstate 01000] (message 0) mar 7 2019 7:44am [sqlstate 01000] (message 0) mar 6 2019 5:38pm [sqlstate 01000] (message 0) mar 7 2019 5:34pm [sqlstate 01000] (message 0) mar 6 2019 5:38pm [sqlstate 01000] (message 0) mar 7 2019 5:34pm [sqlstate 01000] (message 0) mar 6 2019 2:03pm [sqlstate 01000] (message 0) mar 6 2019 3:05pm [sqlstate 01000] (message 0) mar 7 2019 7:01pm [sqlstate 01000] (message 0) mar 6 2019 8:05am [sqlstate 01000] (message 0) mar 6 2019 3:47pm [sqlstate 01000] (message 0) mar 6 2019 9:16am [sqlstate 01000] (message 0) mar 6 2019 2:18pm [sqlstate 01000] (message 0) mar 7 2019 2:18pm [sqlstate 01000] (message 0) mar 7 2019 2:36pm [sqlstate 01000] (message 0) mar 6 2019 9:20am [sqlstate 01000] (message 0) mar 7 2019 8:32am [sqlstate 01000] (message 0) mar 7 2019 8:13am [sqlstate 01000] (message 0) mar 6 2019 1:31pm [sqlstate 01000] (message 0) mar 6 2019 8:06am [sqlstate 01000] (message 0) mar 7 2019 8:07am [sqlstate 01000] (message 0) mar 6 2019 3:16pm [sqlstate 01000] (message 0) mar 6 2019 3:16pm [sqlstate 01000] (message 0) mar 6 2019 9:03am [sqlstate 01000] (message 0) mar 6 2019 11:59am [sqlstate 01000] (message 0) mar 7 2019 12:01pm [sqlstate 01000] (message 0) mar 6 2019 2:59pm [sqlstate 01000] (message 0) mar 6 2019 11:49am [sqlstate 01000] ... the step failed.
如上截图所示,从这里可以看到出错信息的sql severity级别为13, 通过数据库引擎错误严重性(database engine error severities),我们可以知道13意味着indicates transaction deadlock errors. 也就是说出现死锁,导致作业的会话成为了死锁的牺牲品。不过也很奇怪,以前也遇到过作业由于出现死锁,导致作业失败的情况。都会在message里面有提示,但是这个实例的版本sql server 2012 sp3(11.0.6020.0),出现死锁,居然没有提示相关死锁信息。不清楚是bug还是其它原因。
严重性级别
下表列出并说明 sql server 数据库引擎所引起错误的严重级别。
严重级别 |
描述 |
0-9 |
返回不太严重的状态信息或报表错误的信息性消息。 数据库引擎 不会引起严重级别为 0 到 9 的系统错误。 |
10 |
返回不太严重的状态信息或报表错误的信息性消息。 由于兼容性原因, 数据库引擎 在将错误信息返回到调用应用程序前将严重性级别从 10 转换为 0。 |
11-16 |
指示可由用户纠正的错误。 |
11 |
指示给定的对象或实体不存在。 |
12 |
特殊严重性,用于因特殊查询提示而不使用锁定的查询。 在某些情况下,因为没有用锁保证一致性,由这些语句所执行的读取操作会产生不一致的数据。 |
13 |
指示事务死锁错误。 |
14 |
指示安全性相关错误,如权限被拒绝。 |
15 |
指示 transact-sql?命令中的语法错误。 |
16 |
指示可由用户纠正的常规错误。 |
17-19 |
指示无法由用户纠正的软件错误。 请将问题通知系统管理员。 |
17 |
指示语句导致 sql server?用尽资源(如数据库的内存、锁或磁盘空间)或超出了系统管理员设置的某些限制。 |
18 |
指示 数据库引擎 软件中有问题,但可完成执行语句,并且可维护到 数据库引擎 实例的连接。 每当出现严重级别为 18 的消息时均应通知系统管理员。 |
19 |
指示超出了不可配置的 数据库引擎 限制并且当前批处理已终止。 严重级别为 19 或更高的错误消息将停止执行当前的批处理。 严重级别为 19 的错误很少,必须由系统管理员或主要支持提供商更正。 当引发严重级别为 19 的消息时,请与系统管理员联系。 严重级别从 19 到 25 的错误消息均写入错误日志。 |
20-24 |
指示系统问题并且是致命错误,这意味着正在执行某语句或批处理的 数据库引擎 任务已停止运行。 此任务记录了所发生事件的有关信息,然后终止。 在大多数情况下,应用程序与 数据库引擎 实例的连接也可能终止。 如果发生这种情况,该问题可能使应用程序无法重新连接。 |
20 |
指示语句遇到了问题。 由于该问题只影响了当前任务,数据库本身未必已经损坏。 |
21 |
指示遇到了影响当前数据库中所有任务的问题,但数据库本身未必已经损坏。 |
22 |
指示消息中所指定的表或索引因软件或硬件问题而损坏。 |
23 |
指示整个数据库的完整性因硬件或软件问题而出现问题。 |
24 |
指示介质故障。 系统管理员可能需要还原数据库。 您可能还需要致电硬件供应商 |
参考资料:
https://docs.microsoft.com/zh-cn/sql/relational-databases/errors-events/database-engine-error-severities?view=sql-server-2017
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。