Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД (Дубов И.Р) / 03 Управление транзакциями.ppt
Скачиваний:
49
Добавлен:
07.03.2016
Размер:
1.45 Mб
Скачать

Гранулированные захваты (уровни блокировок)

Пример 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 – не завершена. Откат