Отправляет email-рассылки с помощью сервиса Sendsay

Килограмм килобайтов

  Все выпуски  

Килограмм килобайтов


"Килограмм килобайтов"


Выпуск №17 Дата выхода:2007-08-12
Сайт рассылки: Рациональное программирование

Здравствуйте, уважаемые подписчики.


Продолжаем изучать основные свойства СУБД Oracle.
Предлагаю вам мой перевод части документации Oracle Database Concepts 10g Release 2 (10.2) B14220-02.

Read Consistency (Устойчивое чтение)

    Реализация устойчивого чтения в Oracle заключается в следующем:
  • Гарантируется, что если одна трансакция работает с набором данных, то другая трансакция не изменит этот набор (блокирующее чтение на уровне трансакции).
  • Гарантируется, что процессы, читающие данные, не будут ждать пока процессы, записывающие или читающие эти же данные, закончат свою работу.
  • Гарантируется, что процессы, записывающие данные, не будут ждать завершения работы процессов читающих эти же данные.
  • Гарантируется, что записывающие процессы будут ждать завершения работы только записывающих процессов, если они работают с одним набором данных.
Чтобы понять, как работает устойчивое чтение в Oracle, можно представить, что каждый пользователь работает со своей личной копией базы данных, это и есть многовариантная устойчивая модель.

Устойчивое чтение, записи отката и трансакции.
Чтобы управлять многовариантной устойчивой моделью, Oracle должен обеспечить устойчивое чтение, если таблица обновляется во время извлечения из нее данных. Во время обновления (update) первоначальные данные изменяются и сохраняются в записи отката базы данных. Пока трансакция обновления не будет завершена (commit), выборка обновленных данных, выполненная из другой сессии, вернет первоначальные значения. Чтобы создать read-consistent view (представление устойчивого чтения) данных таблицы, Oracle использует текущую информацию из SGA и информацию из записей отката.
Изменения, сделанные трансакцией, фиксируются только после завершения (команда commit), и только после этого измененные данные будут видны в других сессиях.
Трансакция - это ключевой фактор стратегии обеспечения целостности данных в СУБД Oracle.

Трансакции, не меняющие данные (Read-Only Transactions).
По умолчанию Oracle гарантирует устойчивое чтение на уровне запроса. Набор данных, возвращаемый одиночным запросом, блокируется только на время выборки. Однако, в некоторых случаях вам может потребоваться устойчивое чтение на уровне трансакции. Это возможность выполнить множество запросов в рамках одной трансакции, причем можно быть уверенным, за время выполнения последующих запросов данные, которые вернул первый запрос, не изменятся, т.е. не будут учтены изменения, сделанные за это время завершенными трансакциями. Если вам надо сделать несколько запросов из разных таблиц, и вы не изменяете эти таблицы, используйте трансакции read-only.

Механизм блокировок

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

Автоматические блокировки.
Oracle устанавливает такие блокировки автоматически, без участия пользователя. Скрытая блокировка устанавливается для SQL-выражений, если необходимо проконтролировать зависимости. Механизм блокировок Oracle автоматически блокирует таблицы данных на уровне отдельных записей. Блокировка отдельных записей, а не таблиц целиком позволяет свезти к минимуму конкурентный доступ к одним и тем же данным. Механизм блокировок поддерживает несколько типов блокировок записей. Необходимый тип выбирается зависимости от того, какая операция выполняется. В целом блокировки разделяют на два типа: exclusive locks (эксклюзивные блокировки) и share locks (общие блокировки). Одновременно только одна эксклюзивная блокировка может быть наложена на ресурс (запись или таблицу). В то же время, на один ресурс можно установить несколько общих блокировок. И эксклюзивные и общие блокировки всегда разрешают выполнять выборку заблокированного ресурса, но запрещают другие действия, такие как изменение и удаление.

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

Продолжение следует...


* * *

Ведущий рассылки: Петрелевич Сергей

Вас есть вопрос? Спрашивайте
Напишите, что Вы хотите видеть в рассылке. Мне важно знать Ваше мнение.


В избранное