Review of undo componets of Oracle RDBMS Andrey Kriushin, RDTEX J.S.C.
Review of undo componets of Oracle RDBMS Еще одна точка зрения на работу СУБД Oracle Откуда смотрим – undo как оперативная часть журнала транзакций Redo thread (stream) Redo record Head of redo thread Redo record: RBA – redo block address Redo entry # OP code Operands SCN of change DBA – data block address [Old data] New data
Темы презентации Как происходят и где регистрируются изменения БД Согласование данных – Multiversion Read Consistency Стуртуры БД, связанные с undo Остальное Управление undo (manual/auto) Особенности для RAC Undo и восстановление БД Новые возможности Oracle 11gR2
Как происходят изменения в БД Многопользовательская БД с минимальным уровнем блокирования объектов Уровни блокирования: - enqueue/lock- до COMMIT/ROLLBACK - latch/mutex - на время использование служебной структуры в SGA (shared pool) - block pin- на время чтения или изменения блока в кеше буферов Наименьшее законченное изменение – redo record (RBA: Redo Block Address + redo record#), содержит инструкцию (OP code) и операнды, в т.ч. новые и старые данные, SCN (???) Одна и та же подпрограмма kcrXXX применяет redo record как при нормальной работе БД, так и при восстановлении БД Некоторые записи redo значимы для согласованного представления данных (COMMIT)
Как происходят изменения в БД Redo stream (или набор threads of redo для RAC) это журнал транзакций. Большинство DBMS обходятся одним журналом как для восстановления, так и для обеспечения целостности чтения. Ибо онЕ суть блокировочнеГи версионник Oracle RDBMS – версионник.
Как происходят изменения в БД Undo – оперативная часть журнала транзакций, необходимая для: Создания согласованного на определенный SCN образа данных Подтверждения фиксации/отката транзакции (DML, SELECT FOR UPDATE) Выполнения очистки блока ([delayed] block cleanout)
Physio-Logical Model Tx layer Complex actionsSequence of block actions Undo record Data layer Logical operation DO Logical operation UNDO Change vectors Block action Change vectors Cache layer Data block Undo block RBU hdr block Chg1Chg2Chg3 Redo record Before (old SCN) After (new SCN) Undo block RBU hdr block Logical operation undo block Logical operation undo hdr block Data block Logical operation DO
SEQ Old SCN SEQNew SCN Before imageAfter imageChange vector DBA SCN Seq# Opcode
Согласование данных – Multiversion Read Consistency Фазы выполнения команды SQL Describe,Define,Parse,Bind Execute – запоминаем текущий SCN [Fetch] Стандартный уровень изоляции – Read Committed – для команды доступны (видны) только данные, зафиксированные с SCN
Стуктуры БД, связанные с undo Undo cостоит из/содержит [ссылки на]: Таблицы SYS.UNDO$ Сегментов отмены (undo) Таблицы транзакций в заголовке сегмента undo, V$TRANSACTION для текущих транзакций KT-layer (Kernel Transaction) в блоках данных (таблицы, индексы, кластеры) Таблица транзакций в блоке данных Transaction control slot и ITL (Interested Transaction List) slots)
Остальное Управление undo (manual/auto) Особенности для RAC Undo и восстановление БД Новые возможности Oracle 11gR2
Q & A Вопросы? FAQ: Q1: Я выполнил COMMIT. Как узнать, c каким SCN завершилась транзакция? A1: Q2: ORA-01555, Snapshot too old? Я проверил, в моей БД нет объектов типа SNAPSHOT... A2: