Bisakah saya melihat query historis dijalankan pada database SQL Server?

38

Seseorang menjalankan kueri pada basis data SQL Server kami dari jarak jauh dan sistem mereka macet.

Mereka tidak memiliki cadangan permintaan itu dan ingin melihat apa yang dijalankan di server.

Apakah mungkin untuk menemukan kueri ini dalam log atau dalam sejarah di suatu tempat?

pengguna87094
sumber
Tidak dalam log. Diperiksa dalam sistem kontrol versi TFS atau SourceSafe? Hasil berangkat ke txt sehingga dapat dibuat kembali?
jl01
2
Untuk desain mendatang, Anda mungkin ingin mempertimbangkan untuk menambahkan pemicu dan tabel audit / riwayat. Maka akan dapat memanfaatkan waktu / pengguna yang terakhir diperbarui.
Thomas Stringer

Jawaban:

40

Hibah yang serupa Fritchey memiliki masalah di mana ia telah menutup SSMS dan kehilangan kueri yang sedang dikerjakannya ... di-blog di sini: Oh **********!

EDIT

Untuk membuat ini sedikit lebih detail dari jawaban, referensi yang ditautkan di atas Hibah memberikan kueri untuk langsung pergi ke cache pada instance untuk menarik kueri yang baru saja Anda jalankan (atau setidaknya mencoba untuk):

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%';

Beberapa opsi lagi yang dicatat dalam komentar blog Grant:

Shawn Melton
sumber
1
Itu artikel yang bagus! Terima kasih! Dan mengikuti artikel Grant, memulihkan file permintaan yang didukung dalam SQL Server Management Studio mungkin membantu.
Marian
Jawaban ini dapat diimpor jika menyatakan versi sqlserver yang berfungsi. Saya mendapatkan kesalahan ini ketika saya mencoba menjalankannya: Sintaks salah dekat '.'. pada 2008.
Michael Potter
Bisakah diimpor? @MichaelPotter Salin dan tempel antara peramban dan alat lain biasanya akan mengubah tanda kutip dan teks lainnya, saya tidak punya kendali atas bagian itu.
Shawn Melton
Maaf, mohon perbaiki pertanyaan saya ... s / impor / ditingkatkan /
Michael Potter
16

2005+, penelusuran default ke penyelamatan.

Jejak default berguling pada 20mb tetapi SQL mempertahankan sejarah 5 jejak. Dengan akses ke server Anda dapat mengambil file * .trc dari direktori MSSQL \ Log. Jika Anda tidak dapat mengakses server, berikut ini akan memberi Anda nama file jejak default saat ini:

SELECT * FROM ::fn_trace_getinfo(default) 

Jika file saat ini misalnya E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc, file sebelumnya harus log_199.trc, log_198.trc dll. Dapatkan konten penelusuran dengan:

SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)
Mark Storey-Smith
sumber
13

Anda mungkin dapat mengambil info dari paket kueri yang di-cache, memeriksa BOL untuk info di sys.dm_exec_query_stats, atau menjalankan ini dari studio manajemen yang terhubung ke database yang sama:

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

Saring output dengan

WHERE text like '%something%'

untuk mempersempit hasil.

SqlACID
sumber
9

Jika database dalam mode pemulihan penuh maka mungkin ada peluang untuk memulihkan beberapa data dan mendapatkan wawasan tentang apa yang dilakukan dengan membaca log transaksi.

Sayangnya ini tidak didukung secara default tetapi ada cara untuk melakukan ini.

Anda dapat mencoba menggunakan alat pihak ketiga seperti ApexSQL Log atau SQL Log Rescue (gratis tetapi hanya SQL 2000).

Pilihan lain adalah mencoba menggunakan fungsi DBCC LOG atau fn_dblog yang tidak didokumentasikan. Ini lebih kompleks tetapi gratis.

Stanley Norman
sumber
0

Jika basis data Anda disetel ke model pemulihan penuh, Anda dapat menyelidiki cadangan log transaksi Anda. Lihat fn_dump_dbloguntuk informasi lebih lanjut.

Matthias Elflein
sumber
0

ApexSQL memiliki fungsionalitas ' Permintaan yang dijalankan ' yang memungkinkan Anda mencari dan memfilter menurut tanggal.

Saya tidak yakin apakah itu menarik sejarah dari cache SSMS atau benar-benar melacaknya dengan sendirinya. Anda dapat mencoba menginstalnya dan berharap yang terbaik.

bvh9000
sumber
Itu hanya untuk hal-hal yang Anda jalankan secara langsung di jendela kueri, dan Anda harus mengaktifkan penyimpanan.
Chris Bordeman