Tôi có thể xem Truy vấn lịch sử chạy trên cơ sở dữ liệu SQL Server không?


38

Ai đó đang chạy một truy vấn trên cơ sở dữ liệu SQL Server của chúng tôi từ xa và hệ thống của họ bị sập.

Họ không có bản sao lưu của truy vấn đó và muốn xem những gì đã được chạy trên máy chủ.

Có thể tìm thấy truy vấn này trong một bản ghi hoặc trong một lịch sử ở đâu đó?


Không phải trong một bản ghi. Đã kiểm tra vào hệ thống kiểm soát phiên bản TFS hoặc SourceSafe? Kết quả đặt ra một txt để nó có thể được tạo lại?
jl01

2
Đối với thiết kế trong tương lai, bạn có thể muốn xem xét thêm trình kích hoạt và bảng kiểm toán / lịch sử. Sau đó sẽ có thể sử dụng thời gian / người dùng cập nhật mới nhất.
Thomas Stringer

Câu trả lời:


39

Tương tự Grant Fritchey có vấn đề trong đó anh ta đã đóng SSMS và mất truy vấn mà anh ta đang làm việc ... viết blog ở đây: Oh **********!

CHỈNH SỬA

Để làm cho chi tiết hơn một chút về câu trả lời, tham chiếu được liên kết ở trên Grant cung cấp một truy vấn chỉ đơn giản là đi tới bộ đệm trong ví dụ để lấy ra truy vấn bạn vừa thực hiện (hoặc ít nhất là cố gắng):

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

Một vài lựa chọn khác đã được ghi nhận trong các bình luận trên blog của Grant:


1
Đó là một bài viết tốt đẹp! Cảm ơn! Và theo bài viết của Grant, Khôi phục các tệp truy vấn đã sao lưu trong SQL Server Management Studio có thể hữu ích.
Mary

Câu trả lời này có thể được nhập nếu nó cho biết phiên bản nào của sqlserver mà nó hoạt động. Tôi gặp lỗi này khi tôi cố chạy nó: Cú pháp không chính xác gần '.'. vào năm 2008
Michael Potter

Có thể nhập khẩu? @MichaelPotter Sao chép và dán giữa trình duyệt và các công cụ khác sẽ thường thay đổi dấu ngoặc kép và văn bản khác, tôi không kiểm soát phần đó.
Shawn Melton

Xin lỗi, xin vui lòng sửa câu hỏi của tôi ... s / nhập khẩu / cải thiện /
Michael Potter

16

2005+, dấu vết mặc định để giải cứu.

Dấu vết mặc định cuộn ở mức 20mb nhưng SQL vẫn giữ nguyên lịch sử của 5 dấu vết. Với quyền truy cập vào máy chủ, bạn có thể truy xuất các tệp * .trc từ thư mục MSSQL \ Log. Nếu bạn không thể truy cập máy chủ, phần sau đây sẽ cung cấp cho bạn tên của tệp theo dõi mặc định hiện tại:

SELECT * FROM ::fn_trace_getinfo(default) 

Nếu tệp hiện tại là ví dụ E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc, các tệp trước đó phải là log_199.trc, log_198.trc, v.v. Lấy nội dung của dấu vết với:

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

13

Bạn thể truy xuất thông tin từ các gói truy vấn được lưu trong bộ nhớ cache, kiểm tra BOL để biết thông tin về sys.dm_exec_query_stats hoặc chạy thông tin này từ phòng quản lý được kết nối với cùng một cơ sở dữ liệu:

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

Lọc đầu ra với

WHERE text like '%something%'

để thu hẹp kết quả.


9

Nếu cơ sở dữ liệu ở chế độ khôi phục hoàn toàn thì có thể có cơ hội khôi phục một số dữ liệu và hiểu rõ hơn về những gì đã được thực hiện bằng cách đọc nhật ký giao dịch.

Thật không may, điều này không được hỗ trợ theo mặc định nhưng có nhiều cách để làm điều này.

Bạn có thể thử sử dụng các công cụ của bên thứ ba như ApexSQL Log hoặc SQL Log Rescue (chỉ miễn phí nhưng chỉ có SQL 2000).

Một tùy chọn khác là thử sử dụng các hàm không có giấy tờ DBCC LOG hoặc fn_dblog. Điều này phức tạp hơn nhưng nó miễn phí.


0

Nếu cơ sở dữ liệu của bạn được đặt thành mô hình khôi phục đầy đủ, bạn có thể điều tra các bản sao lưu nhật ký giao dịch của mình. Xem fn_dump_dblogđể biết thêm thông tin.


0

ApexSQL có chức năng 'Truy vấn đã thực hiện' cho phép bạn tìm kiếm và lọc theo ngày.

Tôi không chắc liệu nó có lấy lịch sử từ bộ đệm SSMS hay thực sự tự theo dõi nó. Bạn có thể thử cài đặt nó và hy vọng điều tốt nhất.


Điều đó chỉ dành cho những thứ bạn thực hiện trực tiếp trong các cửa sổ truy vấn và bạn phải bật lưu.
Chris Bordeman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.