Московский государственный университет имени М.В.Ломоносова
Опубликован: 05.01.2004 | Доступ: свободный | Студентов: 9474 / 1246 | Оценка: 4.04 / 3.84 | Длительность: 10:03:00
ISBN: 978-5-94774-539-9
Лекция 7:

Транзакции в базах данных

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

Блокировки

Блокировками (locks) называются механизмы, применяемые для управления параллельными изменениями данных.

Существует два типа блокировок:

  • оптимистические блокировки (optimistic locks) - предотвращают возникновение конфликтных ситуаций, выполняя при необходимости откат транзакции (такие блокировки в стандарте SQL-92 не поддерживаются);
  • пессимистические блокировки (pessimistic locks) - предотвращают возникновение конфликтных ситуаций, блокируя одновременный доступ к данным для одновременных транзакций .

Блокировки используются для приостановки выполнения одних SQL-операторов, пока выполняются другие.

Если при пессимистической блокировке выполнен SQL-оператор, который может вызвать конфликтную ситуацию для другого SQL-оператора, то выполнение второго SQL-оператора будет приостановлено. При оптимистической блокировке могут выполняться любые SQL-операторы, но в случае возникновения конфликтной ситуации все изменения будут потеряны.

Блокировки, используемые уровнями изоляции, подразделяются на:

  • разделяемые блокировки (S-locks), которые могут одновременно устанавливаться несколькими пользователями;
  • исключительные блокировки (X-locks), которые устанавливаются только одним пользователем, получающим эксклюзивный доступ к данным.

Существуют следующие логические и физические уровни блокировок:

  • блокировка на уровне таблицы (table-level locking);
  • блокировка на уровне строк (row-level locking);
  • блокировка на уровне элемента таблицы (item-level locking);
  • блокировка на уровне БД (dbspace-level locking);
  • блокировка на уровне табличного пространства (tablespace-level locking);
  • блокировка на уровне страницы или блока (page-level locking).

Определение параметров транзакции

Определение параметров транзакции выполняется оператором SET TRANSACTION, который имеет в стандарте SQL-92 следующее формальное описание:

TRANSACTION
    { ISOLATION LEVEL
        { READ UNCOMMITTED
        | READ COMMITTED
        | REPEATABLE READ
        | SERIALIZABLE }
    | { READ ONLY | READ WRITE }
    | { DIAGNOSTICS SIZE count_message }
    } , ... ;

Фраза ISOLATION LEVEL указывает устанавливаемый уровень изоляции.

Фраза READ ONLY устанавливает режим, при котором разрешается только чтение. Этот режим устанавливается по умолчанию, если уровень изоляции определен как READ UNCOMMITTED.

При режиме READ ONLY на данные не устанавливается никаких блокировок.

Фраза READ WRITE устанавливает режим, который разрешает как чтение, так и запись данных. При этом режиме уровень изоляции не может быть установлен как READ UNCOMMITTED.

Режим READ WRITE устанавливается по умолчанию для любого уровня, отличного от READ UNCOMMITTED.

Фраза DIAGNOSTICS SIZE определяет размер области, используемой для записи диагностических сообщений, доступ к которым осуществляется оператором GET DIAGNOSTICS.

Например, для определения транзакции, предотвращающей все описанные выше конфликтные ситуации, следует выполнить SQL-оператор

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
< Лекция 6 || Лекция 7: 1234 || Лекция 8 >