ฉันสามารถดูแบบสอบถามประวัติศาสตร์ทำงานบนฐานข้อมูล SQL Server ได้หรือไม่


38

มีคนกำลังเรียกใช้แบบสอบถามบนฐานข้อมูล SQL Server ของเราจากระยะไกลและระบบของพวกเขาล้มเหลว

พวกเขาไม่มีการสำรองข้อมูลของแบบสอบถามนั้นและต้องการดูสิ่งที่ถูกเรียกใช้บนเซิร์ฟเวอร์

เป็นไปได้หรือไม่ที่จะค้นหาข้อความค้นหานี้ในบันทึกหรือในบางแห่ง?


ไม่ได้อยู่ในบันทึก ตรวจสอบในระบบควบคุมเวอร์ชัน TFS หรือ SourceSafe หรือไม่ ผลลัพธ์ถูกตั้งค่าเป็น txt เพื่อให้สามารถสร้างใหม่ได้หรือไม่
jl01

2
สำหรับการออกแบบในอนาคตคุณอาจต้องการพิจารณาเพิ่มทริกเกอร์และตารางการตรวจสอบ / ประวัติ จากนั้นจะสามารถใช้เวลา / ผู้ใช้ที่อัปเดตล่าสุดได้
Thomas Stringer

คำตอบ:


39

Grant Fritchey ที่คล้ายกันมีปัญหาที่เขาปิด SSMS และทำแบบสอบถามที่หายไปที่เขาทำอยู่ ... blogged เกี่ยวกับที่นี่: โอ้ **********!

แก้ไข

ในการทำให้รายละเอียดเพิ่มเติมของคำตอบการอ้างอิงลิงก์ด้านบนให้สิทธิ์จะมีคิวรีเพื่อไปที่แคชบนอินสแตนซ์เพื่อดึงแบบสอบถามที่คุณเพิ่งเรียกใช้ (หรือพยายามอย่างน้อย):

SELECT  dest.text
FROM    sys.dm_exec_query_stats AS deqs
        CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE   deqs.last_execution_time > '5/19/2011 11:00'
        AND dest.text LIKE 'WITH%';

ตัวเลือกเพิ่มเติมสองสามตัวที่ถูกบันทึกไว้ในความคิดเห็นของบล็อกของ Grant:


1
นั่นเป็นบทความที่ดี! ขอบคุณ! และตามบทความของ Grant ไฟล์กู้คืนการสืบค้นสำรองใน SQL Server Management Studioอาจเป็นประโยชน์
แมเรียน

คำตอบนี้สามารถนำเข้าได้หากระบุเวอร์ชันของ sqlserver ที่ใช้งานได้ ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามเรียกใช้: ไวยากรณ์ไม่ถูกต้องใกล้กับ '.' ในปี 2008
Michael Potter

สามารถนำเข้า? @MichaelPotter คัดลอกและวางระหว่างเบราว์เซอร์และเครื่องมืออื่น ๆ โดยทั่วไปจะเปลี่ยนเครื่องหมายคำพูดและข้อความอื่น ๆ ฉันไม่สามารถควบคุมส่วนนั้นได้
Shawn Melton

ขออภัยโปรดแก้ไขคำถามของฉัน ... s / นำเข้า / ปรับปรุง /
Michael Potter

16

ปี 2005+ การติดตามเริ่มต้นไปที่การช่วยเหลือ

การติดตามเริ่มต้นจะเลื่อนไปที่ 20mb แต่ SQL จะเก็บรักษาประวัติของการติดตาม 5 รายการไว้ ด้วยการเข้าถึงเซิร์ฟเวอร์คุณสามารถดึงไฟล์ * .trc จากไดเรกทอรี MSSQL \ Log หากคุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ข้อมูลต่อไปนี้จะให้ชื่อไฟล์การติดตามเริ่มต้นปัจจุบันแก่คุณ:

SELECT * FROM ::fn_trace_getinfo(default) 

หากไฟล์ปัจจุบันเป็นเช่น E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc ไฟล์ก่อนหน้านี้ควรเป็น log_199.trc, log_198.trc เป็นต้นรับเนื้อหาของการติดตามด้วย:

SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)

13

คุณอาจจะสามารถที่จะดึงข้อมูลจากแผนแบบสอบถามแคชตรวจสอบ BOL สำหรับข้อมูลเกี่ยวกับ sys.dm_exec_query_stats หรือทำงานนี้จากสตูดิโอการจัดการการเชื่อมต่อกับฐานข้อมูลเดียวกัน:

SELECT  d.plan_handle ,
        d.sql_handle ,
        e.text

FROM    sys.dm_exec_query_stats d
        CROSS APPLY sys.dm_exec_sql_text(d.plan_handle) AS e

กรองผลลัพธ์ด้วย

WHERE text like '%something%'

เพื่อ จำกัด ผลลัพธ์


9

หากฐานข้อมูลอยู่ในโหมดการกู้คืนแบบเต็มดังนั้นอาจมีโอกาสกู้คืนข้อมูลบางส่วนและรับข้อมูลเชิงลึกเกี่ยวกับสิ่งที่ทำโดยการอ่านบันทึกธุรกรรม

น่าเสียดายที่นี่ไม่ได้รับการสนับสนุนตามค่าเริ่มต้น แต่มีวิธีในการทำเช่นนี้

คุณสามารถลองใช้เครื่องมือของบุคคลที่สามเช่นApexSQL LogหรือSQL Log Rescue (ฟรียกเว้น SQL 2000 เท่านั้น)

อีกตัวเลือกหนึ่งคือลองใช้ฟังก์ชั่นที่ไม่มีเอกสาร DBCC LOG หรือ fn_dblog มันซับซ้อนกว่า แต่ฟรี


0

หากฐานข้อมูลของคุณถูกตั้งค่าเป็นรูปแบบการกู้คืนแบบเต็มคุณสามารถตรวจสอบการสำรองข้อมูลบันทึกธุรกรรมของคุณ ดูfn_dump_dblogข้อมูลเพิ่มเติม


0

ApexSQLมีฟังก์ชัน 'เรียกใช้งานคำสั่ง' ซึ่งช่วยให้คุณค้นหาและกรองตามวันที่

ฉันไม่แน่ใจว่ามันดึงประวัติจากแคช SSMS หรือติดตามตัวมันเอง คุณสามารถลองติดตั้งและหวังว่าจะดีที่สุด


สิ่งนี้มีไว้สำหรับสิ่งที่คุณเรียกใช้โดยตรงในหน้าต่างแบบสอบถามและคุณต้องเปิดการบันทึก
Chris Bordeman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.