Выборка |
---|
Понятие транзакции. Неявные и явные транзакции. Уровни изолированности транзакций в MS SQL Server 2005 и ORACLE 10g. Понятие блокировок. Основные типы блокировок. |
Информация |
---|
Презентация к лекции: Transactions.ppt |
Понятие транзакции. Неявные и явные транзакции.
Транзакция - логическая единица работы в базе данных а так же единица восстановления информации при сбое СУБД. При фиксации изменений в базе данных гарантируется сохранение либо всех изменений, либо ни одного. Более того, выполняются все правила и проверки, обеспечивающие целостность данных.
Транзакции базы данных обладают свойствами, сокращенно называемыми ACID (Atomicity, Consistency, Isolation, Durability).
...
- Явно выполненный оператор завершения транзакции - rollback или commit
- Оператор DDL
- Завершение сеанса.
После окончания транзакции сразу неявно начинается новая транзакция.
Уровни изолированности транзакций, отличия реализации Oracle от других СУБД.
Проблемы организации параллельной работы:
...
- Грязное чтение (dirty read). Допускается чтение незафиксированных ("грязных") данных. При этом нарушается как целостность данных, так и требования внешнего ключа, а требования уникальности игнорируются.
- Неповторяемость при чтении (non-REPEATABLE READ). Это означает, что если строка читается в момент времени T1, а затем перечитывается в момент времени T2, то за этот период она может измениться. Строка может исчезнуть, может быть обновлена и так далее.
- Чтение фантомов (phantom read). Это означает, что если выполнить запрос в момент времени T1, а затем выполнить его повторно в момент времени Т2, в базе данных могут появиться дополнительные строки, влияющие на результаты. От неповторяемости при чтении это явление отличается тем, что прочитанные данные не изменились, но критериям запроса стало удовлетворять больше данных, чем прежде.
Вводится четыре уровня изолированности транзакций, характеризующихся степенью взаимовлияния нескольких транзакций, обрабатывающих одни и те же данные.
Особенности реализации транзакций в Oracle и MS Sql Server
Общие операторы управления транзакциями.
- COMMIT (COMMIT WORK). Оператор COMMIT завершает транзакцию и делает любые выполненные в ней изменения постоянными (продолжительными). В распределенных транзакциях используются расширения оператора COMMIT. Эти расширения позволяют пометить оператор COMMIT (точнее, пометить транзакцию), задав для него комментарий, а также принудительно зафиксировать сомнительную распределенную транзакцию.
- ROLLBACK (ROLLBACK WORK). Простой оператор отката завершает транзакцию и отменяет все выполненные в ней и незафиксированные изменения. Для этого он читает информацию из сегментов отката и восстанавливает блоки данных в состояние, в котором они находились до начала транзакции.
- SAVEPOINT. Оператор SAVEPOINT позволяет создать в транзакции "метку", или точку сохранения. В одной транзакции можно выполнять оператор SAVEPOINT несколько раз, устанавливая несколько точек сохранения.
- ROLLBACK TO <точка сохранения>. Этот оператор используется совместно с представленным выше оператором SAVEPOINT. Транзакцию можно откатить до указанной точки сохранения, не отменяя все сделанные до нее изменения.
- SET TRANSACTION. Этот оператор позволяет устанавливать атрибуты транзакции, такие как уровень изолированности и то, будет ли она использоваться только для чтения данных или для чтения и записи. Этот оператор также позволяет привязать транзакцию к определенному сегменту отката.
...
- Явные транзакции. Каждый оператор выполняется в своей транзакции, если он не находится в блоке begin tran - commit (rollback)
Наличие вложенных транзакций. Пример
Блок кода sql sql begin tran ............ begin tran ................. commit (rollback) ................ commit (rollback)
Подтверждение вложенной транзакции ни на что не влияет. Откат вложенной транзакции откатывает самую внешнюю транзакцию.
- Операторы управления транзакциями
- SET TRANSACTION
- BEGIN TRANSACTION
- COMMIT, ROLLBACK
- SAVEPOINT
Понятие блокировок. Основные типы блокировок.
Блокировка - это механизм, используемый для управления одновременным доступом к общему ресурсу. Блокирование происходит, когда один сеанс удерживает ресурс, запрашиваемый другим сеансом. В результате запрашивающий сеанс будет заблокирован - он "повиснет" до тех пор, пока удерживающий сеанс не завершит работу с ресурсом.
Оптимистическое блокирование (optimistic locking) - стратегия блокирования набора данных, при которой раздел, содержащий изменяемую запись, блокируется только на время внесения изменений в запись программой, но не пользователем.
Пессимистическое блокирование (pessimistic locking) - стратегия блокирования набора данных, при которой раздел, содержащий изменяемую запись, блокируется на все время внесения изменений в запись пользователем и не доступна для редактирования другим пользователям.
Особенность механизма блокировок Oracle - блокировки данных не хранятся как отдельный ресурс, а содержатся непосредственно в блоках данных. Это позволяет избежать таких проблем, как эскалация блокировок. Ниже перечислены пять основных классов блокировок в Oracle. Первые три - общие (используются во всех базах данных Oracle), а две остальные — только в OPS (Oracle Parallel Server - параллельный сервер).
- Блокировки ЯМД (DML locks). ЯМД означает язык манипулирования данными (Data Manipulation Language), то есть операторы SELECT, INSERT, UPDATE и DELETE. К блокировкам ЯМД относятся, например, блокировки строки данных или блокировка на уровне таблицы, затрагивающая все строки таблицы.
- Блокировки ЯОД (DDL locks). ЯОД означает язык определения данных (Data Definition Language), то есть операторы CREATE, ALTER и так далее. Блокировки ЯОД защищают определения структур объектов.
- Внутренние блокировки (internal locks) и защелки (latches). Защелки - это простые низкоуровневые средства обеспечения последовательности обращений. Защелки обычно запрашиваются системой в режиме ожидания. Это означает, что, если защелку нельзя установить, запрашивающий сеанс приостанавливает работу на короткое время, а затем пытается повторить операцию. Другие защелки могут запрашиваться в оперативном режиме, то есть процесс будет делать что-то другое, не ожидая возможности установить защелку. Защелки выделяются случайным образом. Внутренние блокировки - более сложное средство обеспечения очередности доступа, они позволяют запрашивающему "встать в очередь" в ожидании освобождения ресурса. Запрашивающий защелку сразу уведомляется об освобождении ресурса. В случае внутренней блокировки запрашивающий полностью блокируется.
- Распределенные блокировки (distributed locks). Эти блокировки используются сервером OPS для согласования ресурсов машин, входящих в кластер. Распределенные блокировки устанавливаются экземплярами баз данных, а не отдельными транзакциями.
- Блокировки параллельного управления кэшем (PCM - Parallel Cache Management Locks). Такие блокировки защищают блоки данных в кэше при использовании их несколькими экземплярами баз данных.
SQL Server поддерживает три основных типа блокировок:
- Shared Lock - разделяемая блокировка, которая используется при выполнении операции чтения данных. Позволяется чтение данных другой транзакцией, но запрещено изменение данных.
- Exclusive Lock - монопольная блокировка, которая применяется при изменении данных. Эта блокировка полностью запрещает доступ к данных другими транзакциями.
- Update Lock - блокировка обновления, которая является промежуточной между разделяемой и монопольной блокировкой. Используется, когда транзакция хочет обновить данные в какой-то ближайший момент времени, но не сейчас, и, когда этот момент придет, не хочет ожидать другой транзакции. В этом случае другим транзакциям разрешается устанавливать разделяемые блокировки, но не позволяет устанавливать монопольные.
Блокировки могут устанавливаться на трех уровнях -
...
Блок кода | ||||
---|---|---|---|---|
| ||||
create table t(i number, j number, s_i varchar2(100), s_j varchar2(100)); |
сеанс #1 | сеанс №2 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| ||||||||||||||
|
| |||||||
|
ожидание |
|
ожидание |
Для разрешения подобной ситуации монитор транзакций выбирает одну из транзакций для принудительного завершения.