Блокировки намерений
Используются сервером в случае если транзакция намеревается получить доступ к данным и необходимо запретить другим транзакциям накладывать блокировки, которые будут конфликтовать с блокировкой, накладываемой первой транзакцией. При установлении блокировок менеджер блокировок сначала проверит не наложено ли на ресурс блокировка намерений.
Мертвые блокировки. Возникают когда две транзакции блокируют два блока данных и для завершения каждой из транзакций необходим доступ к данным заблокированным ранее другими транзакциями.
Уровни изоляции
Уровни изоляции определяет степень изолированности транзакций друг от друга.
Уровни изоляции:
-
Незавершенное чтение. Гарантирует только физическую целостность данных, тоесть если несколько пользователей одновременно изменяют одну и ту же строку, то после всех изменений строка будет иметь определенное значение.
-
Завершенное чтение. Гарантирует что не возникнут проблемы грязного чтения, для этого сервер использует коллективные блокировки.
-
Повторяющееся чтение. Решает проблемы грязного чтения и неповторяемого чтения.
-
Сериализуемость. Обеспечивает полную изоляцию транзакций друг от друга.
Курсоры
Курсоры представляют собой, механизм обмена данными между сервером и клиентом. Курсор позволяет клиентским приложениям работать не с полным набором данных а лишь с одной или несколькими строками.
Реализация курсора
Курсоры бывают двух видов:
1.Курсоры сервера. Действуют на сервере и реализуют программный интерфейс для приложений ODBC и других драйверов. Клиент посылает запрос на выполнение одной из доступных операций курсора. Запрос обрабатывается соответствующим интерфейсом сервера и затем выполняется
2.Курсоры клиента. Выбирает весь результирующий набор строк из сервера и сохраняет его локально.
Один курсор может базироваться на нескольких таблицах, расположенных в разных БД. Операция считывания определенных в курсоре данных называется выборкой. Если за одну операцию курсор позволяет выбрать несколько строк данных, то такой курсор называется блочным.
Курсор, позволяющий выбрать данные только в одном направлении, называется последовательным. Курсор допускающий перемещение в обоих направлениях и переход к произвольной строке результирующего набора, называется прокручиваемым.
Типы курсоров
-
Статические курсоры. При открытии статического курсора (курсор моментального снимка) сервер выбирает все данные соответствующие заданным критериям и сохраняет полный результирующий набор строк в БД. На время открытия курсора сервер устанавливает блокировку на все строки, включенные в полный результирующий набор курсора. Статический курсор не изменяется после создания и всегда отображает тот набор данных, который существовал в БД на момент его открытия.
-
Динамические курсоры. При их использовании не создается полная копия исходных данных, а создается выборка данных из исходных таблиц только при обращении пользователя к тем или иным данным. Все изменения, вносимые пользователем в полный результирующий набор курсора, будут видны в курсоре при выборке.
-
Ключевые курсоры. Данные курсоры построены на основе уникальных идентификаторов. Ключевой курсор представляет собой набор ключей, идентифицирующих строки полного результирующего набора курсора, так как сохраняется информация только о ключевых столбцах строк, включаемых в полный набор курсора. Ключевые курсоры отражают все изменения, вносимые другими пользователями. Строки, включенные в курсор но удаленные другими пользователями будут показаны как поврежденные.
Управление курсорами
-
Создание курсоров
-
Открытие курсоров (происходит наполнение курсора данными)
-
Выборка из курсора и изменение строк данных с помощью него
-
Закрытие курсоров
-
Освобождение курсора (удаление)