Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đọc nhật ký giao dịch SQL Server

Bạn có thể sử dụng sys.fn_dblog để đọc nhật ký giao dịch. Ví dụ bên dưới.

SELECT [RowLog Contents 0],
       [RowLog Contents 1],
       [Current LSN],
       Operation,
       Context,
       [Transaction ID],
       AllocUnitId,
       AllocUnitName,
       [Page ID],
       [Slot ID]
FROM sys.fn_dblog(NULL,NULL)
WHERE Context IN ('LCX_MARK_AS_GHOST', 'LCX_HEAP', 'LCX_CLUSTERED') 
AND Operation IN ('LOP_DELETE_ROWS', 'LOP_INSERT_ROWS') 

Đối với deleteinsert hoạt động IIRC [RowLog Contents 0] chứa toàn bộ hàng được chèn và xóa. Các bản cập nhật phức tạp hơn một chút ở chỗ chỉ có thể ghi một phần hàng.

Để giải mã định dạng hàng này, bạn cần hiểu cách các hàng được lưu trữ nội bộ trong SQL Server. Cuốn sách Nội bộ Microsoft SQL Server 2008 bao gồm điều này trong một số chi tiết. Bạn cũng có thể tải xuống SQL Server Internals Viewer để trợ giúp về vấn đề này (Và tôi tin rằng mã nguồn của Mark Rasmussen của Orca MDF cũng có sẵn mà có lẽ có một số mã để giải mã định dạng hàng nội bộ).

Để biết ví dụ về việc thực hiện điều này trong TSQL, hãy xem bài đăng trên blog này điều này chứng tỏ rằng hoàn toàn có thể trích xuất thông tin hữu ích từ nhật ký miễn là mục tiêu của dự án còn hạn chế. Viết một trình đọc nhật ký hoàn chỉnh có thể đối phó với những thay đổi lược đồ trong các đối tượng và những thứ như cột thưa thớt (và chỉ mục lưu trữ cột trong phiên bản tiếp theo) có thể sẽ là một khối lượng công việc lớn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cú pháp cho một truy vấn tham số trong Python (pyodbc)

  2. THỜI GIAN THỐNG KÊ trong SQL Server là gì?

  3. Excel 32-bit và SQL Server 64-bit

  4. Cách hoạt động của hàm STRING_ESCAPE () trong SQL Server (T-SQL)

  5. Tìm kết hợp chính xác bằng cách sử dụng tìm kiếm toàn văn