如何查找在SQL Server事件探查器跟踪中报告的错误?
我在使用profiler的Sql Server 2005上运行跟踪,需要找出导致报告错误的原因。如何查找在SQL Server事件探查器跟踪中报告的错误?
我用“空白”模板,选择下列事件中的所有列:
- 异常
- 交易所溢油事件
- 执行警告
- 哈希警告
- 缺少列统计
- 缺失加入谓词
我注意到了 “的TextData” 列数这些错误的:
- 错误:156,严重性:16,状态:0
- 错误:208,严重性:16,状态:0
我查找了错误(错误的语法,无效的对象名称),但我怎么知道什么存储过程或查询造成了他们?
不要担心208错误。 208是“找不到对象”。由于所谓的“延迟名称解析”,Profiler会提取这些信息。
执行以下步骤。
CREATE PROCEDURE Demo AS
CREATE TABLE #Temp (ID int)
INSERT INTO #Temp VALUES (1)
SELECT ID FROM #Temp
GO
这PROC会没有任何错误,但运行正常,如果你有一个探查器跟踪运行后,您会看到错误208的一个或两个实例是因为表#TEMP不存在时,PROC开始,这是代码解析和绑定的时间。绑定到底层对象的过程失败。
一旦create table运行,其他语句会重新编译并绑定到正确的表并运行而不会出错。
您将在profiler中看到延迟解析错误的唯一位置。
在sql 2005中你不行。 您必须运行SQL的Profiler跟踪:StmtStarting,SQL:StmtCompleted,用户错误消息和异常事件,包含文本,事务ID,事件序列和otehr列,以获取正在发生的事情的图片。
我添加了SQL:StmtStarting和SQL:StmtCompleted,但只有“USE DBname”。我切换到SP:开始和SP:完成,并获得了命令。 – 2009-05-04 13:48:50
SPID似乎是将208行与SP相关联的唯一方法:启动和SP:已完成的行。使用它,这似乎是正确的,这些208s似乎总是在调用使用临时表的存储过程之前发生。 – 2009-05-04 13:49:51