SQL Server veritabanında çalışan Geçmiş Sorguları görebilir miyim?


38

Birisi uzaktan SQL Server veritabanımızda bir sorgu yapıyordu ve sistemleri çöktü.

Bu sorgunun yedeği yok ve sunucuda neyin çalıştırıldığını görmek istiyorlar.

Bu sorguyu bir günlükte veya bir yerde bir yerde bulmak mümkün müdür?


Bir kayıtta değil. Bir TFS veya SourceSafe sürüm kontrol sistemine mi girdiniz? Sonuç txt olarak ayarlandı böylece yeniden yaratılabilir mi?
jl01

2
Gelecekteki tasarım için tetikleyiciler ve denetim / geçmiş tabloları eklemeyi düşünebilirsiniz. O zaman son güncellenen zaman / kullanıcıdan yararlanabilecek.
Thomas Stringer

Yanıtlar:


39

Benzer Grant Fritchey, SSMS'yi kapattığı ve üzerinde çalıştığı sorguyu kaybettiği sorunu yaşadı ... burada blog yazdı: Oh **********!

DÜZENLE

Bunu bir cevabın biraz daha detaylı hale getirmek için, yukarıda verilen bağlantılı Grant, bir örnek olarak sadece yeni yaptığınız sorguyu (örneğin en az denemeye çalıştığınız) çıkarmak için basitçe önbelleğe gitmek için bir sorgu sağlar:

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'in blog yorumlarında belirtilen birkaç seçenek:


1
Güzel bir yazı! Teşekkürler! Ve Grant'in makalesini takiben , SQL Server Management Studio'daki Yedeklenmiş sorgu dosyalarını kurtarma yardımcı olabilir.
Marian,

Bu cevap hangi sqlserver sürümlerinde çalıştığını belirtirse aktarılabilir. Çalıştırmayı denediğimde bu hatayı alıyorum: '.' Yakınında yanlış sözdizimi. 2008.
Michael Potter

İçe aktarılabilir mi? @MichaelPotter Tarayıcı ve diğer araçlar arasında kopyala ve yapıştır genellikle alıntı işaretlerini ve diğer metni değiştirir, bu kısım üzerinde kontrol sahibi değilim.
Shawn Melton

Üzgünüm, lütfen sorumu düzeltin ... s / ithal / gelişmiş /
Michael Potter

16

2005+, kurtarma için varsayılan iz .

Varsayılan iz 20 MB’de yuvarlanır ancak SQL 5 iz geçmişini korur. Sunucuya erişim ile * .trc dosyalarını MSSQL \ Log dizininden alabilirsiniz. Sunucuya erişemiyorsanız, aşağıdakiler geçerli varsayılan izleme dosyasının adını verir:

SELECT * FROM ::fn_trace_getinfo(default) 

Geçerli dosya örneğin E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc ise, önceki dosyalar log_199.trc, log_198.trc vb olmalıdır. İzlemenin içeriğini aşağıdakilerle alın:

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

13

Sen belki , önbelleğe alınan sorgu planları hakkında bilgi almak sys.dm_exec_query_stats üzerine bilgi için BOL kontrol etmek veya aynı veritabanına bağlı yönetim stüdyo bu çalıştıramaz:

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

Çıktısını ile filtrele

WHERE text like '%something%'

sonuçları daraltmak için.


9

Veritabanının tam kurtarma modunda olması durumunda, bazı verileri kurtarma ve işlem günlüğünü okuyarak neler yapıldığı hakkında bilgi edinme şansı olabilir.

Ne yazık ki bu, varsayılan olarak desteklenmiyor, ancak bunu yapmanın yolları var.

ApexSQL Günlüğü veya SQL Günlüğü Kurtarma gibi üçüncü taraf araçlarını kullanmayı deneyebilirsiniz (sadece ücretsiz, ancak SQL 2000).

Başka bir seçenek de belgelenmemiş fonksiyonları DBCC LOG veya fn_dblog kullanarak denemektir. Bu daha karmaşık ama ücretsiz.


0

Veritabanınız tam kurtarma modeline ayarlanmışsa işlem günlüğü yedeklemenizi inceleyebilirsiniz. Daha fn_dump_dblogfazla bilgi için bakınız .


0

ApexSQL , tarihe göre arama yapmanızı ve filtrelemenizi sağlayan 'Yürütülmüş sorgular' işlevine sahiptir.

Geçmişi SSMS önbelleğinden mi çektiğinden veya gerçekten kendi başına takip ettiğinden emin değilim. Yüklemeyi deneyebilir ve en iyisini umabilirsiniz.


Bu sadece doğrudan sorgu pencerelerinde yürüttüğünüz şeyler içindir ve kaydetmeyi açmanız gerekir.
Chris Bordeman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.