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ログ]、[現在]ログに書き込みます。
私の知る限り、これを行う唯一の方法は、 RAISERROR
関数のWITH LOG
オプションを使用することです。そのMSDNページから、これを行うには満たす必要のある特定のセキュリティ要件があることに注意してください。
つまり、SQL Serverのエラーログは、実際にはアプリケーションベースのログを対象としたものではありません。アプリケーションに監視/ロギングを追加する必要がある場合、これはおそらくデータベースのテーブルとして実装する必要があります(たとえば)。
あなたはログでRAISERRORを使用する必要があります
BEGIN TRY
-- Error here
SELECT 1/0
END TRY
BEGIN CATCH
RAISERROR('Ouch... divie by zero', 16,1) WITH LOG
END CATCH
間 RAISERROR ... WITH LOG
は可能です、それを忘れないでください
WITH LOGを指定できるのは、sysadmin固定サーバーロールのメンバーまたはALTER TRACE権限を持つユーザーのみです。
本番環境では、WITHログ生成コードをストアドプロシージャ 適切に署名された でラップする必要があります。
達成しようとしていることに応じて、監視のためのはるかに優れたオプションがあります。たとえば、 sp_trace_generateevent
。