Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
db-shpora.doc
Скачиваний:
14
Добавлен:
08.11.2018
Размер:
1.44 Mб
Скачать
  1. Блокировка ресурсов: объявление характеристик блокировки

Управление параллельной обработкой – предмет слож­ный; некоторые решения о типах и стратегиях блокировки должны делаться ме­тодом проб и ошибок. По этой и другим причинам прикладные программы базы данных обычно не налагают явных блокировок. Вместо этого они указывают рам­ки транзакций, а затем объявляют, какого рода поведение им требуется от СУБД. Таким образом, если поведение при блокировке нужно изменить, то нет необходи­мости переписывать приложение, чтобы налагать блокировки на других участках транзакции. Вместо этого просто меняется объявление характеристик блокировки. В листинге 3 изображена транзакция с карандашами, рамки которой обозна­чены с помощью операторов BEGIN TRANSACTION, COMMIT TRANSACTION и ROLLBACK TRANSACTION. Рамки транзакции – это та информация, которая жизненно необходима СУБД, чтобы реализовывать различные стратегии блокировки. Если разработчик объявит теперь (через системный параметр или каким-либо дру­гим способом), что ему нужна оптимистическая блокировка, СУБД неявным образом наложит блокировки, соответствующие этой стратегии, в правильном месте. Если после этого разработчик сменит тактику и запросит пессимистиче­скую блокировку, СУБД неявно наложит свои блокировки в другом месте.

Листинг 3. Указание рамок транзакции

BEGIN TRANSACTION:

SELECT ТОВАР.Название, ТОВАР.Количество

FROM ТОВАР

WHERE ТОВАР.Название='Карандаш'

СтароеКоличество = ТОВАР.Количество

Set НовоеКоличество = ТОВАР.Количество - 5

UPDATE ТОВАР

SET ТОВАР.Количество = НовоеКоличество

WHERE ТОВАР.Название - 'Карандаш'

{продолжение обработки транзакции}...

IF транзакция выполнена успешно THEN

COMMIT TRANSACTION

ELSE

ROLLBACK TRANSACTION

END IF

Далее выполняются другие действия, не входящие в эту транзакцию...

  1. Свойства транзакций: атомарность, долговечность, согласованность

Транзакция - это неделимая, с точки зрения воздействия на СУБД, последовательность операций манипулирования данными, выполняющаяся по принципу "все или ничего", и переводящая базу данных из одного целостного состояния в другое целостное состояние.

Транзакция обладает четырьмя важными свойствами, известными как свойства ACID (atomicity, consistency, isolation, durability):

Атомарность.

Согласованность.

Изолированность.

Долговечность или устойчивость.

Атомарность

Атомарная транзакция – это такая транзакция, в которой либо выполняются все содержащиеся в ней действия с базой данных, либо не выполняется ни одно из них.

Долговечность или устойчивость

Если транзакция выполнена, то результаты ее работы должны сохраниться в базе данных, даже если в следующий момент произойдет сбой системы.

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

Согласованность

Согласованность может быть на уровне оператора и на уровне транзакции. Во втором случае транзакция может не видеть своих собственных результатов.

Рассмотрим следующий обновля­ющий SQL-оператор:

Листинг 4

UPDATE КЛИЕНТ SET КодРегиона = '425'

WHERE Индекс = '98050';

Предположим, что в таблице КЛИЕНТ имеется 500 000 строк, и в 500 из них атрибут Индекс имеет значение «98050». Чтобы найти все эти 500 строк, СУБД потребуется некоторое время. Будет ли на протяжении этого времени разрешено другим транзакциям обновлять поля КодРегиона и Индекс таблицы КЛИЕНТ? Если SQL-оператор является согласованным, такие обновления будут запрещены. Об­новление будет применено к набору строк в том виде, в каком они существовали в момент запуска SQL-оператора. Такая согласованность называется согласованностью па уровне оператора (statement level consistency).

Теперь рассмотрим транзакцию, которая содержит два оператора обновления:

Листинг 5

BEGIN TRANSACTION UPDATE КЛИЕНТ

SET КодРегиона = '425'

WHERE Индекс = '98050'

{прочие действия этой транзакции}

UPDATE КЛИЕНТ SET Скидка =0.05

WHERE KодРегионa='425'

{прочие действия этой транзакции}

COMMIT TRANSACTION

Что в данном контексте означает термин согласованность? Согласованность на уровне оператора означает, что каждый из двух операторов обрабатывает стро­ки согласованно, но в интервале между ними указанные строки могут изменять­ся другими пользователями. Согласованность на уровне транзакции (transaction level consistency) означает, что все строки, затронутые любым из SQL-операторов, защищены от изменений на протяжении всей транзакции.

Согласованность на уровне транзакции является настоль­ко сильным средством, что в некоторых его реализациях транзакция не будет видеть свои же собственные изменения. В данном примере второй оператор не будет видеть строк, измененных первым оператором.

Таким образом, согласованность может иметь разные уровни, следует выяснить, какой тип согласованности имеется в виду. Важно всегда помнить и о ловушке, которую может содержать в себе согласованность на уровне транзакции.

Еще более сложной является ситуация с термином изолированность.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]