- •Управление
- •Основные понятия
- •Основные понятия
- •Основные понятия
- •Управление параллельностью
- •Управление параллельностью
- •Управление параллельностью
- •Управление параллельностью
- •Управление параллельностью
- •Управление параллельностью
- •Управление параллельностью
- •Методы управления параллельностью
- •Методы управления параллельностью
- •Двухфазный протокол блокировки
- •Двухфазный протокол блокировки
- •Двухфазный протокол блокировки
- •Двухфазный протокол блокировки
- •Двухфазный протокол блокировки
- •Взаимные блокировки
- •Взаимные блокировки
- •Взаимные блокировки
- •Взаимные блокировки
- •Метод выявления взаимных блокировок
- •Метод предупреждения взаимных блокировок
- •Метод предупреждения взаимных блокировок
- •Гранулированные захваты (уровни блокировок)
- •Гранулированные захваты (уровни блокировок)
- •Гранулированные захваты (уровни блокировок)
- •Гранулированные захваты (уровни блокировок)
- •Гранулированные захваты (уровни блокировок)
- •Гранулированные захваты (уровни блокировок)
- •Управление транзакциями
- •Вложенные транзакции
- •Точки сохранения
- •Точки сохранения
- •Точки сохранения
- •Восстановление баз данных
- •Восстановление баз данных
- •Транзакции и восстановление
- •Журнал транзакций
- •Метод восстановления с использованием отложенного обновления
- •Метод восстановления с использованием отложенного обновления
- •Метод восстановления с использованием отложенного обновления
- •Метод восстановления с использованием
Гранулированные захваты (уровни блокировок)
Пример 2 |
SIX |
|
Та же транзакция
X нельзя (конфликт |
IS |
T |
IX |
|
|
|
|||
IX и SIX на верхнем |
|
|
||
|
|
X нельзя |
||
уровне) |
|
|
||
P1 |
P2 |
S нельзя |
||
S можно |
||||
|
||||
IS |
|
|
IX |
|
|
|
|
||
|
R1 |
|
R1 |
Trans2 (S) |
Trans1 (X, SIX) |
|
|
можно |
|
Управление транзакциями
Явные транзакции:
BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN
Автоматические (по умолчанию): каждая команда – отдельная транзакция
SET IMPLICIT_TRANSACTION OFF
Неявные транзакции: до ROLLBACK TRAN или COMMIT TRAN. Началом транзакции является одна из команд: ALTER TABLE, CREATE, DELETE, DROP, INSERT, SELECT и некоторые другие
SET IMPLICIT_TRANSACTION ON
Вложенные транзакции
Вложенные транзакции используются в хранимых процедурах. Такие хранимые процедуры могут выполняться внутри внешней транзакции, либо без явной внешней транзакции.
Внешняя транзакция BEGIN TRAN
COMMIT – фиксация транзакции ROLLBACK – откат действий внешней транзакции и вложенных транзакций
Вложенная транзакция |
COMMIT – игнорируется |
BEGIN TRANS |
ROLLBACK – откат внешней транзакции |
Функция @@TRANCOUNT возвращает уровень вложенности транзакции. BEGIN TRAN увеличивает @@TRANCOUNT на единицу
ROLLBACK без имени или с именем внешний транзакции уменьшают @@TRANCOUNT до нуля.
Точки сохранения
SAVE { TRAN | TRANSACTION } { savepoint_name | @savepoint_variable } [ ; ]
Устанавливает точку сохранения внутри транзакции. Точка сохранения определяет место, к которому будет возврат, если часть транзакции будет отменена.
ROLLBACK TRANSACTION savepoint_name
Откатывает транзакцию частично до точки сохранения.
Если требуется откатить транзакцию полностью, то надо использовать
ROLLBACK TRANSACTION transaction_name
указывая имя транзакции или без имени
Точки сохранения
CREATE PROCEDURE SaveTranExample @InputCandidateID INT
AS
--Определить, вызвана ли процедура из активной транзакции DECLARE @TranCounter INT;
SET @TranCounter = @@TRANCOUNT; IF @TranCounter > 0
--Процедура вызвана из активной транзакции
SAVE TRANSACTION ProcedureSave;
ELSE
BEGIN TRANSACTION;
BEGIN TRY
DELETE HumanResources.JobCandidate
WHERE JobCandidateID = @InputCandidateID;
IF @TranCounter = 0
--Зафиксировать транзакцию, которая начата этой процедурой, COMMIT TRANSACTION;
--Иначе транзакция будет фиксироваться после завершения этой процедуры END TRY
Точки сохранения
BEGIN CATCH
IF @TranCounter = 0
-- Откатить транзакцию в процедуре ROLLBACK TRANSACTION;
ELSE
--Транзакция началась до вызова этой процедуры
--Откатить только до точки сохранения
ROLLBACK TRANSACTION ProcedureSave;
END CATCH
Восстановление баз данных
Восстановление базы данных – это процесс возвращения базы данных в корректное состояние, утраченное в результате отказа
Причины отказов:
Аварийное прекращение работы системы (сбой аппаратуры)
Ошибки прикладных программ
Стихийные бедствия, небрежность пользователя, диверсия
Следствия отказов:
Утрата содержимого оперативной памяти
Утрата базы данных на внешнем носителе
Восстановление баз данных
Задачи восстановления БД:
Резервное копирование
Ведение журнала транзакций и изменений БД
Создание контрольных точек (перенос изменений данных во вторичную память)
Резервное копирование: сохранение базы данных целиком, либо сведений об изменениях (инкрементный режим) на автономных носителях большого объема
Транзакции и восстановление
Основная идея
1)Журнал используется для определения состояния транзакций на момент сбоя
2)Журнал содержит подтверждение фиксации данных.
3)До любой попытки изменить данные, в журнал записывается это намерение, и только после этого данные изменяются. Поэтому после сбоя можно выявить следующие ситуации, имевшие место на момент сбоя:
- изменений нет - есть запись о намерениях, но изменения не выполнены - выполнено все
Журнал транзакций
Журнал содержит следующие записи о транзакциях:
Идентификатор транзакции
Тип записи (начало транзакции, завершение транзакции, обновление данных, удаление данных, вставка данных)
Идентификатор элемента данных
Копия элемента данных ДО операции
Копия элемента данных ПОСЛЕ операции (может отсутствовать)
Журнал содержит записи о контрольных точках. Контрольная точка – момент синхронизации оперативной памяти с журналом транзакций и основной областью (если фиксация). Все буферы СУБД принудительно записываются во вторичную память)
tс – контрольная точка (3-4 в час) tf – момент сбоя
T1 – не завершена. Откат.
T2 – завершена и зафиксирована.
T3 – записана в журнал, но не полностью в основную область. Прогнать (повторно выполнить)
T4 – прогнать (в журнале есть все данные)
T5 – не завершена. Откат