ฉันต้องการทราบว่า SQL Server 2008 R2 มีรูปแบบการบันทึกเริ่มต้นสำหรับSELECT
คำสั่ง (หรือ T-SQL อื่น ๆ สำหรับเรื่องนั้น)
ถ้าใช่ฉันจะดูได้ที่ไหน หากไม่มีฉันจะตั้งค่าได้อย่างไร
ฉันต้องการทราบว่า SQL Server 2008 R2 มีรูปแบบการบันทึกเริ่มต้นสำหรับSELECT
คำสั่ง (หรือ T-SQL อื่น ๆ สำหรับเรื่องนั้น)
ถ้าใช่ฉันจะดูได้ที่ไหน หากไม่มีฉันจะตั้งค่าได้อย่างไร
คำตอบ:
ตามค่าเริ่มต้นกิจกรรมของ SQL Server จะไม่ถูกบันทึกตามที่คุณคาดหวัง กิจกรรมการเขียนบางอย่างถูกบันทึกไว้ในบันทึกการทำธุรกรรมแต่ยังขึ้นอยู่กับวิธีการตั้งค่าฐานข้อมูลของคุณ
มีสี่ตัวเลือกหลักสำหรับการติดตามกิจกรรม SELECT บนเซิร์ฟเวอร์:
คุณสามารถใช้SQL Server Profilerเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ของคุณและคอยดูกิจกรรมเฉพาะที่เกิดขึ้น
คุณสามารถสร้างการติดตามฝั่งเซิร์ฟเวอร์เพื่อบันทึกกิจกรรมไปยังไฟล์การติดตามบนเซิร์ฟเวอร์ซึ่งสามารถอ่านได้โดย SQL Server Profiler หรือโดยใช้fn_trace_gettableเพื่อโหลดลงในตารางสำหรับการวิเคราะห์เพิ่มเติม
คุณสามารถใช้Extended Eventsซึ่งมีฟังก์ชันการทำงานมากกว่าการติดตามฝั่งเซิร์ฟเวอร์และ Microsoft แนะนำให้ใช้แทนการติดตามฝั่งเซิร์ฟเวอร์เริ่มต้นด้วย SQL Server 2012
คุณสามารถใช้โหมดการตรวจสอบ C2
คุณสามารถใช้ SQL Server Profiler เพื่อตั้งค่าการติดตามของคุณ (เลือกเหตุการณ์เฉพาะตัวกรองและอื่น ๆ ที่คุณต้องการ) จากนั้นสคริปต์ออกโดยใช้เมนูไฟล์และดำเนินการบนเซิร์ฟเวอร์เพื่อสร้างการติดตามฝั่งเซิร์ฟเวอร์ดังที่อธิบายไว้ ที่นี่
มีโซลูชันและเทคนิค SQL Server หลายวิธีสำหรับการติดตามคำสั่ง SELECT
ขั้นตอนและฟังก์ชั่นการจัดเก็บที่พัฒนาขึ้นเป็นพิเศษ - หมายเหตุ: วิธีนี้ต้องการความรู้ขั้นสูงเกี่ยวกับการเขียนโปรแกรม T-SQL และการบำรุงรักษาขั้นตอนและฟังก์ชั่นที่จัดเก็บเพิ่มเติม (เช่นในกรณีที่มีการเปลี่ยนแปลงสกีมาฐานข้อมูล) คุณสามารถดูเพิ่มเติมในบทความนี้: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html
เทคโนโลยีการติดตาม SQL Server - คุณสามารถอ่านคำแนะนำทีละขั้นตอนในบทความนี้: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/
การใช้คุณสมบัติการตรวจสอบเซิร์ฟเวอร์ SQL - คุณสมบัติการตรวจสอบ (แนะนำใน SQL Server 2008) สามารถติดตามเหตุการณ์เซิร์ฟเวอร์และฐานข้อมูลและใช้เทคโนโลยี Extended Events แต่การตรวจสอบระดับฐานข้อมูลได้รับการสนับสนุนโดย SQL Server Developer และ Enterprise editions เท่านั้น
การใช้เครื่องมือของบุคคลที่สามเช่น ApexSQL Audit หรือ Idera SQL Compliance Manager
ตามค่าเริ่มต้นจะไม่บันทึกคำสั่ง SELECT คุณสามารถอ้างถึงคำตอบของฉันที่นี่สำหรับรายละเอียดเพิ่มเติมเพื่อตรวจสอบคำสั่ง SELECT
นอกจากนี้ตามค่าเริ่มต้นแล้วมันไม่ได้บันทึกคำสั่ง T-SQL แทน แต่จะบันทึกกิจกรรมเช่นการเปลี่ยนแปลงหน่วยความจำเซิร์ฟเวอร์, การลงชื่อเข้าใช้การตรวจสอบล้มเหลว, ตรวจสอบเหตุการณ์ Addlogin ตรวจสอบ ฯลฯ และคุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่พร้อมกับสคริปต์ T-SQL การติดตามเริ่มต้น
ตราบใดที่คุณไม่สนใจว่าใครเป็นคนเรียกใช้คิวรี่นั้นมีบางวิธีในการดูเมทริกเกี่ยวกับคิวรีที่กำลังถูกรันในระบบของคุณ สิ่งนี้ จำกัด เฉพาะข้อมูลตั้งแต่การรีสตาร์ทครั้งล่าสุดและอาจเกิดจากแผนแคช (หรือหน่วยความจำอื่น ๆ ) ขึ้นอยู่กับว่าคุณขยายคิวรีมากเท่าใด
;WITH x AS
(
SELECT
[text] = SUBSTRING(t.[text],
(s.statement_start_offset/2)+1,
COALESCE(NULLIF(s.statement_end_offset,-1),DATALENGTH(t.[text])*2)
-(s.statement_start_offset/2)),
s.execution_count, s.last_execution_time,
s.max_logical_reads, s.max_elapsed_time
FROM sys.dm_exec_query_stats AS s
CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
)
SELECT * FROM x
WHERE LTRIM([text]) LIKE 'SELECT%';
คุณอาจต้องการขยายรูปแบบ - ตัวอย่างเช่นสิ่งนี้จะละเว้นการสืบค้นที่เริ่มต้นด้วย;WITH
แดกดันและสามารถจับภาพSELECT INTO
และแม้แต่การกำหนดตัวแปรที่ไม่อ้างอิงตารางจริง
อย่างไรก็ตามหากคุณต้องการข้อมูลที่ละเอียดมากกว่านั้นคำตอบของ Nathan คือการเริ่มต้นที่ดี (ยกเว้นว่าคุณจะใช้การติดตามอย่าใช้ Profiler) เพียงจำไว้ว่าการบันทึกทุกข้อความค้นหากับระบบของคุณจะไม่ฟรี