Lần cuối dữ liệu được chèn / cập nhật / xóa trong bảng là khi nào?


7

Tôi đã tìm thấy giải pháp này , nhưng thông tin này bị mất mỗi khi dịch vụ SQL Server được khởi động lại, hay nói cách khác, nó không còn tồn tại.

Có cách nào khác để tôi có thể tìm ra khi một bảng được cập nhật lần cuối ngay cả khi máy chủ đã bị tắt sau khi thực tế không?


8
Nếu điều này rất quan trọng, bạn có thể cần thêm một số kích hoạt. SQL Server không giữ thông tin này theo mặc định vì nó có thể rất tốn kém.
JNK

Đồng ý với JNK. Bạn sẽ muốn một số loại theo dõi được cập nhật mới nhất thực sự được ghi vào bảng.
Eric Higgins

2
@JNK Tôi đang nghiên cứu một số loại cơ chế kiểm toán như cơ chế bạn đang đề xuất, nhưng trong trường hợp cụ thể này, tôi cần dữ liệu hồi tố.
ivanmp

2
@ivanmp không thể nhận retro. Nếu SQL Server lưu trữ dữ liệu này, thì bạn sẽ cần một% lớn kích thước dữ liệu của mình trong các bảng kiểm toán để được duy trì.
JNK

Câu trả lời:


6

Nếu dữ liệu trong giải pháp khác được bạn chấp nhận, thì bạn có thể chỉ cần cuộn bộ sưu tập dữ liệu của riêng mình để duy trì dữ liệu. Ví dụ: tạo một bảng để lưu trữ object_id và tìm kiếm / quét / cập nhật lần cuối. Cứ sau n phút, hãy chụp nhanh DMV. Sau đó kiểm tra max trong ảnh chụp nhanh và nếu nó lớn hơn max trong rollup, hãy cập nhật rollup. Bạn có thể giữ các ảnh chụp nhanh như lịch sử hoặc bạn có thể dọn sạch chúng theo thời gian sau khi kết hợp lại.


3

Nếu bạn có quyền truy cập vào phiên bản SQL Server Enterprise, hãy xem Theo dõi thay đổi . Đó là một giải pháp khá phức tạp, tuy nhiên. Cuối cùng, có thể dễ dàng hơn để thêm một cột LastUpdated, như đã đề xuất.


3

Tôi cũng sẽ chỉ ra rằng bạn sẽ có được tốc độ tốt hơn bằng cách tạo bảng nhật ký (theo dõi các phần chèn / xóa / cập nhật) hoặc thêm cờ có ngày vào hồ sơ của bạn (sẽ tốn thêm dung lượng đĩa cho mỗi bản ghi).

Dù theo cách nào thì SQL Server không theo dõi điều này theo mặc định vì nó sẽ tốn kém cho DB giao dịch cao


0

Điều này có thể hữu ích cho bạn:

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, 
    last_user_update, *
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'Database Name');

2
Bạn đã đọc các ý kiến ​​cho câu hỏi và câu trả lời? Ít nhất bạn nên giải quyết các điểm được đưa lên đó (ví dụ: SQL Server không giữ thông tin này theo mặc định vì nó có thể rất tốn kém. )
dezso

2
Cũng trong chính câu hỏi bạn đang trả lời: this information is lost everytime the SQL Server service is restarted- câu trả lời này giải quyết vấn đề đó như thế nào?
Aaron Bertrand
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.