- •114. Синтаксис команд OpenGl
- •119. Состав и назначение интегрированной среды визуальной разработки. Использование визуальных компонентов.
- •120. Списки и их использование в Прологе
- •121. Способы и устройства получения стереоизображений
- •122. Средства распределения данных субд Oracle
- •1. Удаленные dml-операции.
- •2. Синхронные удаленные вызовы процедур (rpc)
- •124. Стек протоколов tcp/ip
- •126. Css. Подключение таблиц стилей. Способы использования.
- •125. Структура общего решения линейного однородного дифференциального уравнения 2-го порядка
- •127. Структурная схема эвм и процессоров Intel
- •128. Структурный анализ потоков данных. Методология dfd.
- •129. Структуры данных, используемые в пролог программе
- •130. Сущность структурного подхода при проектировании больших систем
- •131. Схема распределения данных. Теория сравнений
- •132. Техническое задание на разработку программы (в соответствии с гост 19.201-79)
- •133. Технология Web Broker. Структура серверного Web-приложения
- •134. Технология постановки/проверки электронной цифровой подписи посредством CryptoAip
- •135. Технология шифрования/расшифрования посредством CryptoAip
- •137. Транзакции в многопользовательском режиме работы
- •138. Управление криптографическими ключами посредством CryptoAip
- •139. Управление криптопровайдерами посредством CryptoAip
- •140. Управление открытыми ключами (cертификаты, стандарт х.509, инфраструктуры систем с открытыми ключами)
- •141. Упрощённая модель компилятора. Функции лексического, синтаксического, семантического анализатора, генератора кода. Взаимодействие блоков компилятора. Проходы компилятора
- •142. Формула полной вероятности и формула Байеса
- •145. Функции двух переменных
- •146. Функции переноса, поворота и масштабирования и их параметры в OpenGl
- •Void glMatrixMode (gLenum mode)
- •Void glLoadMatrix[f d] (gLtype *m)
- •Void glPushMatrix (void)
- •Void glPopMatrix (void)
- •Void glMultMatrix[f d] (gLtype *m)
- •147. Функции. Параметры функций. Способы обмена информацией между функциями
- •149. Функциональный стек lamp
- •150. Цветовые схемы rgba и cmyk
- •151. Что такое операционная система (ос). Основные понятия, концепции ос: системные вызовы; Прерывания; Файлы; Процессы, потоки; Оболочка; Адресное пространство
- •152. Язык JavaScript. Назначение. Способ использования
137. Транзакции в многопользовательском режиме работы
Транзакцией называется последовательность операций, производимых над базой данных и переводящих базу данных из одного непротиворечивого (согласованного) состояния в другое непротиворечивое (согласованное) состояние.
Транзакция рассматривается как некоторое неделимое действие над базой данных, осмысленное с точки зрения пользователя.
В реляционной СУБД транзакции подчиняются следующему правилу. Инструкции, входящие в транзакцию, рассматриваются как неделимое целое, либо все инструкции будут выполнены успешно, либо ни одна из них не должна быть выполнена.
СУБД должна, подчинятся этому правилу, даже если во время выполнения транзакции произойдет ошибка в программе или аппаратный сбой.
Свойства транзакций
Существуют различные модели транзакций, которые могут быть классифицированы на основании различных свойств, включающих структуру транзакции, параллельность внутри транзакции, продолжительность.
В настоящее время выделяют три типа транзакций:
1. плоские или классические транзакции;
2. цепочечные транзакции;
3. вложенные транзакции.
Иногда традиционные транзакции называют ACID-транзакциями.
Плоские, или традиционные, транзакции, характеризуются четырьмя классическими свойствами:
Свойство атомарности выражается в том, что транзакция должна быть выполнена в целом или не выполнена вовсе.
Свойство согласованности гарантирует, что по мере выполнения транзакций данные переходят из одного согласованного состояния в другое — транзакция не разрушает взаимной согласованности данных.
Свойство изолированности означает, что конкурирующие за доступ к базе данных транзакции физически обрабатываются последовательно, изолированно друг от друга, но для пользователей это выглядит так, как будто бы они выполняются параллельно.
Свойство долговечности трактуется следующим образом: если транзакция завершена успешно, то те изменения в данных, которые были произведены, не могут быть потеряны ни при каких обстоятельствах.
Способы завершения транзакций
В стандарте ANSI/ISO SQL определены модель транзакций и функции операторов COMMIT и ROLLBACK.
Возможны два варианта завершения транзакции:
1. Фиксация транзакции (COMMIT);
2. Откат транзакции (ROLLBACK).
Фиксация транзакции — это действие, обеспечивающее запись на диск изменений в базе данных, которые были сделаны в процессе выполнения транзакции.
До тех пор пока транзакция не зафиксирована, допустимо аннулирование этих изменений, восстановление базы данных в то состояние, в котором она была на момент начала транзакции.
Фиксация транзакции означает, что все результаты выполнения транзакции становятся постоянными. Они станут видимыми другим транзакциям только после того, как текущая транзакция будет зафиксирована. До этого момента все данные, затрагиваемые транзакцией, будут «видны» пользователю в состоянии на начало текущей транзакции.
Откат транзакции — это действие, обеспечивающее аннулирование всех изменений данных, которые были сделаны операторами SQL в теле текущей незавершенной транзакции. Каждый оператор в транзакции выполняет свою часть работы, но для успешного завершения всей работы в целом требуется безусловное завершение всех их операторов. Группирование операторов в транзакции сообщает СУБД, что вся эта группа должна быть выполнена как единое целое, причем такое выполнение должно поддерживаться автоматически.
Транзакции в многопользовательском режиме работы
Если с БД работают одновременно несколько пользователей, то СУБД должна не только корректно выполнять индивидуальные транзакции и восстанавливать согласованное состояние БД после сбоев, но она призвана обеспечить корректную параллельную работу всех пользователей над одними и теми же данными. По теории каждый пользователь и каждая транзакция должны обладать свойством изолированности, то есть они должны выполняться так, как если бы только один пользователь работал с БД. Средства современных СУБД позволяют изолировать пользователей друг от друга именно таким образом. Однако в этом случае возникают проблемы замедления работы пользователей.
Основные проблемы, которые возникают при параллельном выполнении транзакций, делятся условно на 4 типа:
1. Проблема пропавших обновлений;
2. Проблема промежуточных данных;
3. Проблема несогласованных данных;
4. Проблема строк-призраков.
Параллельные транзакции
Для того чтобы избежать подобных проблем, требуется выработать некоторую процедуру согласованного выполнения параллельных транзакций. Эта процедура должна удовлетворять следующим правилам:
В ходе выполнения транзакции пользователь видит только согласованные данные. Пользователь не должен видеть несогласованных промежуточных данных.
Когда в БД две транзакции выполняются параллельно, то СУБД гарантированно поддерживает принцип независимого выполнения транзакций, который гласит, что результаты выполнения транзакций будут такими же, как если бы вначале выполнялась транзакция 1, а потом транзакция 2, или наоборот, сначала транзакция 2, а потом транзакция 1.
Такая процедура называется сериализацией транзакций. Фактически она гарантирует, что каждый пользователь (программа), обращающаяся к базе данных, работает с ней так, как будто бы не существует других пользователей (программ), одновременно с ним обращающихся к тем же данным.
Наиболее распространенным механизмом, который используется коммерческими СУБД для реализации на практике сериализации транзакций является механизм блокировок. Самый простой вариант — это блокировка объекта на все время действия транзакции.
ве транзакции, названные условно А и В, работают с тремя таблицами: T1, T2 и Т3. В момент начала работы с любым объектом этот объект блокируется транзакцией, которая с ним начала работу, и он становится недоступным всем другим транзакциям до окончания транзакции, заблокировавшей («захватившей») данный объект.
После окончания транзакции все заблокированные объекты разблокируются и становятся доступными другим транзакциям. Если транзакция обращается к заблокированному объекту, то она остается в состоянии ожидания до момента разблокировки этого объекта, после чего она может продолжать обработку данного объекта. Поэтому транзакция В ожидает разблокировки таблицы Т2 транзакцией А. Над прямоугольниками стоит условное время выполнения операций.
В общем случае на момент выполнения транзакция получает как бы монопольный доступ к объектам БД, с которыми она работает. В этом случае другие транзакции не получают доступа к объектам БД до момента окончания транзакции. Такой механизм действительно ликвидирует все перечисленные ранее проблемы: пропавшие изменения, неподтвержденные данные, несогласованные данные, строки-фантомы. Однако такая блокировка создает новые проблемы — задержку выполнения транзакций из-за блокировок.
Уровни изолированности пользователей
Стандарт SQL включает в себя 4 уровня изолированности пользователей.
Самый высокий уровень изолированности соответствует протоколу сериализации транзакций, это уровеньSERIALIZABLE. Этот уровень обеспечивает полную изоляцию транзакций и полную корректную обработку параллельных транзакций.
Следующий уровень изолированности называется уровнем подтвержденного чтения — REPEATABLE READ. На этом уровне транзакция не имеет доступа к промежуточным или окончательным результатам других транзакций, поэтому такие проблемы, как пропавшие обновления, промежуточные или несогласованные данные, возникнуть не могут. Однако во время выполнения своей транзакции вы можете увидеть строку, добавленную в БД другой транзакцией. Поэтому один и тот же запрос, выполненный в течение одной транзакции, может дать разные результаты, то есть проблема строк-призраков остается. Однако если такая проблема критична, лучше ее разрешать алгоритмически, изменяя алгоритм обработки, исключая повторное выполнение запроса в одной транзакции.
Второй уровень изолированности связан с подтвержденным чтением, он называется READ COMMITED. На этом уровне изолированности транзакция не имеет доступа к промежуточным результатам других транзакций, поэтому проблемы пропавших обновлений и промежуточных данных возникнуть не могут. Однако окончательные данные, полученные в ходе выполнения других транзакций, могут быть доступны нашей транзакции. При этом уровне изолированности транзакция не может обновлять строку, уже обновленную другой транзакцией. При попытке выполнить подобное обновление транзакция будет отменена автоматически, во избежание возникновения проблемы пропавшего обновления.
И наконец, самый низкий уровень изолированности называется уровнем неподтвержденного, или грязного, чтения. Он обозначается как READ UNCOMMITED. При этом уровне изолированности текущая транзакция видит промежуточные и несогласованные данные, и также ей доступны строки-призраки. Однако даже при этом уровне изолированности СУБД предотвращает пропавшие обновления.
