Skip to content

39. Логическая архитектура журнала транзакций в SQL Server

Pandas edited this page Jan 2, 2018 · 1 revision

На логическом уровне журнал транзакций состоит из последовательности записей. Каждая запись содержит:

  • Log Sequence Number: регистрационный номер транзакции (LSN). Каждая новая запись добавляется в логический конец журнала с номером LSN, который больше номера LSN предыдущей записи.
  • Prev LSN: обратный указатель, который предназначен для ускорения отката транзакции.
  • Transaction ID number: идентификатор транзакции.
  • Type: тип записи Log-файла.
  • Other information: Прочая информация.

Двумя основными типами записи Log-файла являются:

  • Transaction Log Operation Code: код выполненной логической операции, либо
  • Update Log Record: исходный и результирующий образ измененных данных. Исходный образ записи – это копия данных до выполнения операции, а результирующий образ – копия данных после ее выполнения.

Действия, которые необходимо выполнить для восстановления операции, зависят от типа Log-записи:

  • Зарегистрирована логическая операция.
    • Для наката логической операции выполняется эта операция.
    • Для отката логической операции выполняется логическая операция, обратная зарегистрированной.
  • Зарегистрированы исходный и результирующий образы записи.
    • Для наката операции применяется результирующий образ.
    • Для отката операции применяется исходный образ.

В журнал транзакций записываются различные типы операций:
0. BEGINXACT: Begin Transaction
4. Insert
5. Delete
6. Indirect Insert
7. Index Insert
8. Index Delete
9. MODIFY: Modify the record on the page
11. Deferred Insert (NO-OP)
12. Deferred Delete (NO-OP)
13. Page Allocation
15. Extent Allocation
16. Page Split
17. Checkpoint
20. DEXTENT
30. End Transaction (Either a commit or rollback)
38. CHGSYSINDSTAT — A change to the statistics page in sysindexes
39. CHGSYSINDPG — Change to a page in the sysindexes table

Каждая транзакция резервирует в журнале транзакций место, чтобы при выполнении инструкции отката или возникновения ошибки в журнале было достаточно места для регистрации отката. Объем резервируемого пространства зависит от выполняемых в транзакции операций, но обычно он равен объему, необходимому для регистрации каждой из операций. Все это пространство после завершения транзакции освобождается.

Раздел журнального файла, который начинается от первой записи, необходимой для успешного отката на уровне базы данных, до последней зарегистрированной записи называется активной частью журнала, или активным журналом. Именно этот раздел необходим для выполнения полного восстановления базы данных. Активный журнал не может быть усечен.

Clone this wiki locally