Слайд 2
Определение
Транзакция – логически неделимая последовательность операторов, переводящая базу
из одного согласованного состояния в другое согласованное состояние.
Слайд 3
Пример(банковская транзакция)
Слайд 4
Основные свойства транзакций (ACID)
Неделимость (Atomicity). Транзакция либо выполняется
полностью, либо не выполняется.
Согласованность (Consistency). Транзакция переводит базу данных
из одного согласованного состояния в другое.
Изолированность (Isolation). Результаты транзакции становятся доступны для других транзакций только после ее фиксации.
Продолжительность (Durability). После фиксации транзакции изменения становятся постоянными.
Слайд 5
Как реализуется механизм транзакций?
Слайд 6
Транзакции стартуют
Автоматически после редактирования данных базы (но не
во всех СУБД…).
После явного объявления начала транзакции с помощью
операторов объявления транзакции.
Слайд 7
Транзакции завершаются
После явного объявления о завершении транзакции соответствующим
оператором.
После завершения сеанса пользователя транзакцию фиксирует среда или инструментальное
средство (но не всегда…).
Слайд 8
Операторы управления транзакцией (ORACLE)
COMMIT [WORK]
ROLLBACK [WORK]
SAVEPOINT
ROLLBACK
TO
SET TRANSACTION
Слайд 9
Пример
BEGIN
COMMIT;
SAVEPOINT POINT1;
UPDATE EMP SET SAL = 3000
WHERE EMPNO = 7902;
SAVEPOINT POINT2;
SELECT SUM(SAL) INTO varSum FROM EMP;
DBMS_OUTPUT.PUT_LINE('varSum1=' || varSum);
UPDATE EMP SET SAL = SAL + 1000 WHERE EMPNO = 7788;
SELECT SUM(SAL) INTO varSum FROM EMP;
DBMS_OUTPUT.PUT_LINE('varSum2=' || varSum);
IF varSum > 34000 THEN ROLLBACK TO POINT2; END IF;
COMMIT;
SELECT SUM(SAL) INTO varSum FROM EMP;
DBMS_OUTPUT.PUT_LINE('varSum3=' || varSum);
END
Слайд 10
Стандартное заблуждения при работе с транзакциями
Любую длинную транзакцию
надо разбивать на части меньшего размера, чтобы она быстрее
исполнялась
Это не всегда так!!!!
Слайд 12
Пример (много коротких транзакций )
Слайд 13
Когда разбиение на меньшие транзакции оправдано?
При необходимости провести
массовое обновление данных.
При операциях вставки новых записей, если в
таблице имеется первичный ключ или ограничение целостности, определяющее уникальный атрибут.
При операциях удаления (если новые значения не зависят от старых).
Слайд 14
Транзакции, ODBC и JDBC драйвера
Эти функциональные интерфейсы по
умолчанию выполняют "автоматическую
фиксацию транзакции". Например,
если JDBC драйвер выполняет команды:
update accounts set balance = balance - 1000 where account_id = 123;
update accounts set balance = balance + 1000 where account_id = 456;
Фиксация транзакции будет происходить после каждой команды.
Слайд 15
Как вернуть контроль над транзакциями?
Отказаться от фиксации транзакции
по умолчанию. Например:
connection conn11G = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:teacher", "scott", "tiger");
conn11G.setAutoCommlt (false);
Слайд 16
Автономные транзакции
Автономные транзакции позволяют создать новую транзакцию в
пределах текущей,
так что можно фиксировать или откатывать ее изменения
независимо от родительской
транзакции. Они позволяют приостановить текущую транзакцию, начать новую, выполнить ряд действий, зафиксировать их или откатить, не влияя на состояние текущей транзакции.
Слайд 17
Использование автономных транзакций
Для фиксации динамических ошибок.
Для аудита запрещенных
попыток изменения данных.
И т.д.
Слайд 18
Пример (создание процедуры c автономной транзакцией)
create
or replace procedure LogInfo
( inInfoMessage in varchar2, inSource in varchar2 )
is
PRAGMA AUTONOMOUS_TRANSACTION;
begin
insert into debug_log(id, LogTime, Message)
values (seq_debug_log.nextval, sysdate, inInfoMessage, inSource);
commit;
exception
when others then
return;
end LogInfo;