写入错误日志

Nic*_*aro 8 sql-server logs sql-server-2008-r2 error-handling

使用 SQL Server 2008 R2:

如何写入 SQL Server 错误日志?我有一个 ROLLBACK 语句,我想将它与写入错误日志的语句结合起来用于外部监控。

例子:

BEGIN TRAN

INSERT INTO table1
SELECT * 
FROM table2

IF @@ERROR <> 0
BEGIN
    ROLLBACK TRAN
    --Write to log
    RETURN
END

COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)

编辑:

我想澄清一下 - 我想写入对象资源管理器中“管理”文件夹下的“SQL Server 日志”、“当前”日志。

Jon*_*gel 8

AFAIK,做到这一点的唯一方法是使用WITH LOGRAISERROR功能的选项。请注意,该 MSDN 页面必须满足某些安全要求才能执行此操作。

也就是说,SQL Server 错误日志实际上并不适用于基于应用程序的日志记录。如果您需要向应用程序添加监控/日志记录,这可能应该作为数据库中的表来实现(例如)。


SQL*_*ner 7

您需要将 RAISERROR 与 LOG 一起使用

BEGIN TRY
  -- Error here
  SELECT 1/0
END TRY
BEGIN CATCH
  RAISERROR('Ouch... divie by zero', 16,1) WITH LOG
END CATCH
Run Code Online (Sandbox Code Playgroud)


Rem*_*anu 7

虽然RAISERROR ... WITH LOG是可能的,但不要忘记

只有 sysadmin 固定服务器角色的成员或具有 ALTER TRACE 权限的用户才能指定 WITH LOG。

在生产中,您必须将 WITH 日志生成代码包装在正确签名的存储过程中。

根据您要实现的目标,有更好的监控选项。例如,您可以使用sp_trace_generateevent.