Базы данных: Oracle
Администрирование баз данных Oracle
11. Транзакция (Transaction)
Транзакция (модуль фиксации) – логический модуль, который состоит из набора изменений (вставок, обновлений и удалений). Транзакции либо должны быть сохранены в базе данных, либо должен быть выполнен их откат. Фиксируются либо все изменения в транзакции, либо ни одно из них. Для фиксирования в базе данных результатов транзакции используется команда COMMIT, для восстановления изменённых данных используется команда ROLLBACK.
Транзакция начинается:
- Когда пользователь подключается к базе данных и начинает с ней работать.
- После выполнения оператора COMMIT.
- После выполнения оператора ROLLBACK.
Откат на уровне оператора – данное понятие означает, что для конкретного оператора либо будут сохранены все внесённые им изменения, либо не будет выполнено ни одно из них.
БЛОКИРОВКИ ( LATCH ) - это механизмы, используемые для того, чтобы предотвратить деструктивные взаимодействия между пользователями, обращающимися к одному и тому же ресурсу, будь то вся таблица или одна строка в таблице. (V$LATCH )
В многопользовательской базе данных могут применяться два уровня блокировок:
- Монопольная блокировка – запрещает разделение ассоциированного ресурса. Первая транзакция, получившая монопольную блокировку ресурса, становится единственной транзакцией, которая может изменять этот ресурс до снятия монопольной блокировки.
- Разделяемая блокировка – позволяет совместно использовать ассоциированный ресурс, в зависимости от того, какие операции выполняются (например, несколько пользователей могут читать данные одновременно). Несколько транзакций могут получить разделяемые блокировки для одного и того же ресурса.
Захват – ситуация, которая возникает, когда два или более пользователей ожидают данных, заблокированных друг другом.
ORACLE автоматически распознает ситуации захватов, и автоматически разрешает такие ситуации, осуществляя откат одного из предложений, вовлеченных в захват и тем самым освобождая одно множество конфликтующих блокировок строк.
Многоверсионная модель согласованности данных.
- ORACLE обеспечивает для всех запросов согласованность по чтению на уровне предложения, которая гарантирует, что данные, возвращаемые запросом, согласованы по отношению к моменту начала этого запроса.
- ORACLE также предоставляет необязательную возможность согласованности по чтению на уровне транзакции, которая гарантирует, что данные, которые видят все запросы внутри транзакции, согласованы по отношению к одной точке времени (моменту начала транзакции). ORACLE обеспечивает согласованность по чтению на уровне транзакции с помощью двух методов:
- Транзакции read-only – могут содержать только запросы и не могут содержать никаких предложений DML (языка манипулирования данными). В течение транзакции её доступны данные, которые были подтверждены к моменту её начала.
- Монопольные блокировки таблиц и строк. Если повторяемость чтений необходимо обеспечить в транзакциях, содержащих предложения DML, транзакция может явно запросить разделяемые блокировки по таблицам или монопольные блокировки по тем строкам, которые будут считываться неоднократно.
Где:
DDL – Data Definition Language – язык содержащий набор операторов для определения данных.
DML – Data Modifying Language – язык содержащий набор операторов для модификации данных.
По умолчанию Oracle автоматически блокирует строки, на которые воздействуют операторы INSERT, UPDATE или DELETE; причём блокируются только те строки, на которые фактически оказано воздействие, а не вся таблица или весь блок данных.
Назначение блокировок данных (блокировок DML) - защитить данные таблицы, гарантируя их целостность при одновременном доступе к данным нескольких пользователей. Блокировки данных предотвращают деструктивное взаимодействие одновременных конфликтующих операций DML и операций DDL. Операции DML могут получать блокировки на двух различных уровнях: для конкретных строк и для целых таблиц.
Блокировки строк (TX)
Монопольная блокировка данных запрашивается для индивидуальной строки от имени транзакции, если эта строка модифицируется одним из следующих предложений: INSERT, UPDATE, DELETE или SELECT с фразой FOR UPDATE. Строка всегда блокируется монопольно, так что другие пользователи не могут модифицировать эту строку до тех пор, пока транзакция, удерживающая блокировку, не будет подтверждена или отменена. Блокировки строк всегда запрашиваются ORACLE автоматически как результат приведенных выше предложений.
Блокировки таблиц (TM)
Транзакция запрашивает блокировку таблицы, когда таблица модифицируется следующими предложениями: INSERT, UPDATE, DELETE, SELECT с фразой FOR UPDATE, либо блокируется предложением LOCK TABLE. Блокировка таблицы может удерживаться в одном из следующих режимов: разделяемая для строк (RS), монопольная для строк (RX), разделяемая для таблицы (S), разделяемая для строк монопольная (SRX) и монопольная(X). Степень ограничения доступа, налагаемая блокировкой, определяет, какие режимы блокировок по этой же таблице могут быть получены другими одновременными транзакциями.
Разделяемые для строк блокировки таблиц (RS)
Эта блокировка указывает, что транзакция, удерживающая блокировку по таблице, блокировала строки в этой таблице и намерена обновить их. Эта блокировка автоматически запрашивается для ТАБЛИЦЫ, модифицируемой следующими предложениями:
SELECT ... FROM таблица ... FOR UPDATE OF ...;
LOCK TABLE таблица IN ROW SHARE MODE;
Блокировка RS - это наименее ограничительный режим блокировки таблицы, предоставляющий наибольшую степень одновременного доступа к таблице.
Блокировка RS, удерживаемая транзакцией, запрещает другим транзакциям получать монопольный доступ по записи к данной таблице, который запрашивается следующим предложением (и только им):
LOCK TABLE таблица IN EXCLUSIVE MODE;
Монопольные для строк блокировки таблиц (RX)
Эта блокировка обычно указывает, что транзакция, удерживающая блокировку по таблице, уже выполнила одно или несколько обновлений в строках таблицы. Эта блокировка автоматически запрашивается для ТАБЛИЦЫ, модифицируемой следующими предложениями:
- INSERT INTO таблица ...;
- UPDATE таблица ...;
- DELETE FROM таблица ...;
- LOCK TABLE таблица IN ROW EXCLUSIVE MODE;
Блокировка RX, удерживаемая транзакцией, запрещает другим транзакциям вручную блокировать таблицу для монопольного чтения или записи; поэтому другие транзакции не могут одновременно использовать следующие предложения:
- LOCK TABLE таблица IN SHARE MODE;
- LOCK TABLE таблица IN SHARE EXCLUSIVE MODE;
- LOCK TABLE таблица IN EXCLUSIVE MODE;
Разделяемые блокировки таблиц (S)
Блокировка S, удерживаемая транзакцией, позволяет другим транзакциям одновременно лишь опрашивать эту таблицу, блокировать выбираемые строки с помощью команды SELECT ... FOR UPDATE, или успешно выполнять предложения LOCK TABLE ... IN SHARE MODE; никакие обновления они не могут осуществлять. Несколько транзакций могут одновременно удерживать блокировки S для одной и той же таблицы.
Разделяемая блокировка таблицы, удерживаемая транзакцией, также запрещает другим транзакциям выполнять следующие предложения:
- LOCK TABLE таблица IN SHARE EXCLUSIVE MODE;
- LOCK TABLE таблица IN EXCLUSIVE MODE;
- LOCK TABLE таблица IN ROW EXCLUSIVE MODE;
Разделяемые для строк монопольные блокировки таблиц (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. Например, замки защищают список пользователей, обращающихся к базе данных в текущий момент, а также структуры данных, описывающие блоки в буферном кэше. Серверный или фоновый процесс получает замок на очень короткое время, пока он манипулирует или просматривает одну из таких структур. Реализация замков зависит от операционной системы, особенно в вопросе о том, ожидает ли процесс замка и сколь долго.
Внутренние блокировки
Внутренние блокировки - это более сложные механизмы, чем замки, и они служат разнообразным целям. Рассмотрим их назначение ниже для трех различных категорий внутренних блокировок:
- Блокировки кэша словаря. Эти блокировки на очень короткое время удерживаются для записей словаря при использовании или модификации этих записей. Они гарантируют, что предложения SQL во время их разбора видят согласованные определения объектов. Блокировки кэша словаря могут быть разделяемыми и монопольными. Разделяемые блокировки освобождаются по окончании синтаксического разбора. Монопольные блокировки освобождаются по концу операции DDL.
- Блокировки управления файлами и журналом . Эти блокировки защищают различные файлы. Например, одна блокировка защищает управляющий файл, чтобы его мог модифицировать лишь один процесс в каждый момент времени. Другая блокировка координирует использование и архивирование файлов журнала повторения. Файлы данных блокируются для того, чтобы гарантировать, что база данных монтируется несколькими экземплярами в разделяемом режиме или одного экзепляра в монопольном режиме. Поскольку блокировки файлов и журнала отражают состояние файлов, эти блокировки по необходимости удерживаются продолжительное время.
- Блокировки табличных пространств и сегментов отката . Эти блокировки защищают табличные пространства и сегменты отката. Например, все экземпляры, имеющие доступ к базе данных, должны согласованно отражать онлайновое или офлайновое состояние табличного пространства. Сегменты отката блокируются для того, чтобы лишь один экземпляр мог писать в сегмент отката.
Явные блокировки данных
Во всех случаях ORACLE автоматически осуществляет блокировки для обеспечения одновременного доступа, целостности и согласованности данных на уровне предложения. Однако имеются возможности, которые позволяют вам перекрывать умалчиваемые механизмы блокировок ORACLE. Такое перекрытие полезно в следующих ситуациях:
- Приложениям требуется согласованность по чтению на уровне транзакций или "повторяемость чтений"; транзакциям необходимо опрашивать множество данных, согласованное на все время выполнения транзакции, с гарантией, что эти данные не будут изменены другими транзакциями в системе.
- Приложениям требуется, чтобы транзакция имела монопольный доступ к ресурсу; такая транзакция может выполняться, не ожидая завершения других транзакций.
Государственный комитет Российской федерации
по высшему образованию.
ГОСУДАРСТВЕННЫЙ САНКТ-ПЕТЕРБУРГСКИЙ
ИНСТИТУТ ТОЧНОЙ МЕХАНИКИ И ОПТИКИ
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
кафедра вычислительной техники
Санкт-Петербург
2000 год
Назад | Оглавление | Далее
При перепечатке любого материала
с сайта, видимая ссылка на источник www.warayg.narod.ru
и все имена, ссылки авторов обязательны.
© 2005
|