it-swarm.asia

هل يمكنني رؤية الاستعلامات التاريخية تعمل على قاعدة بيانات SQL Server؟

قام شخص ما بتشغيل استعلام في قاعدة بيانات SQL Server الخاصة بنا عن بعد وتعطل نظامه.

ليس لديهم نسخة احتياطية من هذا الاستعلام ويريدون رؤية ما تم تشغيله على الخادم.

هل من الممكن العثور على هذا الاستعلام في سجل أو في محفوظات في مكان ما؟

40
user87094

مماثلة غرانت فريتشي واجه مشكلة حيث أغلق SSMS وفقد الاستعلام الذي كان يعمل عليه ... المدون هنا: يا **********!

[~ # ~] تحرير [~ # ~]

لجعل هذا الأمر أكثر تفصيلاً للإجابة ، يوفر الرابط المشار إليه أعلاه منحة استعلامًا للانتقال ببساطة إلى ذاكرة التخزين المؤقت في المثيل لسحب الاستعلام الذي قمت به للتو (أو محاولة على الأقل):

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:

44
user507

2005+ ، التتبع الافتراضي للإنقاذ.

يتتبع التتبع الافتراضي عند 20 ميغابايت ولكن يحتفظ 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)
18
Mark Storey-Smith

يمكنك ربما أن تكون قادرًا على استرداد المعلومات من خطط الاستعلام المخزنة مؤقتًا ، أو التحقق من 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%'

لتضييق النتائج.

14
SqlACID

إذا كانت قاعدة البيانات في وضع الاسترداد الكامل ، فقد تكون هناك فرصة لاسترداد بعض البيانات والحصول على رؤى حول ما تم من خلال قراءة سجل المعاملات.

للأسف هذا غير مدعوم افتراضيًا ولكن هناك طرق للقيام بذلك.

يمكنك تجربة استخدام أدوات الطرف الثالث مثل ApexSQL Log أو SQL Log Rescue (مجانًا ولكن SQL 2000 فقط).

هناك خيار آخر وهو محاولة استخدام وظائف DBCC LOG أو fn_dblog. هذا أكثر تعقيدًا ولكنه مجاني.

9
Stanley Norman

ApexSQL لديه وظيفة "الاستعلامات المنفذة" التي تتيح لك البحث والتصفية حسب التاريخ.

لست متأكدًا مما إذا كان يسحب السجل من ذاكرة التخزين المؤقت لـ SSMS أو أنه يتتبعه بالفعل بنفسه. يمكنك محاولة تثبيته والأمل في الأفضل.

0
bvh9000

إذا تم تعيين قاعدة البيانات الخاصة بك على نموذج الاسترداد الكامل يمكنك التحقق من النسخ الاحتياطية سجل المعاملات الخاصة بك. نرى fn_dump_dblog لمزيد من المعلومات.

0
Matthias Elflein