Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Прочетете регистъра на транзакциите на SQL Server

Можете да използвате sys.fn_dblog за четене на регистъра на транзакциите. Пример по-долу.

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') 

За delete и insert операция IIRC [RowLog Contents 0] съдържа целия ред, вмъкнат и изтрит. Актуализациите са малко по-сложни, тъй като само частичен ред може да бъде регистриран.

За да декодирате този формат на ред, трябва да разберете как редовете се съхраняват вътрешно в SQL Server. Книгата Microsoft SQL Server 2008 Internals обхваща това в някои подробности. Можете също така да изтеглите инструмента за преглед на вътрешните елементи на SQL Server да помогне в това отношение (И вярвам, че изходният код за Марк Расмусен Orca MDF на също е наличен, който вероятно има някакъв код за декодиране на вътрешния формат на ред).

За пример за извършване на това в TSQL вижте тази публикация в блог което показва, че е напълно възможно да се извлече полезна информация от дневника, стига целта на проекта да е ограничена. Написването на пълноценен четец на журнали, който би могъл да се справи с промените в схемата в обектите и неща като редки колони (и индекси за съхраняване на колони в следващата версия), вероятно ще бъде огромно количество работа.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете последния ден от месеца в SQL

  2. Въведение в функциите с таблично стойности с множество оператори (MSTVF) в SQL Server

  3. Оптимизация на SQL заявки

  4. Преобразуване на SQL2008 RDL файл в SQL2005

  5. SQL Server - Как да записвам променливи и резултати от заявка в текстов файл?