2013-04-03 3 views
3

Мой вопрос касается того, как транзакции обрабатываются в SQL Server.транзакция SQL Server, где хранятся незафиксированные данные?

Допустим, у меня есть определенная пользователем транзакция, которая содержит много данных, где хранятся эти данные во время этого процесса? Он привязан только к файлу базы данных, если транзакция успешна, но где она находится заранее.

  • ли, что останется в памяти программы, создающей транзакции
  • к процессу памяти SQL сервера
  • это написано в журнал транзакций базы данных?
  • временные файлы или другое место на диске?

ответ

1

Несанкционированные данные записываются в соответствующую таблицу (таблицы), она просто не помечена как зафиксированная до совершения транзакции. Если транзакция отменяется, данные будут перезаписаны в следующий раз, когда произойдет запись, требующая затронутой страницы. После совершения транзакции данные в таблице фиксируются и не могут быть перезаписаны. Журнал содержит текущую запись того, что происходит в базе данных, чтобы транзакции можно было отбросить назад или вперед после сбоя системы или откат транзакции.

1

SQL Server использует ARIES запись на запись. Подробности описаны в How It Works: Bob Dorr's SQL Server I/O Presentation. Запись на основе записи требует, чтобы каждое изменение делало все данные в eb, описанные в записи журнала, чтобы восстановление сбоя могло восстановить базу данных. Чтобы отменить транзакцию, все, что нужно сделать, - это перевести журнал назад и создать компенсационное действие для каждой записи, сгенерированной транзакцией. Это фактически отменяет все транзакции. Two phase locking обеспечит бесперебойную работу компенсационной операции.

См. Также Inside the SQL Server Transaction Log и, конечно, ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging.

Смежные вопросы