Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Теоретические сведения. 10. Транзакцией (transaction) называют несколько последовательных операторов SQL, которые рассматриваются

10. Транзакцией (transaction) называют несколько последовательных операторов SQL, которые рассматриваются, как единое целое. Операторы, входящие в транзакцию, выполняют взаимосвязанные действия. Каждый из них решает часть задачи, но для решения задачи они должны быть выполнены успешно все, либо ни один из них не должен быть выполнен («либо все, либо ничего»). Понятие транзакции является очень важным для программ, изменяющих содержимое БД, т.к. позволяет обеспечить целостность БД в случаях сбоев оборудования, отключениях питания и использовании БД в многопользовательском режиме.

11. Транзакция начинается всякий раз, когда пользователь начинает сеанс связи с БД. Все вводимые SQL-команды являются частью транзакции, пока не будет введена команда COMMIT WORK (сделать изменения постоянными) или ROLLBACK WORK (отменить изменения). После их выполнения начинается новая транзакция. Во многих коммерческих СУБД применяется более сложная модель транзакций, реализуемая посредствам операторов BEGIN TRANSACTION, COMMIT TRANSACTION, SAVE TRANSACTION, ROLLBACK, ROLLBACK TO SAVEP OINT.

12. Во многих программах ISQL есть специальные режимы настройки, влияющие на механизм работы транзакций при интерактивном выполнении операторов языка SQL
(см. MS SQL Query Analyzer à Tools à Options… à Connection properties à p Set implicit_transactions и SQL команда SET IMPLICIT_TRANSACTION ON /OFF ).

13. Для обеспечения работы механизма транзакций СУБД используют «журнал транзакций» (transaction log file), который создается при создании БД. Все изменения, производимые в БД и фиксируются в этом журнале : строка до изменения, строка после изменения, отметка о завершении транзакции или ее отмене. В случаях системного сбоя АБД выполняет восстановление (recovery) БД, применяя специальную утилиту, поставляем с СУБД. Эта утилита просматривает журнал транзакций, находит в нем незавершенные транзакции и отменяет их, оставляя в БД только завершенные транзакции. Запуск подобной утилиты может выполняться автоматически при запуске СУБД. В промышленных СУБД отключение журнала транзакций недопустимо. Его часто располагают на отдельном высокоскоростном диске (не там, где хранится БД). Возможно ведение дополнительной копии этого журнала (mirror transaction log file).

14. Если с БД работают одновременно несколько пользователей, то обработка транзакций приобретает новое измерение и должна гарантировать независимую работу всех пользователей (изолировать пользователей друг от друга). При выполнении параллельных транзакций (concurrency transactions) можно выделить четыре основных проблемы :

ü проблема пропавшего обновления;

ü проблема промежуточных данных, грязное чтение (dirty read);

ü проблема несогласованности данных (non-repeatable read);

ü проблема строк-призраков (phantom rows).

В ходе выполнения своей транзакции каждый из пользователей должен видеть полностью непротиворечивую БД. Он не должен видеть промежуточные результаты транзакций других пользователей и даже, завершение таких транзакций не должно отражаться на данных, которые пользователь видит в течении своей транзакции.
Можно сформулировать теоретическое правило «параллельных транзакций» :

Когда две транзакции А и В, выполняются параллельно, СУБД гарантирует, что результаты их выполнения будут точно такими же, как и в случае, если сначала выполняется транзакция А, а затем В или сначала В, а затем А. («сериализация транзакций»).

15. Для обеспечения параллельного выполнения транзакций во всех коммерческих СУБД используется методика, получившая название замок или блокировка (lock). СУБД осуществляет блокировку автоматически без вмешательства пользователя. При блокировке транзакция временно получает монопольный доступ к некоторой части БД, запрещая при этом другим транзакциям изменять заблокированные данные, что и решает проблемы параллельного выполнения транзакций.
Однако создается новая проблема : период времени блокировки может быть большим, что ограничивает доступ к БД других пользователей. Выделяется несколько уровней блокировки:

a. блокировка всей БД;

b. блокировка на уровне таблиц;

c. блокировка областей БД (dbspace);

d. блокировка на уровне страниц (размер страницы (page size) задается при создании БД и обычно составляет 1, 2, 4, 8, 16 Kb);

e. блокировка на уровне записей;

Различают также жесткие (exclusive) и нежесткие (share) блокировки (locks). Когда транзакция читает данные из БД, создается нежесткая блокировка и другие транзакции тоже могут считывать те же данные. Когда транзакция обновляет данные в БД создается жесткая блокировка и другие транзакции не могут обращаться к заблокированным данным ни для чтения, ни для записи. Механизм блокировок создает проблему, получившую название «тупик» - каждая из двух транзакций ждет завершения другой. Если СУБД обнаруживает «тупик», то произвольно выбирается и аварийно отменяется одна из транзакций, возвращая в прикладную программу код ошибки типа «проигрыш в тупиковой ситуации».

16. Во многих коммерческих СУБД предлагаются усовершенствованные средства блокировки, которые гораздо лучше стандартных. Они реализованы во многих СУБД и приобрели статус общепринятых средств.
К ним относятся :

ü явная блокировка – программа сама может заблокировать целую таблицу или часть БД, если многократно обращается к ней;

ü параметры блокировки – можно установить размер участка блокировки (БД, dbspace, страница, таблица, строка), число блокировок на транзакцию, время разрешения тупиковой ситуации и т.д.;

ü уровни изоляции – степень изоляции одной транзакции от другой.

 

17. Абсолютная изоляция требует больших затрат на блокировку. Поэтому в стандарте SQL2 введено понятие уровень изоляции (isolation level) и выделено четыре уровня изоляции (SERIALIZABLE, REPEATABLE READ, READ COMMITTED, READ UNCOMMITTED) задаваемые стандартным оператором SQLSET TRANSACTION.

Уровни изоляции и проблемы обновления данных
в многопользовательской среде

Уровень изоляции Появление пропавших обновлений Появление промежуточных данных Появление несогласован-ных данных Появление строк-призраков
SERIALIZABLE   CУБД предотвращает CУБД предотвращает CУБД предотвращает CУБД предотвращает
REPEATABLE READ CУБД предотвращает CУБД предотвращает CУБД предотвращает Может произойти
READ COMMITTED CУБД предотвращает CУБД предотвращает Может произойти Может произойти
READ UNCOMMITTED CУБД предотвращает Может произойти Может произойти Может произойти

 


<== предыдущая страница | следующая страница ==>
Примеры запросов. 1. Создание точки входа для нового пользователя с именем Paulo c паролем super GRANT CONNECT TO Paulo IDENTIFIED BY super | Теоретические сведения. 1. SQL-база данных поддерживает собственную организацию посредствам системных таблиц, которые называют по-разному : системный каталог (system catalog)

Дата добавления: 2015-06-30; просмотров: 233; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.004 сек.