Транзакция базы данных Oracle

В предыдущих заметках блога знакомились с компонентами системы базы данных Oracle: необходимыми файлами и распределением памяти, а также способами их настройки. Теперь пришло время посмотреть, как Oracle обрабатывает пользовательские запросы и как проводит изменения в данных. Важно понимать механизм обработки транзакций SQL, потому что все взаимодействие с базой данных Oracle происходит либо в форме запросов SQL, которые читают данные, либо операций SQL (или PL/SQL), которые модифицируют, вставляют или удаляют данные.

Транзакция — это логическая единица работы в базе данных Oracle, состоящая из одного или более операторов SQL. Транзакция начинается с первого исполняемого оператора SQL и завершается, когда вы фиксируете или откатываете транзакцию.Фиксация (commiting) транзакции закрепляет проведенные вами изменения, а откат (roll back) — конечно же, отменяет их. Как только вы зафиксировали транзакцию, все прочие транзакции других пользователей, которые начались после нее, смогут видеть изменения, проведенные вашими транзакциями.

Когда транзакция вообще не может выполниться (скажем, из-за отключения электропитания), то она вся целиком должна быть отменена. Oracle откатывает все изменения, проведенные предшествующими операторами SQL, возвращая данные в исходное состояние (которое они имели перед началом транзакции). Весь процесс построен так,чтобы поддерживать целостность данных — т.е. концепцию “все или ничего”.

Следующий простой пример вставки строки описывает то, как Oracle обрабатывает транзакцию.

  1. Пользователь запрашивает соединение с сервером Oracle через 3-уровневый или n-уровневый клиент, используя Oracle Net Services.
  2. После проверки запроса сервер запускает новый выделенный серверный процесс для этого пользователя.
  3. Пользователь выполняет оператор для вставки новой строки в таблицу.
  4. Oracle проверяет привилегии пользователя, чтобы удостовериться, что он имеет необходимые права для выполнения вставки. Если информация о привилегиях пользователя еще отсутствует в библиотечном кэше, она будет прочитана с диска в этот кэш.
  5. Если пользователь имеет необходимые привилегии, Oracle проверяет, не выполнялся ли подобный данному оператор SQL недавно, и не находится ли он в разделяемом пуле. Если да, Oracle выполняет эту версию оператора SQL, а в противном случае разбирает и выполняет новый пользовательский оператор SQL. Затем Oracle создает частную область SQL в PGA пользовательского сеанса.
  6. Сначала Oracle проверяет, нет ли нужных данных в буферном кэше данных. Если нет, серверный процесс читает необходимую таблицу из файлов данных на диске.
  7. Oracle немедленно применяет блокировки уровня строки где это необходимо, предотвращая попытки других процессов изменить те же данные параллельно.
  8. Сервер пишет векторы изменений в буфер журнала повторного выполнения.
  9. Сервер модифицирует табличные данные (вставляет новую строку) в буферный кэш данных.
  10. Пользователь фиксирует транзакцию, закрепляя вставку. Oracle снимает блокировки строки после окончания фиксации.
  11. Процесс-писатель журнала немедленно записывает измененные данные из буферов журналов повторного выполнения в онлайновый файл журнала.
  12. Серверный процесс посылает сообщение клиентскому процессу, сигнализируя об успешном завершении операции INSERT. В данном случае сообщение будет содержать “COMMIT COMPLETE”. (Если он не сможет завершить запрос успешно, то пошлет сообщение, указывающее на сбой операции.)
  13. Изменения, проведенные в таблице посредством вставки, могут быть не сразу записаны на диск. Процесс-писатель базы данных производит запись пакетами, так что может пройти некоторое время, прежде чем вставленная информация действительно попадет в файл данных на диске.

 

Вас заинтересует / Intresting for you:

Поддерживаемые Oracle типы дан...
Поддерживаемые Oracle типы дан... 5714 просмотров Валерий Павлюков Wed, 24 Oct 2018, 08:00:37
Видеокурс по администрированию...
Видеокурс по администрированию... 10572 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Транзакции в Oracle
Транзакции в Oracle 11005 просмотров Ирина Светлова Tue, 21 Nov 2017, 13:18:05
Создание базы данных Oracle
Создание базы данных Oracle 18924 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39
Войдите чтобы комментировать

apv аватар
apv ответил в теме #8508 29 мая 2017 11:15
Транзакция - базовое фундаментальное понятие в базе данных Oracle Database (как, впрочем, и в любой реляционной БД). Знать и ументь управлять механизмом транзакций в Oracle должен уметь как программист, так и администратор баз данных.