Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диго С.М. Базы данных проектирование и использование.doc
Скачиваний:
720
Добавлен:
14.05.2016
Размер:
12.04 Mб
Скачать

10.4.3. Режимы доступа к информации

При работе в многопользовательской среде файлы могут быть открыты в одном из режимов - разделяемом или исключительном. При исключительном (монопольном, эксклюзивном) режиме досту­па с данной информационной единицей может работать только тот пользователь, который первый открыл файл. Эксклюзивное исполь­зование иногда называют блокировкой типа X (eXclusive lock), а раз­деляемое (блокировка с взаимным доступом) - S (Shared lock). Ис­ключительные блокировки используются для операторов, изменяю­щих структуру таблицы или значения тех или иных полей.

Возможные сочетания видов блокировок приведены ниже.

X

S

-

X

N

N

Y

S

N

Y

Y

-

Y

Y

Y

Эти же виды блокировок могут быть использованы и при блоки­ровании других информационных единиц, например записи. Выбор вида (блокировки и информационной единицы, к которой она отно­сится, зависит от того, какая операция выполняется, как много таких операций, каковы ограничения по времени выполнения обработки. Например, если осуществляется массовая корректировка какого-либо файла, то лучше открыть его в эксклюзивном режиме, чем последо­вательно блокировать каждую запись.

На рис. 10.7 изображен механизм использования блокировок при выполнении параллельных операций над данными. На этом рисунке представлена тупиковая ситуация, когда две транзакции одновремен­но ждут снятия блокировки. СУБД должны иметь механизмы разре­шения тупиковых ситуаций.

10.4.4. Уровни изоляции в sql

Подходы к разрешению проблем параллелизма в SQL претерпе­вали изменения по мере развития языка. Первоначально стандарт предписывал такую организацию одновременного выполнения опе­раторов, чтобы это соответствовало ситуации, когда ни один из опе­раторов не вводится до полного завершения предыдущего. В этой ситуации в любой момент времени только одна транзакция может иметь возможность изменять данные. Однако при большом числе одновременных корректирующих обращений такой подход может значительно снизить производительность системы. Поэтому (в тех случаях, когда это возможно, ищется компромисс между обеспечени­ем строгой целостности базы данных в любой момент времени и производительностью.

В SQL-92 определены так называемые уровни изоляции (isolation level).

  1. Уровень SERIALIZABLE (последовательное выполнение) -обеспечивает максимальную степень целостности и соответствует требованиям предыдущих стандартов. Обычно именно этот уровень устанавливается по умолчанию. При его выборе каждая транзакция выполняется изолированно.

  2. Уровень REPEATABLE READ (повторяющееся чтение) - до­пускает вставку новой записи в таблицу, обрабатываемую транзакци­ей. При этом в принципе может возникать эффект так называемой фантомной вставки.

  3. Уровень READ COMMITTED (чтение с фиксацией) - допуска­ет выполнение запроса при условии, что результаты параллельных транзакций были зафиксированы.

  4. Уровень READ UNCOMMITTED (чтение без фиксации) - до­пускает выполнение запроса независимо от того, были зафиксирова­ны результаты параллельных транзакций или нет.

Если транзакция объявлена как READ ONLY, то это переводит ее на уровень READ UNCOMMITTED.

Уровень изоляции определяется в предложении SET TRAN­SACTION, которое имеет следующий синтаксис:

SET TRANSACTION {ISOLATION LEVEL

{READ UNCOMMITTED

| READ COMMITTED

| REPEATABLE READ

| SERIALIZABLE}

| {READ ONLY | READ WRITE}

| {DIAGNOSTICS SIZE число условий}}.,..;

Предложение DIAGNOSTICS SIZE определяет количество элемен­тов, используемых для сохранения диагностической информации.

Уровень изоляции и характер транзакции (только чтение или чте­ние/запись) являются взаимозависимыми. Если задано READ WRITE, то ISOLATION LEVEL не может быть READ UNCOMMITTED. Если ISOLATION LEVEL определен как READ UNCOMMITTED, транзак­ция становится по умолчанию READ ONLY. В противном случае тран­закция по умолчанию считается READ WRITE.