Навигация
|
Основы Oracle 18c - 19c часть 5 - транзакцииОсновы Oracle 18c - 19c часть 5 - транзакции
В данной заметке речь пойдет о транзацкциях
Из предыдущих уроков имеем три взаимосвязанные таблицы с данными колонками:
payments ( payment_num, payment_date, customer, customer_address, total_cost )
payments_goods ( payment_num, good_num, good_name, quantity, price, cost )
payments_services ( payment_num, service_name, cost )
Транзакция по сути - логическая единица работы в базе данных
Начинается с первого исполняемого опертартора SQL, завершается при фиксации или откате
Исполняемый оператор SQL - который генерирует обращения к экземпляру БД
Включая операторы DML и DDL и оператор SET TRANSACTION
Фиксация транзакции имеет следующую логику:
Создает данные для отмены undo, состоит из значений данных, подлежащих модификации до внесения изменений
Создает данные повторного выполнения redo
БД пишет на диск содержимое буферов журнала повторного выполнения перед фиксацией транзакции
Делает изменения в буферах бд, сама бд может писать модифицированные буферы на диск перед фиксацией транзакции
БД может писать изменения транзакции немедленно или с задержкой из буферов бд в файлы данных
При фиксации транзакции БД делает:
Записывает SCN для фиксируемой транзакции
SCN – логическая временная метка упорядочивания событий, происходящих с БД
SCN похожи на возрастающие номера последовательностей, которые увеличиваются в SGA
wallwriter - записывает элементы журнала повторного выполнения
Пишет в файл журнала повторного выполнения на диске из буфера журнала повторного выполнения в SGA
Пишет SCN транзакции в файл журнала повторного выполнения, помечая фиксацию транзакции
БД освобождает блокировки таблиц и строк
БД помечает транзакцию завершенной
Откат транзакции
Отменить изменения транзакции, если они еще не были зафиксированы можно с помощью ROLLBACK
Возможно откатить все изменения или вернуться к точке сохранения
Кем и как может произойти откат:
Человеком
Произошедший аварийно ввиду прерывания работы процесса
Откат незафиксированных транзакций во время восстановления
Откат на уровне оператора, произошедший из-за ошибки выполнения оператора
Процедура для всех случаев отката выглядит так:
БД использует данные в виде, который они имели до изменения в табличном пространстве в undo
БД освобождает все блокировки транзакции и таблицы.
БД завершает транзакцию
Транзакции имеют операторы управления:
Слова WORK необязательный характер:
Используется таблица для примера:
payments_services ( payment_num, service_name, cost )
В следующем примере:
Выполняется инструкция UPDATE, чтобы начать транзакцию
Запрашивается V$TRANSACTION для получения подробной информации о транзакции
Совершается откат
Транзакция больше не существует
Для более подробного изучения транзакций обратитесь к оф. документации
Примеры работы с транзакциями
Можете использовать UPDATE, DELETE, INSERT для изменения данных
Комментарии пользователей Эту новость ещё не комментировалиНаписать комментарий Анонимам нельзя оставоять комментарии, зарегистрируйтесь! |
Контакты Группа ВК | Код обмена баннерами | Видео к IT статьям на YoutubeВидео на другие темы Смотреть | |||
Мои друзья: | © Snakeproject.ru создан в 2013 году.При копировании материала с сайта - оставьте ссылку.Весь материал на сайте носит ознакомительный характер,за его использование другими людьми, автор ответственности не несет. |
||||
Поддержать автора и проект
|