มีคนกำลังเรียกใช้แบบสอบถามบนฐานข้อมูล SQL Server ของเราจากระยะไกลและระบบของพวกเขาล้มเหลว
พวกเขาไม่มีการสำรองข้อมูลของแบบสอบถามนั้นและต้องการดูสิ่งที่ถูกเรียกใช้บนเซิร์ฟเวอร์
เป็นไปได้หรือไม่ที่จะค้นหาข้อความค้นหานี้ในบันทึกหรือในบางแห่ง?
มีคนกำลังเรียกใช้แบบสอบถามบนฐานข้อมูล SQL Server ของเราจากระยะไกลและระบบของพวกเขาล้มเหลว
พวกเขาไม่มีการสำรองข้อมูลของแบบสอบถามนั้นและต้องการดูสิ่งที่ถูกเรียกใช้บนเซิร์ฟเวอร์
เป็นไปได้หรือไม่ที่จะค้นหาข้อความค้นหานี้ในบันทึกหรือในบางแห่ง?
คำตอบ:
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:
ปี 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)
คุณอาจจะสามารถที่จะดึงข้อมูลจากแผนแบบสอบถามแคชตรวจสอบ 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%'
เพื่อ จำกัด ผลลัพธ์
หากฐานข้อมูลอยู่ในโหมดการกู้คืนแบบเต็มดังนั้นอาจมีโอกาสกู้คืนข้อมูลบางส่วนและรับข้อมูลเชิงลึกเกี่ยวกับสิ่งที่ทำโดยการอ่านบันทึกธุรกรรม
น่าเสียดายที่นี่ไม่ได้รับการสนับสนุนตามค่าเริ่มต้น แต่มีวิธีในการทำเช่นนี้
คุณสามารถลองใช้เครื่องมือของบุคคลที่สามเช่นApexSQL LogหรือSQL Log Rescue (ฟรียกเว้น SQL 2000 เท่านั้น)
อีกตัวเลือกหนึ่งคือลองใช้ฟังก์ชั่นที่ไม่มีเอกสาร DBCC LOG หรือ fn_dblog มันซับซ้อนกว่า แต่ฟรี
หากฐานข้อมูลของคุณถูกตั้งค่าเป็นรูปแบบการกู้คืนแบบเต็มคุณสามารถตรวจสอบการสำรองข้อมูลบันทึกธุรกรรมของคุณ ดูfn_dump_dblog
ข้อมูลเพิ่มเติม
ApexSQLมีฟังก์ชัน 'เรียกใช้งานคำสั่ง' ซึ่งช่วยให้คุณค้นหาและกรองตามวันที่
ฉันไม่แน่ใจว่ามันดึงประวัติจากแคช SSMS หรือติดตามตัวมันเอง คุณสามารถลองติดตั้งและหวังว่าจะดีที่สุด