Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh Log Penyata SQL yang Mempengaruhi Jadual Tertentu?

Bagaimanakah saya boleh Log Penyata SQL yang Mempengaruhi Jadual Tertentu?

Mary-Kate Olsen
Lepaskan: 2025-01-03 13:11:39
asal
863 orang telah melayarinya

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

Mencipta Pencetus untuk Log SQL yang Mempengaruhi Jadual

Apabila berhadapan dengan situasi di mana sumber kemas kini jadual tidak diketahui, ia menjadi penting untuk mengenal pasti pelakunya. Untuk mencapai matlamat ini, anda boleh mencipta pencetus pada jadual yang terjejas untuk menangkap SQL yang dilaksanakan yang mencetuskan kemas kini. Artikel ini menunjukkan dua pendekatan kepada masalah ini: menggunakan pencetus SQL yang mudah dan penyelesaian yang lebih komprehensif dengan peristiwa lanjutan SQL Server 2008.

Kaedah Pencetus SQL:

Buat pencetus pada jadual berkenaan yang melaksanakan prosedur tersimpan untuk merekodkan pernyataan SQL yang mencetuskan kemas kini.

CREATE TRIGGER [triggerName] ON [tableName]
AFTER UPDATE
AS
BEGIN
    EXEC [storedProcedureName]
END
Salin selepas log masuk

Dalam prosedur tersimpan, log penyataan SQL menggunakan sp_WhoIsActive:

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

    EXEC sp_WhoIsActive @output_text = @sql_statement OUTPUT
END
Salin selepas log masuk

Kaedah Peristiwa Lanjutan (SQL Server 2008):

Kaedah ini melibatkan mencipta sesi acara lanjutan yang menangkap butiran tentang pernyataan SQL pelaksanaan.

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
Salin selepas log masuk

Selepas melaksanakan kemas kini, hentikan sesi dan huraikan data yang ditangkap untuk mendapatkan semula pernyataan 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)
Salin selepas log masuk

Sertai keputusan dengan DMV untuk mendapatkan maklumat tambahan tentang pelaksanaan:

WITH CapturedResults AS
(
    ...
)
,
StackData AS
(
    ...
)
SELECT ...
FROM StackData AS sd ...
Salin selepas log masuk

Pendekatan ini menyediakan cara untuk mengenal pasti pernyataan SQL yang menjejaskan jadual, membolehkan anda menyiasat lebih lanjut dan menyelesaikan sebarang isu.

Atas ialah kandungan terperinci Bagaimanakah saya boleh Log Penyata SQL yang Mempengaruhi Jadual Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan