Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_АБД.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
2.01 Mб
Скачать

Разделяемые для строк монопольные блокировки таблиц (srx)

Блокировка SRX, удерживаемая транзакцией, позволяет другим транзакциям одновременно лишь опрашивать эту таблицу или блокировать выбираемые строки с помощью команды SELECT ... FOR UPDATE, но не обновлять эту таблицу.

Блокировка SRX, удерживаемая транзакцией, запрещает другим транзакциям получать блокировки SRX по этой таблице и модифицировать эту таблицу. Транзакция не может вставлять, обновлять или удалять строки в таблице, если какая-то другая транзакция имеет блокировку SRX по этой таблице. Блокировка SRX, удерживаемая транзакцией, также запрещает другим транзакциям получать блокировки SRX, S и RX по этой таблице; иными словами, другие транзакции не могут успешно выполнять следующие предложения:

  • LOCK TABLE таблица IN SHARE MODE;

  • LOCK TABLE таблица IN SHARE EXCLUSIVE MODE;

  • LOCK TABLE таблица IN ROW EXCLUSIVE MODE;

  • LOCK TABLE таблица IN EXCLUSIVE MODE;

Монопольные блокировки таблиц (X)

Эта блокировка вводит самый ограничительный режим, который обеспечивает транзакции, удерживающей эту блокировку по таблице, возможность монопольной записи в таблицу. Эта блокировка запрашивается для таблицы следующим предложением LOCK TABLE таблица IN EXCLUSIVE MODE;

Все блокировки данных, получаемые транзакцией, включая все блокировки строк и таблиц, освобождаются при подтверждении или откате этой транзакции. Блокировки данных, полученные после точки сохранения, освобождаются, если транзакция откатывается к этой точке сохранения.

Конверсия и эскалация блокировок данных

ORACLE автоматически конвертирует блокировку таблицы из более слабой в необходимую более строгую степень ограничений. Например, предположим, что транзакция использует предложение SELECT с фразой FOR UPDATE, чтобы заблокировать строки в таблице. Как следствие, она получает монопольные блокировки строк и разделяемую для строк блокировку таблицы. Если эта транзакция позднее обновляет одну или несколько заблокированных строк, блокировка таблицы автоматически конвертируется из режима RS в режим RX.

ORACLE никогда не прибегает к эскалации блокировок, когда СУБД автоматически заменяет многочисленные блокировки, полученные на одном уровне другой блокировкой на более высоком уровне.

Замки

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

Внутренние блокировки

Внутренние блокировки - это более сложные механизмы, чем замки, и они служат разнообразным целям. Рассмотрим их назначение ниже для трех различных категорий внутренних блокировок:

  1. Блокировки кэша словаря. Эти блокировки на очень короткое время удерживаются для записей словаря при использовании или модификации этих записей. Они гарантируют, что предложения SQL во время их разбора видят согласованные определения объектов. Блокировки кэша словаря могут быть разделяемыми и монопольными. Разделяемые блокировки освобождаются по окончании синтаксического разбора. Монопольные блокировки освобождаются по концу операции DDL.

  2. Блокировки управления файлами и журналом. Эти блокировки защищают различные файлы. Например, одна блокировка защищает управляющий файл, чтобы его мог модифицировать лишь один процесс в каждый момент времени. Другая блокировка координирует использование и архивирование файлов журнала повторения. Файлы данных блокируются для того, чтобы гарантировать, что база данных монтируется несколькими экземплярами в разделяемом режиме или одного экзепляра в монопольном режиме. Поскольку блокировки файлов и журнала отражают состояние файлов, эти блокировки по необходимости удерживаются продолжительное время.

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