DML и согласованность — Итоги
DML команды
- INSERT добавляет строки в таблицу
- UPDATE изменяет значения в существующих строках
- DELETE удаляет строки
- MERGE может комбинировать функционал команд INSERT, UPDATE и DELETE
- Несмотря на то, что команда TRUNCATE это не DML команда, она удаляет все строки в таблице
- Команда INSERT может добавлять строки в несколько таблиц
- Подзапросы могут быть использованы для выбора строк которые необходимо добавить, изменить или удалить
- Изменения сделанные командами INSERT, UPDATE и DELETE видны только после подтверждения транзакции
- TRUNCATE удаляет все строки из таблицы
- Команда TRUNCATE подтверждается сразу после выполнения автоматически: её нельзя отменить
Управление транзакциями
- Транзакция это логическая единица работы, возможно состоящая из нескольких команд DML
- Транзакции не видны другим сессиям пока не подтверждены
- Пока транзакция не подтверждена она может быть отменена
- Точка сохранения позволяет сессии отменить часть транзакции
Управление данными с помощью команд DML
- Все команды DML создают данные повтора изменений (redo) и отката (undo)
- Redo данные хранят все изменения сегментов – как сегментов данных, так и сегментов undo
- Серверные процессы читают из файлов данных (используя буфер кэш); DBWn записывает данные в файлы данных
Объекты PL/SQL
- Анонимные PL/SQL объекты хранятся на стороне клиента; хранимые объекты хранятся в словаре данных
- Процедуры и функции могут объединятьяс в пакеты; триггеры не могут входить в пакеты
- PL/SQL код может выполнять SQL код
Мониторинг и разрешение конфликтов блокировок
- Уровень блокировки по умолчанию – строка
- Блокировки необходимы для DML команд и доступны для команды SELECT
- DML команды требуют исключительную блокировку строк и общую блокировку объектов используемых в команде
- DDL команды требуют исключительную блокировку объекта
- Deadlock – и разрешаются автоматически
Undo
- Все DML команды создают данные undo
- Данные undo используются для отменты транзакции и изоляции, а также для согласованности чтения и flashback запросов
- Автоматическое управление undo используя сегменты undo является значением по умолчанию начиная с версии 11g
Транзакции и undo
- Данные undo всегд хранятся пока транзакция не завершена командой COMMIT или ROLLBACK. Это активные данные undo
- Данные undo сохраняются после того как они стали неактивными для согласованности чтения долгих запросов; это неустаревшие данные undo
- Устаревшие данные не нужны для согласованности чтения и могут быть перезаписаны в любое время когда нужно место в сегменте undo
Управление undo
- Экземпляр использует сегменты undo в одном явно указанном табличном пространтсве undo
- Другие табличные пространтсва undo могут существовать, но только одно может быть активным
- Табличное пространтсво undo должно быть достаточно большим чтобы вмещать данные при максимальной нагрузке в течении времени выполнения самого долгого запроса
- Файлы данных в табличном пространстве undo такие же как и файлы данных обычного табличного пространства