ホームページ > データベース > mysql チュートリアル > 特定のテーブルに影響を与える SQL ステートメントをログに記録するにはどうすればよいですか?

特定のテーブルに影響を与える SQL ステートメントをログに記録するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-03 13:11:39
オリジナル
863 人が閲覧しました

How Can I Log the SQL Statements Affecting a Specific Table?

テーブルに影響を与える SQL をログに記録するトリガーの作成

テーブル更新のソースが不明な状況に直面した場合、これが不可欠になります犯人を特定するために。これを実現するには、影響を受けるテーブルにトリガーを作成して、更新をトリガーした実行された SQL をキャプチャします。この記事では、この問題に対する 2 つのアプローチを説明します。1 つは単純な SQL トリガーを使用する方法、もう 1 つは SQL Server 2008 拡張イベントを使用したより包括的なソリューションです。

SQL トリガー方法:

ストアド プロシージャを実行して、トリガーした SQL ステートメントを記録する、問題のテーブルのトリガーupdate.

CREATE TRIGGER [triggerName] ON [tableName]
AFTER UPDATE
AS
BEGIN
    EXEC [storedProcedureName]
END
ログイン後にコピー

ストアド プロシージャで、sp_WhoIsActive:

CREATE PROCEDURE [storedProcedureName]
AS
BEGIN
    DECLARE @sql_statement NVARCHAR(MAX)

    EXEC sp_WhoIsActive @output_text = @sql_statement OUTPUT
END
ログイン後にコピー

拡張イベント メソッド (SQL Server 2008):

を使用して SQL ステートメントをログに記録します。

この方法には、SQL ステートメントの詳細をキャプチャする拡張イベント セッションの作成が含まれます

CREATE EVENT SESSION [sessionName] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION (package0.callstack, sqlserver.session_id, sqlserver.sql_text, sqlserver.tsql_stack)
    WHERE (object_id = ' + CAST(OBJECT_ID('[affectedTable]') AS VARCHAR(10)) + ')
)
ADD TARGET package0.asynchronous_file_target
(set filename = 'path\to\filename.xel', metadatafile = 'path\to\filename.xem')
ALTER EVENT SESSION [sessionName] ON SERVER STATE = START
ログイン後にコピー

更新を実行した後、セッションを停止し、キャプチャされたデータを解析して SQL ステートメントを取得します。

EXEC sp_executesql 'ALTER EVENT SESSION [sessionName] ON SERVER STATE = STOP'

SELECT CONVERT(XML, event_data) AS data
FROM sys.fn_xe_file_target_read_file('path\to\filename.xel', 'path\to\filename.xem', NULL, NULL)
ログイン後にコピー

結果を DMV と結合して、更新に関する追加情報を取得します。実行:

WITH CapturedResults AS
(
    ...
)
,
StackData AS
(
    ...
)
SELECT ...
FROM StackData AS sd ...
ログイン後にコピー

これらのアプローチは、テーブルに影響を与えている SQL ステートメントを特定する方法を提供し、さらに調査して解決できるようにします。何か問題がありましたら。

以上が特定のテーブルに影響を与える SQL ステートメントをログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート