Транзакции. Восстановление. Классический алгоритм — различия между версиями
Nauru (обсуждение | вклад) (Новая страница: «==Восстановление== Восстановление в системе баз данных означает, в первую очередь, восста...») |
м (rollbackEdits.php mass rollback) |
||
(не показано 6 промежуточных версий 2 участников) | |||
Строка 10: | Строка 10: | ||
==Журнал восстановления== | ==Журнал восстановления== | ||
− | в системе ведется | + | в системе ведется журнал на ленте или (чаще всего) на диске, в котором регистрируются подробные сведения обо всех обновлениях, в частности, значения обновляемых объектов (например кортежей) до и после каждого обновления Запись контрольной точки содержит список всех транзак- |
− | журнал на ленте или (чаще всего) на диске, в котором регистрируются подробные сведения обо всех обновлениях, в частности, значения обновляемых объектов (например кортежей) до и после каждого обновления.[[Файл:12.jpg]] | + | ций, выполняемых в тот момент, когда создавалась контрольная точка.[[Файл:12.jpg|right]] |
Отказ системы произошел в момент времени tf. | Отказ системы произошел в момент времени tf. | ||
Ближайшая к моменту tf контрольная точка была создана в момент времени tc. | Ближайшая к моменту tf контрольная точка была создана в момент времени tc. | ||
− | Транзакция типа Т1 успешно завершена до момента времени tc. | + | * Транзакция типа Т1 успешно завершена до момента времени tc. |
− | Транзакция типа Т2 начата до момента tc и успешно завершена после момента | + | * Транзакция типа Т2 начата до момента tc и успешно завершена после момента времени tc, но до момента времени tf. |
− | времени tc, но до момента времени tf. | + | * Транзакция типа ТЗ также начата до момента времени tc, но не завершена к моменту времени tf. |
− | * Транзакция типа ТЗ также начата до момента времени tc, но не завершена к | + | * Транзакция типа Т4 начата после момента времени tc и успешно завершена до момента времени tf. |
− | + | * Наконец, транзакция типа Т5 также начата после момента tc, но не завершена к моменту времени tf | |
− | * Транзакция типа Т4 начата после момента времени tc и успешно завершена до | + | |
− | момента времени tf. | + | ==Классический алгоритм== |
− | * Наконец, транзакция типа Т5 также начата после момента tc, но не завершена к | + | 1. Создаются два списка транзакций; назовем их UNDO (Отменить) и REDO (Выполнить повторно). |
− | моменту времени tf | + | |
+ | 2. В список UNDO заносятся все транзакции, упомянутые в последней из существующих записей контрольной точки, a cписок REDO пока остается пустым. | ||
+ | |||
+ | 3. В журнале регистрации поиск начинается с записи контрольной точки и происходит в прямом направлении. | ||
+ | |||
+ | 4. Если в журнале регистрации обнаружена запись BEGIN TRANSACTION с указанием о начале выполнения некоторой транзакции т, то эта транзакция добавляется в | ||
+ | СПИСОК UNDO. | ||
+ | |||
+ | 5. Если в журнале регистрации обнаружена запись COMMIT, свидетельствующая об окончании выполнения некоторой транзакции т, эта транзакция переносится из | ||
+ | СПИСКа UNDO В СПИСОК REDO. | ||
+ | |||
+ | 6. По достижении конца файла журнала регистрации списки UNDO и REDO анализируются для выявления, соответственно, транзакций типов ТЗ и Т5, а также типов | ||
+ | Т2 и Т4. |
Текущая версия на 19:03, 4 сентября 2022
Восстановление
Восстановление в системе баз данных означает, в первую очередь, восстановление самой базы данных, т.е. возвращение базы данных в определенное состояние, которое считается правильным, после некоторого сбоя, в результате которого текущее состояние становится неправильным.
Транзакции
Транзакция — это логическая единица работы; она начинается с выполнения операции BEGIN TRANSACTION и заканчивается операцией COMMIT(зафиксировать) или ROLLBACK(откатить все изменения).
Журнал восстановления
в системе ведется журнал на ленте или (чаще всего) на диске, в котором регистрируются подробные сведения обо всех обновлениях, в частности, значения обновляемых объектов (например кортежей) до и после каждого обновления Запись контрольной точки содержит список всех транзак-
ций, выполняемых в тот момент, когда создавалась контрольная точка.Отказ системы произошел в момент времени tf. Ближайшая к моменту tf контрольная точка была создана в момент времени tc.
- Транзакция типа Т1 успешно завершена до момента времени tc.
- Транзакция типа Т2 начата до момента tc и успешно завершена после момента времени tc, но до момента времени tf.
- Транзакция типа ТЗ также начата до момента времени tc, но не завершена к моменту времени tf.
- Транзакция типа Т4 начата после момента времени tc и успешно завершена до момента времени tf.
- Наконец, транзакция типа Т5 также начата после момента tc, но не завершена к моменту времени tf
Классический алгоритм
1. Создаются два списка транзакций; назовем их UNDO (Отменить) и REDO (Выполнить повторно).
2. В список UNDO заносятся все транзакции, упомянутые в последней из существующих записей контрольной точки, a cписок REDO пока остается пустым.
3. В журнале регистрации поиск начинается с записи контрольной точки и происходит в прямом направлении.
4. Если в журнале регистрации обнаружена запись BEGIN TRANSACTION с указанием о начале выполнения некоторой транзакции т, то эта транзакция добавляется в СПИСОК UNDO.
5. Если в журнале регистрации обнаружена запись COMMIT, свидетельствующая об окончании выполнения некоторой транзакции т, эта транзакция переносится из СПИСКа UNDO В СПИСОК REDO.
6. По достижении конца файла журнала регистрации списки UNDO и REDO анализируются для выявления, соответственно, транзакций типов ТЗ и Т5, а также типов Т2 и Т4.