1 / 21

Транзакции в Oracle Database

Транзакции в Oracle Database. Транзакция – это неделимый блок, содержащий один или несколько SQL операторов, которые должны быть выполнены полностью или не выполнены совсем. Введение.

klaus
Download Presentation

Транзакции в Oracle Database

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Транзакции вOracle Database

  2. Транзакция – это неделимый блок, содержащий один или несколько SQL операторов, которые должны быть выполнены полностью или не выполнены совсем. Введение

  3. COMMIT – завершает текущую транзакцию и выполняет все изменения, произведенные в текущей транзакции. COMMIT также удаляет все сохраненные точки. • ROLLBACK – откатывает все изменения, произведенные в текущей транзакции. ROLLBACK TO SAVEPOINT выполняет откат изменений, произведенных после точки SAVEPOINT. • SAVEPOINT – создает точку, к которой в дальнейшем возможно откатить транзакцию. Управление транзакциями

  4. Транзакция может состоять из следующих операторов: • Одного или нескольких операторов DML • Одного оператора DDL Структура транзакций

  5. Транзакция начинается с первого SQL оператора, включая DML, DDL и оператора SET TRANSACTION . Когда транзакция начинается, Oracle Database выделяет undo dataсегмент в SGAдля возможности отката транзакции в случае неудачи. Начало транзакции

  6. Транзакция завершается, если: • Пользователь выполнил один из следующих операторов: COMMIT или ROLLBACK без SAVEPOINT. • Пользователь выполнил какую-либо из DDL команд, таких как CREATE, DROP, RENAME, или ALTER. Замечания: Oracle выполняет неявный COMMIT до и после любого DDL оператор. Если текущая транзакция содержит DML операторы, Oracle DB сначала выполняет COMMIT для текущий транзакции, а затем выполняет DDL оператор. Для большинства утилит OracleDB текущая транзакция выполняет неявный COMMIT при нормальном завершении программы. При аварийном завершении программы, Oracle DB выполняет неявный ROLLBACK для текущий транзакции. Конец транзакции

  7. Имя транзакции является опциональным. Имя транзакции можно задать следующим образом: SET TRANSACTION NAME … Пример: SET TRANSACTION NAME 'sal_update'; Имена транзакций дают следующие преимущества: • Простой мониторинг долго выполняющихся транзакций. • База данных записывает имена транзакций в redo log, что облегчает их поиск. Имена транзакций

  8. SAVEPOINTs – это метки, которые позволяют разделить транзакцию на более мелкие части, при этом иметь возможность откатиться к любой из них. Пример: SAVEPOINT after_greene_sal; • ROLLBACK TO SAVEPOINT ROLLBACK возвращает все данные, измененные после SAVEPOINT в состояние, которые данные имели до нее. Пример: ROLLBACK TO SAVEPOINT after_greene_sal; SAVEPOINTs становятся недоступны после выполнения операции COMMIT SAVEPOINTS

  9. COMMIT делает все изменения, произведенные в текущей транзакции постоянными и доступными для других пользователей (транзакций). Синтаксис: COMMIT [WORK] [COMMENT text]; Примеры: COMMIT; COMMIT WORK; COMMIT COMMENT 'maintaining account balance'. COMMITS

  10. BEGIN -- Set savepoint. SAVEPOINT new_member; -- First insert. INSERT INTO member VALUES ( member_s1.nextval, 1005,'D921-71998','4444-3333-3333-4444', 1006, 2, SYSDATE, 2, SYSDATE); -- Second insert. INSERT INTO contact VALUES ( contact_s1.nextval, member_s1.currval + 1, 1003,'Bodwin','Jordan','', 2, SYSDATE, 2, SYSDATE); -- Print success message and commit records. dbms_output.put_line('Both succeeded.'); COMMIT; EXCEPTION WHEN others THEN -- Roll back to savepoint, and raise exception message. ROLLBACK TO new_member; dbms_output.put_line(SQLERRM); END; Пример:

  11. SET TRANSACTION позволяет начать read-only или read-write сессию, установить уровень изоляции. Оператор имеет следующие виды: • SET TRANSACTION READ ONLY; В read-only транзакциях возможно только чтение, все последующие запросы в транзакции видят только те изменения, которые были подтверждены (COMMITED)до того, как началась текущая транзакция (transaction-level read consistency); Удобно, когда вы выполняете длинные по времени читающие транзакции, и вам важно, чтобы все данные были в согласованном состоянии. • SET TRANSACTION READ WRITE; Возможны чтение и запись. Используется по умолчанию. Обеспечивает Statement-Level Read Consistency. SET TRANSACTION

  12. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE | READ COMMITTED; SERIALIZABLE. На этом уровне результаты параллельного выполнения транзакций для базы данных в большинстве случаев можно считать совпадающими с последовательным выполнением тех же транзакций (по очереди в каком-либо порядке). Когда установлен уровень SERIALIZABLE, и DML делает попытку изменить данные, которые уже были изменены в другой транзакции, произойдет ошибка. READ COMMITTED. Завершенное чтение, при котором отсутствует черновое, «грязное» чтение (то есть чтение одним пользователем данных, которые не были зафиксированы в БД командой COMMIT). Тем не менее в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. • SET TRANSACTION USE ROLLBACK SEGMENT rollback_segname; Устанавливает rollback segment для данной транзакции, используется только для read-write транзакций. SET TRANSACTION

  13. Автономная транзакция – это независимая транзакция, которая может быть вызвана из другой транзакции. Т.е. вы можете остановить текущую транзакцию, выполнить SQL операторы, выполнить COMMIT или ROLLBACK, и затем продолжить главную (вызывающую) транзакцию. Пример: вам необходимо выполнить запись log сообщений, независимо от того выполнится или нет ваша текущая. Автономные транзакции

  14. Характеристики автономных транзакций: • Автономные транзакции не видят неподтвержденные (uncommitted) изменения в главной транзакции и не разделяют блокировок и ресурсов с ней . • Пользователя могут получить доступ к информации, обновленной автономной транзакцией, не дожидаясь завершения главной транзакции. • Автономные транзакции могут вызывать другие автономные транзакции. В PL/SQL, автономные транзакции выполняются в блоках, помеченных следующим образом: PRAGMA AUTONOMOUS_TRANSACTION. Эта инструкция говорит базе данных, что данная процедура должна быть выполнена как автономная транзакция, независимо от вызывающейтранзакции. Автономные транзакции

  15. Автономными транзакциями могут быть следующие PL/SQL блоки: • Анонимные PL/SQL блоки • Функции и процедуры, самостоятельные или объявленные в пакете • Триггеры Автономные транзакции

  16. Главная транзакция при исключительной ситуации вызывает процедуру write_log, помеченную PRAGMA AUTONOMUS_TRANSACTION. Процедура выполняет транзакцию AT независимо от главной транзакции. Пример:

  17. Если автономная транзакция пытается получить доступ к ресурсы, заблокированному главной транзакцией (которая в свою очередь ожидает завершения автономной транзакции), то возникнет deadlock. Пример: PROCEDURE update_salary (dept_in IN NUMBER) IS PRAGMA AUTONOMOUS_TRANSACTION; CURSOR myemps IS SELECT empno FROM emp WHERE deptno = dept_in FOR UPDATE NOWAIT; BEGIN FOR rec IN myemps LOOP UPDATE emp SET sal = sal * 2 WHERE empno = rec.empno; END LOOP; COMMIT; END; BEGIN UPDATE emp SET sal = sal * 2; update_salary (10); END; The results are not pretty: ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified Нужно быть осторожным:

  18. Logging • Выполнение COMMIT и ROLLBACK в триггерах • Пользовательские функции • Ограничение количества попыток Использование автономных транзакций

  19. Распределенная база данных – это база данных, состоящая из множества отдельных баз данных, представляемая для приложения как единая база данных. • Распределенные транзакции – это транзакции, которые включают одно или несколько операций, для обновления данных (COMMIT)или отката в случае неудачи (ROLLBACK) согласованно во всех базах данных распределенной системы. Транзакции в распределенных базах данных являются более сложными, так как база данных должна контролировать транзакции в распределенной системе как единую транзакцию, а также предусмотреть возможность выхода из строя любой БД или ее временной или полной недоступности. Распределенные транзакции

  20. Пример:

  21. UPDATE scott.dept@hq.us.example.com SET loc = 'REDWOOD SHORES' WHERE deptno = 10; UPDATE scott.emp SET deptno = 11 WHERE deptno = 10; UPDATE scott.bldg@maint.us.example.com SET room = 1225 WHERE room = 1163; COMMIT;

More Related