web-dev-qa-db-ja.com

エラーログに書き込む

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

編集:

明確にしたいのですが、オブジェクトエクスプローラーの[管理]フォルダーの下にある[SQL Serverログ]、[現在]ログに書き込みます。

6
Nick Vaccaro

私の知る限り、これを行う唯一の方法は、 RAISERROR 関数のWITH LOGオプションを使用することです。そのMSDNページから、これを行うには満たす必要のある特定のセキュリティ要件があることに注意してください。

つまり、SQL Serverのエラーログは、実際にはアプリケーションベースのログを対象としたものではありません。アプリケーションに監視/ロギングを追加する必要がある場合、これはおそらくデータベースのテーブルとして実装する必要があります(たとえば)。

7
Jon Seigel

あなたはログでRAISERRORを使用する必要があります

BEGIN TRY
  -- Error here
  SELECT 1/0
END TRY
BEGIN CATCH
  RAISERROR('Ouch... divie by zero', 16,1) WITH LOG
END CATCH
5
SQL Learner

RAISERROR ... WITH LOG は可能です、それを忘れないでください

WITH LOGを指定できるのは、sysadmin固定サーバーロールのメンバーまたはALTER TRACE権限を持つユーザーのみです。

本番環境では、WITHログ生成コードをストアドプロシージャ 適切に署名された でラップする必要があります。

達成しようとしていることに応じて、監視のためのはるかに優れたオプションがあります。たとえば、 sp_trace_generateevent

5
Remus Rusanu