SQL Server查询日志是否存在失败/错误查询?

时间:2011-09-14 12:32:56

标签: sql sql-server-2008 logging

我正在使用SQL Server 2008,我想知道是否有办法找到已在数据库中执行的无效SQL查询。例如:

SELECT * FROM NonExistingTable

...数据库不存在或语法错误的SELECT/INSERT/UPDATE

2 个答案:

答案 0 :(得分:9)

SQL Server不会记录这些内容,因此如果要捕获它们,则必须使用带有过滤器的服务器端跟踪来捕获有错误的语句。这将是一个非常昂贵的痕迹,如果你做RAISERROR WITH NOWAIT之类的事情,你会得到一些误报...我想这比在任何地方实施TRY / CATCH更容易并记录自己错了?

使用SQL Server Audit可能有办法(取决于您的版本) 或者Extended Events但是我没有尝试用这两种方法来做这件事......

答案 1 :(得分:2)

记录消息229严重性14肯定会帮助您确定何时发生这些错误。

SELECT * FROM master.sys.messages
 WHERE language_id=1033
 AND severity=14
 AND message_id=229;

您可以使用以下方式启用它:

EXEC sp_altermessage 229, 'WITH_LOG', 'true';

我发现create an alert有关严重级别14错误的通知,因为您也需要设置运营商。

唯一的限制是它没有提供出现错误的会话的登录名,主机名或IP地址。它会记录SPID,您必须使用EXEC xp_readerrorlog通过使用

之类的东西来检索它
EXEC xp_readerrorlog 0,1,'permission',NULL,NULL,NULL,'desc'

或在SSMS上打开它,然后将其与使用

sysprocesses上找到的内容相关联
SELECT * FROM master.dbo.sysprocesses WHERE SPID='LoggedSPID'

您可以启用您可能想要了解的其他消息的记录,为此,主要依据严重性14并根据需要启用。

SELECT * FROM master.sys.messages
 WHERE language_id=1033
 AND severity=14;