Уровень изоляции транзакции для SELECT - PullRequest
4 голосов
/ 15 декабря 2011

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

Я полагаю, что если в середине этой транзакции любая другая транзакция фиксирует некоторое ОБНОВЛЕНИЕ или ВСТАВКУ для базы данных, эти новые данные являются ВИДИМЫМИ для остальных оставшихся выборов в предыдущей транзакции. Это предположение верно?

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

Если это зависит от транзакционной политики каждой СУБД, какова политика Oracle?

Ответы [ 2 ]

4 голосов
/ 15 декабря 2011

Ваше предположение верно, по крайней мере, для Oracle.

Oracle гарантирует последовательность чтения, выполненного в данный момент. После начала чтения не имеет значения, изменят ли выбранные данные другие транзакции - Oracle гарантирует, что данные были в базе данных в начале чтения. Если он не может выполнить эту гарантию, вы получаете ошибку «Снимок ORA-01555 слишком старый». Однако последующие выборки могут не получить тот же ответ.

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

Если вы просто ищете данные в определенный момент времени, Oracle предоставляет ретроспективные запросы.

0 голосов
/ 16 декабря 2011

Скопируйте и вставьте ответ, данный как комментарий к вопросу:

Уровень изоляции по умолчанию в Oracle - «зафиксировано на чтение» (вы «видите» изменения, зафиксированные другими транзакциями, даже если они были зафиксированы после запуска вашей транзакции).Oracle также позволяет вам установить уровень изоляции на «сериализуемый» (вы только «видите» изменения, которые были зафиксированы другими транзакциями в момент запуска транзакции) или «только для чтения» (например, «сериализуемый», за исключением того, что он неразрешить ВСТАВИТЬ, ОБНОВИТЬ или УДАЛИТЬ).Подробнее см. ссылка .

...