Чтение онлайн

на главную - закладки

Жанры

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

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

Параметры резервирования таблиц

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

! ! !

ПРИМЕЧАНИЕ. Транзакция SNAPSHOT TABLE STABILITY

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

. ! .

Вариантами выбора являются:

[PROTECTED | SHARED] {READ | WRITE}

Атрибут PROTECTED предоставляет транзакции исключительный доступ к таблице по чтению и позволяет другим транзакциям с уровнями изоляции SNAPSHOT и READ COMMITTED читать строки. Запись ограничивается одним или двумя модификаторами:

* PROTECTED WRITE позволяет текущей транзакции писать в таблицу и блокирует запись другими транзакциями;

* PROTECTED READ запрещает запись в таблицу для любой транзакции, включая текущую.

Атрибут SHARED позволяет любой транзакции SNAPSHOT или READ COMMITTED читать из таблицы и предоставляет два режима для параллельных изменений другими транзакциями:

* SHARED WRITE любой транзакции чтения/записи SNAPSHOT или транзакции чтения/записи READ COMMITTED изменять строки в наборе, пока никакая транзакция не имеет или не запросит исключительного доступа по записи;

* SHARED READ является наиболее либеральным условием резервирования. Этот режим позволяет любой другой транзакции чтения/записи изменять таблицу.

Итоги

Любая другая транзакция может читать таблицу, зарезервированную текущей транзакцией, причем не существует никаких способов сконфигурировать транзакцию так, чтобы предоставить ей исключительные права на запись для этой таблицы (т. е. все могут читать, если они были сконфигурированы только для чтения и не имеют никаких преимущественных прав на запись). Следующие условия всегда будут блокировать другую транзакцию на чтение из таблицы, зарезервированной текущей транзакцией:

* другая транзакция имеет уровень изоляции SNAPSHOT TABLE STABILITY;

* другая транзакция сконфигурирована на резервирование этой таблицы в режиме PROTECTED WRITE (хотя она может читать эту таблицу, если текущая транзакция зарезервировала ее в режиме SHARED READ);

* другая транзакция собирается зарезервировать эту таблицу в режиме SHARED WRITE, а текущая транзакция зарезервировала ее в режиме PROTECTED READ или PROTECTED WRITE.

В случае если это все еще вам непонятно, посмотрите на рис. 26.1, где некоторые сконфигурированные транзакции сами все расскажут.

Рис. 26.1. Конфигурирование резервирования таблиц

Версии записей

Когда запрос на изменение успешно отправлен на сервер, Firebird создает и записывает на диск ссылку, связывающую оригинальный образ строки, видимый в транзакции - иногда это называется дельтой, - с новой версией строки, содержащей изменения запроса. Оригинальный и новый образы строки называются версиями

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

Пока транзакция, в конце концов, не подтвердит изменения, она не касается "живой" версии. В своем собственном контексте она трактует отправленную версию, как если бы она была самой последней подтвержденной версией. Тем временем другие транзакции продолжают "видеть" самую последнюю подтвержденную версию. В случае "мгновенного снимка" базы данных (snapshot) в транзакциях, которые были запущены до нашей транзакции, последняя подтвержденная версия записи, которую они видят, может быть более старой, чем та, которую видит наша транзакция и другие транзакции, либо ранее запущенные, либо имеющие уровень изоляции READ COMMITTED.

Зависимые строки

Если на таблицу, изменение в которой было отправлено на сервер, ссылаются внешние ключи других таблиц, сервер создает версии строк в этих таблицах, которые "принадлежат" измененной строке [96] . Эти зависимые строки, равно как и другие строки других таблиц, зависящие от них через внешние ключи, также становятся недоступными другим транзакциям для изменения, пока выполняется наша транзакция.

96

Возможно, здесь имеются в виду внешние ключи с опцией ON UPDATE/DELETE CASCADE. В этом случае при изменении мастер-записи автоматически модифицируются записи-детали. Ни в каких других случаях "зависимые" таблицы не обновляются сервером.
– Прим. науч. ред.

Блокировки и конфликты блокировок

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

Время действия

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

Пессимистическая блокировка

Пессимистическая, или предварительная, блокировка может быть применена для наборов строк или для целых таблиц. Режимы блокировки таблиц уже были описаны (см. разд. "Резервирование таблиц" и "SNAPSHOT TABLE STABILITY (согласованность)").

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

Поделиться:
Популярные книги

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле

Господин моих ночей (Дилогия)

Ардова Алиса
Маги Лагора
Любовные романы:
любовно-фантастические романы
6.14
рейтинг книги
Господин моих ночей (Дилогия)

Идеальный мир для Лекаря

Сапфир Олег
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря

Авиатор: назад в СССР

Дорин Михаил
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Авиатор: назад в СССР

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Барон Дубов 4

Карелин Сергей Витальевич
4. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 4

Имперский Курьер. Том 3

Бо Вова
3. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 3

Бестужев. Служба Государевой Безопасности. Книга 5

Измайлов Сергей
5. Граф Бестужев
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга 5

Адвокат Империи 2

Карелин Сергей Витальевич
2. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 2

Баронесса. Эхо забытой цивилизации

Верескова Дарья
1. Проект «Фронтир Вита»
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Баронесса. Эхо забытой цивилизации

Адвокат Империи 7

Карелин Сергей Витальевич
7. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 7

Чехов

Гоблин (MeXXanik)
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Чехов

Крещение огнем

Сапковский Анджей
5. Ведьмак
Фантастика:
фэнтези
9.40
рейтинг книги
Крещение огнем

Невеста клана

Шах Ольга
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Невеста клана