Модуль 4 Рассматриваемые темы: Понятие транзакции Конкурентный доступ к данным Использование транзакций в JDBC API Транзакции в JDBC API слайд 4-1.

Презентация:



Advertisements
Похожие презентации
Модуль 5 Рассматриваемые темы: Метаданные Групповая модификация данных Вопросы типизации Дополнительные возможности JDBC API слайд 5-1.
Advertisements

Лекция 25 Лекция 25 Понятие целостности базы данных. Условия целостности. Транзакции. Обработка транзакций. Свойства транзакций. Модель ANSI/ISO. Назначение.
Транзакции Транзакция (transaction) – набор логически связанных действий, выполняемых как единая операция Транзакция – это логическая единица работы.
Java Database Connectivity (JDBC) Универсальное API для доступа к данным.
Java : доступ к базам данных, технология JDBC. Примеры баз данных.
Модели транзакций Свойства транзакций. Способы завершения транзакций.
Транзакции Транзакция - это последовательность операций, производимых над базой данных и переводящих базу данных из одного непротиворечивого (согласованного)
Учебная дисциплина «Базы данных и управление ими» для студентов специальности «Профессиональное обучение» Лекция 10 ОРГАНИЗАЦИЯ ПАРАЛЛЕЛЬНОГО.
ACID – свойства транзакций 1.Атомарность 2.Согласованность 3.Изолированность 4.Долговечность create table AccountInfo(Name varchar2(100), Account number(10));
Модели транзакций Уровни изолированности пользователей.
Обобщенная архитектура СУБД. Область SQL содержит данные связывания, временные буферы, дерево разбора и план выполнения для каждого оператора SQL, Область.
Лекция 26 Лекция 26 Параллельное выполнение транзакций. Типы конфликтов. Захваты и блокировки.
Администрирование информационных систем Начало работы с MS SQL Server 2000.
Администрирование информационных систем Лекция 4. Система управления базами данных.
Исключения в EJB Кряжев Василий
Определение 2www.timurshamiladze.ru Уровень изоляции транзакции - набор правил, которые определяют насколько сильно необходимо.
СУЩНОСТЬ-СВЯЗЬ (ER МОДЕЛЬ) Основные элементы: СущностиСущности –Атрибуты –Ключи СвязиСвязи.
Основные виды ресурсов и возможности их разделения.
О конформности Си-программ Михаил Посыпкин ИСП РАН.
1. Транзакции Базы данных: учебный курс Неделимой операцией в БД считается выполнение одного SQL-запроса (может быть, включающего выполнение хранимой процедуры,
Транксрипт:

Модуль 4 Рассматриваемые темы: Понятие транзакции Конкурентный доступ к данным Использование транзакций в JDBC API Транзакции в JDBC API слайд 4-1

Транзакции в JDBC API Транзакция – логически неделимый набор операций в базе данных, переводящий данные из одного целостного состояния в другое целостное Типы транзакций: Локальные – на одном источнике данных Распределенные (глобальные) – на нескольких источниках данных Понятие транзакции слайд 4-2

Транзакции в JDBC API Атомарность Целостность Изолированность Длительность Свойства транзакций – ACID слайд 4-3

Транзакции в JDBC API Источником данных для Java- клиента БД является соединение Поэтому работа с транзакциями в JDBC API осуществляется через интерфейс Connection Всегда следует помнить, что реализация транзакций – vendor- specific Источник данных – репрезентация БД слайд 4-4

Транзакции в JDBC API Транзакция имеет начало и завершение Такие транзакции называются плоскими Завершением транзакции может быть подтверждение (commit) или откат (rollback) В каких случаях транзакцию необходимо завершать откатом? Рамки транзакции слайд 4-5

Транзакции в JDBC API Режим автофиксации – это режим, где каждый запрос выполняется в рамках персональной транзакции То есть, транзакция подтверждается после каждого запроса В JDBC API режим автофиксации принят по умолчанию Режим автофиксации слайд 4-6

Транзакции в JDBC API В JDBC 3 появились savepoints Длительную транзакцию можно разбить на несколько частей с помощью savepoints В случае проблем можно откатить транзакцию до выбранной savepoint Savepoints – попытка реализовать вложенные транзакции Savepoints – точки сохранения слайд 4-7

Транзакции в JDBC API Рассматриваемые темы: Понятие транзакции Конкурентный доступ к данным Использование транзакций в JDBC API слайд 4-8

Транзакции в JDBC API Две транзакции могут пересечься по времени и по данным Это может привести к нарушению целостности данных, появлению аномалий: «Грязное» чтение Неповторяемое чтение Фантомы Одновременный доступ к данным слайд 4-9

Транзакции в JDBC API Транзакция T1 читает еще неподтвержденные данные, которые изменяет транзакция Т2 Если Т2 откатится, то получится, что Т1 работает с нецелостными данными «Грязное» чтение – dirty reads слайд 4-10

Транзакции в JDBC API Транзакция T1 читает данные два раза, а между этими чтениями транзакция Т2 изменяет их Т1 получит при двух одинаковых чтениях разные результаты Неповторяемое чтение – unrepeatable reads слайд 4-11

Транзакции в JDBC API Транзакция T1 ищет и находит запись, но при попытке её изменения она может отсутствовать Т.к. эта запись появилась в результате еще неподтвержденной транзакции Т2, которая может откатиться Фантомы – phantoms слайд 4-12

Транзакции в JDBC API СУБД должна не допустить пересечения транзакций по времени и данным При выполнении одной транзакции другая не должна менять данные, с которыми работает первая Если транзакции пересеклись по данным, СУБД должна сериализовать их (выстроить в очередь) Как избежать аномалий? слайд 4-13

Транзакции в JDBC API Итак, транзакции должны быть изолированы друг от друга Как именно СУБД должна изолировать транзакции, определяется уровнем изоляции транзакций Выводы по изоляции транзакций слайд 4-14

Транзакции в JDBC API Рассматриваемые темы: Понятие транзакции Конкурентный доступ к данным Использование транзакций в JDBC API слайд 4-15

Транзакции в JDBC API В JDBC API нет явного метода старта транзакции В JDBC по умолчанию работает режим автофиксации Управление транзакциями в JDBC API слайд 4-16

Транзакции в JDBC API В интерфейсе Connection определен метод, регламентирующий режим автофиксации: void Connection.setAutoCommit(boolean) Для считывания текущего режима можно воспользоваться методом boolean Connection.getAutoCommit() Управление транзакциями слайд 4-17

Транзакции в JDBC API Упрощенный каркас программы слайд 4-18 Connection connection = null; Statement statement = null; try { connection = DriverManager.getConnection( DBURL, user", pwd ); statement = conn.createStatement(); connection.setAutoCommit( false ); statement.executeUpdate( SQL1 ); statement.executeUpdate( SQL2 ); conn.commit(); } catch( SQLException se ) { try { conn.rollback(); } catch( SQLException se2 ) { se2.printStackTrace(); } } finally { try { if( conn!=null ) conn.close(); } catch( SQLException se ) { se.printStackTrace(); } }

Транзакции в JDBC API Выводы по запуску и финалу транзакций слайд 4-19 Connection connection = null; Statement statement = null; try { connection = DriverManager.getConnection( DBURL, user", pwd ); statement = conn.createStatement(); connection.setAutoCommit( false ); statement.executeUpdate( SQL1 ); statement.executeUpdate( SQL2 ); conn.commit(); } catch( SQLException se ) { try { conn.rollback(); } catch( SQLException se2 ) { se2.printStackTrace(); } } finally { try { if( conn!=null ) conn.close(); } catch( SQLException se ) { se.printStackTrace(); } }

Транзакции в JDBC API Интерфейс Connection предлагает методы работы с уровнями изоляции: void setTransactionIsolation(int) int getTransactionIsolation() Они должны вызываться до старта транзакции (если во время, то результат vendor-specific) Узнать, поддерживается ли вообще этот механизм, можно из метаинформации Изоляция транзакций в JDBC API слайд 4-20

Транзакции в JDBC API Уровни изоляции, заданные в JDBC API определены как статические константы интерфейса Connection Важно помнить, что поддержка конкретных уровней – vendor specific Изоляция транзакций в JDBC API слайд 4-21

Транзакции в JDBC API Connection.TRANSACTION_NONE Транзакции не поддерживаются Connection.TRANSACTION_READ_UNCOMMITTED Присутствуют все три аномалии. Минимальный уровень Connection.TRANSACTION_READ_COMMITTED Отсутствует «грязное» чтение Connection.TRANSACTION_REPEATABLE_READ Отсутствует «грязное» и неповторяемое чтение Connection.TRANSACTION_SERIALIZABLE Отсутствуют все три аномалии. Максимальный уровень Уровни изоляции в JDBC API слайд 4-22

Транзакции в JDBC API Пример работы с уровнями изоляции слайд 4-23 Connection connection = null; Statement statement = null; try { connection = DriverManager.getConnection( DBURL, user", pwd ); statement = conn.createStatement(); connection.setAutoCommit( false ); connection.setTransactionIsolation( Connection.TRANSACTION_SERIALIZABLE ); statement.executeUpdate( SQL1 ); statement.executeUpdate( SQL2 ); conn.commit(); } catch( SQLException se ) { try { conn.rollback(); } catch( SQLException se2 ) { se2.printStackTrace(); } } finally { try { if( conn!=null ) conn.close(); } catch( SQLException se ) { se.printStackTrace(); } }

Транзакции в JDBC API Чем выше уровень изоляции, тем выше нагрузка на СУБД СУБД может поддерживать не все уровни изоляции Важно правильно работать с транзакциями в случае ошибок ( SQLException ) и предупреждений ( SQLWarning ) Выводы по работе с транзакциями слайд 4-24

Транзакции в JDBC API Рассмотренные темы: Понятие транзакции Конкурентный доступ к данным Использование транзакций в JDBC API слайд 4-25