2009-10-07 2 views
4

Я заинтересован в том, как транзакции базы данных «обычно» реализуются в системе базы данных, как, например, MySQL.Есть ли точка прерывания, когда транзакция базы данных будет повреждена?

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

ответ

6

Если система базы данных тщательно написана, что не должен быть никакого смысла времени, когда отключение питания может повредить данные, и когда происходит отключение питания, не зафиксированные данные никогда не должны быть потеряны.

РСУБД записывает данные первого в журнал транзакций до фактического обновления данных. После сбоя он повторяет журнал, копирует любые ожидающие изменения из журнала в базу данных и откатывает любые транзакции, которые не были завершены в журнале. Commit сообщается как успешный только после того, как жесткий диск сообщил о завершенной операции записи в журнал.

1

Обычно, что DB пишет в журналы во время обновления. Затем он может сказать, что не удалось завершить свою работу как одну транзакцию и использовать журналы для ROLL BACK изменений.

+0

жаль - при перезагрузке он будет проверять журналы и откат - не с силой выхода :) – Davy

2

Базы данных следуют ACID свойства. Независимо от того, когда что-то взрывается, есть способ, по крайней мере, вернуться к известному правильному состоянию.

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