it-swarm.asia

Bisakah saya melihat query historis dijalankan pada database SQL Server?

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

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

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

40
user87094

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

[~ # ~] sunting [~ # ~]

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 upaya 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 di komentar blog Grant:

44
user507

2005+, jejak 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)
18

Anda mungkin dapat mengambil info dari paket kueri yang di-cache, memeriksa BOL untuk info tentang 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.

14
SqlACID

Jika database berada 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.

9
Stanley Norman

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.

0
bvh9000

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

0
Matthias Elflein