我们的应用程序是 Windows 服务(用 C++ 编写的 native .EXE),它调用 SQL Server 中的存储过程。在大多数情况下,存储过程中的错误(在 90% 的情况下,这些错误意味着我们的业务逻辑中出现了问题)会作为异常重新抛出并被我们的服务捕获。然后,它们会记录在运行我们的服务的计算机上的应用程序事件日志中。
但是,我现在需要在存储过程中记录 SQL Server 本身的一些错误。
按照我们用于服务的范例,我想我可以使用 xp_logevent 在事件日志中保存错误信息。
这是记录 SQL Server 错误的推荐方法吗?
FWIW我使用SQL Server 2008
最佳答案
操作方法
您始终可以使用 RAISEERROR() AND LOG。记录到 Windows 应用程序日志和 SQL 错误日志。请注意,严重级别是此处的关键。有一些限制和安全考虑,但您还可以获得一些其他功能。 BOL 中的更多详细信息: http://msdn.microsoft.com/en-us/library/ms178592.aspx
你应该
我的观点是,你不应该在 SQL 错误日志中记录任何内容,除非它是由 SQL Server 本身生成的。多种原因:
- 如果您的 IT 或 DBA 使用日志分析器或任何其他工具,它可能会针对应用程序问题而不是服务器问题发出警报(这正是他们试图捕获的问题)。
- 我从来没有发现在 SQL Server 中解析错误日志有什么乐趣,而且我也不是特别喜欢 SSMS 的处理方式。
我的建议
使用通用日志记录存储过程写入某些错误日志表。一个非常好的模式是
BEGIN TRY
...do your stuff
END TRY
BEGIN CATCH
get the ERROR_LINE(), ERROR_MESSAGE() and friends
execute generic logging procedure
END CATCH
作为奖励,您可以在日志记录过程中使用 SSSB 使其异步而不妨碍主逻辑流
关于sql-server - 从存储过程记录 SQL Server 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748779/