МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE Тема 7. Транзакции, оперативная обработка транзакций (OLTP) Цель: познакомиться с понятием транзакции, принципами использования этого понятия при параллельной работе пользователей с базой данных, с моделями транзакций, используемыми в современных СУБД и методами управления транзакциями при многопользовательском режиме работы. Оглавление 7.1. Понятие транзакции, модели транзакций ........................................................... 1 7.1.1. Расширенная модель транзакции ..................................................................... 3 7.2. Параллельное выполнение транзакций .............................................................. 3 7.2.1. Проблемы параллельной работы транзакций .................................................. 3 7.2.2. Конфликты между транзакциями ..................................................................... 6 Матрица совместимости S- и X-блокировок ............................................................... 7 7.3. Операторы SQL для описания уровня изолированности пользователей ............ 9 7.3.1. Реализация изолированности транзакций средствами SQL. Уровни изоляции .................................................................................................................... 9 Связь уровней изолированности с проблемами параллельного выполнения транзакций ................................................................................................................. 9 7.4. Технология тиражирования данных ................................................................. 10 Вопросы для самопроверки ..................................................................................... 11 7.1. Понятие транзакции, модели транзакций Транзакцией называется последовательность операций, производимых над базой данных, переводящая базу данных из одного непротиворечивого состояния в другое непротиворечивое состояние. Транзакция рассматривается как некоторое неделимое действие над базой данных, осмысленное с точки зрения пользователя. В то же время это логическая единица работы системы. Существуют несколько моделей транзакций, которые могут быть классифицированы на основании различных свойств. Традиционные транзакции характеризуются четырьмя классическими свойствами: атомарности, согласованности, изолированности, долговечности (прочности) — ACID (Atomicity, Consistency, Isolation, Durability). Иногда традиционные транзакции называют ACID-транзакциями. Упомянутые выше свойства означают следующее. Свойство атомарности выражается в том, что транзакция должна быть выполнена в целом или не выполнена вовсе. Свойство согласованности гарантирует, что по мере выполнения транзакций данные переходят из одного согласованного состояния в другое — транзакция не разрушает взаимной согласованности данных. Свойство изолированности означает, что конкурирующие за доступ к базе данных транзакции физически обрабатываются последовательно, изолированно друг от друга, но для пользователей это выглядит так, как будто они выполняются параллельно. Свойство долговечности трактуется следующим образом: если транзакция завершена успешно, то те изменения в данных, которые были ею произведены, не могут быть потеряны ни при каких обстоятельствах (даже в случае последующих ошибок). 1 МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE Возможны два варианта завершения транзакции. Если все операторы выполнены успешно и в процессе выполнения транзакции не произошло никаких сбоев программного или аппаратного обеспечения, транзакция фиксируется. Фиксация транзакции — это действие, обеспечивающее запись на диск изменений в базе данных, которые были сделаны в процессе выполнения транзакции. Фиксация транзакции обеспечивается выполнением оператора COMMIT. До тех пор, пока транзакция не зафиксирована, возможно аннулирование этих изменений и восстановление базы данных в то состояние, в котором она была на момент начала транзакции. Фиксация транзакции означает, что все результаты выполнения транзакции становятся постоянными. До момента фиксации транзакции все данные, затрагиваемые транзакцией, будут «видны» пользователю в исходном состоянии, которое существовало на момент начала текущей транзакции. Если в процессе выполнения транзакции случилось нечто такое, что делает невозможным ее нормальное завершение, база данных должна быть возвращена в исходное состояние, и это может быть выполнено с использованием оператора отката транзакции ROLLBACK. Современные СУБД являются многопользовательскими системами, т. е. допускают параллельную одновременную работу большого количества пользователей. При этом пользователи не должны мешать друг другу. Так как логической единицей работы для пользователя является транзакция, то работа СУБД должна быть организована так, чтобы у пользователя складывалось впечатление, что их транзакции выполняются независимо от транзакций других пользователей. Откат транзакции — это действие, обеспечивающее аннулирование всех изменений данных, которые были сделаны операторами SQL в теле текущей незавершенной транзакции. Каждый оператор в транзакции выполняет свою часть работы, но для успешного завершения работы в целом требуется безусловное завершение всех операторов транзакции. Группирование операторов в транзакции сообщает СУБД, что вся эта группа должна быть выполнена как единое целое, причем такое выполнение должно поддерживаться автоматически. В стандарте ANSI/ISO SQL определены модель транзакций и функции операторов COMMIT и ROLLBACK. Стандарт определяет, что транзакция начинается с первого SQL-оператора, инициируемого пользователем или содержащегося в программе, который изменяет текущее состояние базы данных. Все последующие SQL-операторы составляют тело транзакции. Транзакция завершается одним из четырех возможных путей: оператором COMMIT, что означает успешное завершение транзакции; его использование делает постоянными изменения, внесенные в базу данных в рамках текущей транзакции; оператором ROLLBACK, который прерывает транзакцию, отменяя изменения, сделанные в базе данных в рамках этой транзакции; новая транзакция начинается непосредственно после оператора ROLLBACK; успешным завершением программы, в которой была инициирована текущая транзакция, что означает успешное завершение транзакции (как будто был использован оператор COMMIT); ошибочным завершением программы, которое прерывает транзакцию (как будто был использован оператор ROLLBACK). 2 МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE 7.1.1. Расширенная модель транзакции Эта модель включает дополнительные операторы SAVE TRANSACTION A — сохранить временное состояние транзакции, названное точкой A, и оператор ROLLBACK A — откатить транзакцию в точку A. Современные СУБД являются многопользовательскими системами, т. е. допускают параллельную одновременную работу большого количества пользователей. При этом пользователи не должны мешать друг другу. Так как логической единицей работы для пользователя является транзакция, то работа СУБД должна быть организована так, чтобы у пользователя складывалось впечатление, что их транзакции выполняются независимо от транзакций других пользователей. Транзакция рассматривается как последовательность элементарных атомарных операций. Атомарность отдельной элементарной операции состоит в том, что СУБД гарантирует, что, с точки зрения пользователя, будут выполнены два условия: 1) эта операция будет выполнена целиком или не выполнена вовсе (атомарность — все или ничего); 2) во время выполнения этой операции не выполняются никакие другие операции других транзакций (строгая очередность элементарных операций). Элементарные операции различных транзакций могут выполняться в произвольной очередности (конечно, внутри каждой транзакции последовательность элементарных операций этой транзакции является строго определенной). Например, есть несколько транзакций, состоящих из последовательности операций элементарных. Пусть даны 3 транзакции T, Q и S, каждая из которых состоит из ряда элементарных операций над базой данных. T ={ T1, T2,..., Tn }, Q ={ Q1, Q2,..., Qm }, S ={ S1, S2,..., Sl } Определение 1. Набор из нескольких транзакций, элементарные операции которых чередуются друг с другом, называется смесью транзакций. Определение 2. Последовательность, в которой выполняются элементарные операции заданного набора транзакций, называется графиком запуска набора транзакций. Очевидно, что для заданного набора транзакций может быть несколько (вообще говоря, достаточно много) различных графиков запуска. Обеспечение изолированности пользователей, таким образом, сводится к выбору подходящего (в каком-то смысле правильного) графика запуска транзакций. Одновременно с этим график запуска должен быть оптимальным в некотором смысле, например давать минимальное среднее время выполнения транзакций каждым пользователем. 7.2. Параллельное выполнение транзакций 7.2.1. Проблемы параллельной работы транзакций Различают три основные проблемы параллелизма: проблема потери результатов обновления; проблема незафиксированной зависимости неаккуратное считывание); проблема несовместимого анализа. 3 (чтение «грязных» данных, МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE Рассмотрим две транзакции A и B, запускающиеся в соответствии с некоторыми графиками. Пусть транзакции работают с некоторыми объектами базы данных, например со строками таблицы. Операцию чтения строки P будем обозначать P = P0 , где P0 — прочитанное значение. Операцию записи значения P1 в строку P будем обозначать P1 -> P. Проблема потери результатов обновления Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения. Мы видим, что все изменения, которые были внесены транзакцией А потеряны. В ячейке P остались данные, записанные транзакцией В (табл. 7.1). Таблица 7.1 Транзакция A Чтение P=P0 --Запись P1 ->P --Фиксация транзакции --Потеря результата обновления Время t1 t2 t3 t4 t5 t6 Транзакция B --Чтение P=P0 --Запись P2->P --Фиксация транзакции Проблема незафиксированной зависимости (чтение «грязных» неаккуратное считывание) данных, Транзакция B изменяет данные в строке. После этого транзакция A читает измененные данные и работает с ними. Транзакция B откатывается и восстанавливает старые данные (табл. 7.2). Таблица 7.2 Транзакция A ----Чтение P=P1 Работа с прочитанными данными P1 --Фиксация транзакции Работа с «грязными» данными Время t1 t2 t3 t4 t5 t6 Транзакция B Чтение P=P0 Запись P1->P ----Откат транзакции P0->P --- Результат. Транзакция A в своей работе использовала данные, которых нет в базе данных. Более того, транзакция A использовала данные, которых нет и не было в базе данных! Действительно, после отката транзакции B должна восстановиться ситуация, как если бы транзакция B вообще никогда не выполнялась. Таким образом, результаты работы транзакции A некорректны, так как она работала с данными, отсутствовавшими в базе данных. Проблема несовместимого анализа Проблема несовместимого анализа включает несколько различных вариантов: неповторяемое считывание; фиктивные элементы (фантомы); собственно несовместимый анализ. 4 МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE Неповторяемое считывание Транзакция A дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция B, которая изменяет значения в строке (табл. 7.3). Таблица 7.3 Транзакция A Чтение P=P0 ------Повторное чтение P=P1 Фиксация транзакции Неповторяемое считывание Время t1 t2 t3 t4 t5 t6 Транзакция B --Чтение P=P0 Запись P1=P Фиксация транзакции ----- Транзакция A ничего не знает о существовании транзакции B и, так как сама она не меняет значение в строке, то ожидает, что после повторного чтения значение будет тем же самым. Фиктивные элементы (фантомы) Эффект фиктивных элементов несколько отличается от предыдущих транзакций тем, что здесь за один шаг выполняется достаточно много операций — чтение одновременно нескольких строк, удовлетворяющих некоторому условию. Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора (табл. 7.4). Таблица 7.4 Транзакция A Выборка строк, удовлетворяющих условию α. (Отобрано n строк) --- Время t1 Транзакция B --- t2 --Выборка строк, удовлетворяющих условию α. (Отобрано n+1 строк) Фиксация транзакции Появились строки, которых раньше не было t3 t4 Вставка новой строки, удовлетворяющей условию α. Фиксация транзакции --- t5 --- Транзакция A ничего не знает о существовании транзакции B и, так как сама она не меняет ничего в базе данных, то ожидает, что после повторного отбора будут отобраны те же самые строки. Результат. Транзакция A в двух одинаковых выборках строк получила разные результаты. Собственно несовместимый анализ Эффект собственно несовместимого анализа также отличается от предыдущих примеров тем, что в смеси присутствуют две транзакции — одна длинная, другая короткая. 5 МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE Длинная транзакция выполняет некоторый анализ по всей таблице, например подсчитывает общую сумму денег на счетах клиентов банка для главного бухгалтера. Пусть на всех счетах находятся одинаковые суммы, например по $100. Короткая транзакция в этот момент выполняет перевод $50 с одного счета на другой так, что общая сумма по всем счетам не меняется (табл. 7.5). Таблица 7.5 Транзакция A Чтение счета P1=100 и суммирование. SUM=100. --- Время t1 Транзакция B --- t2 --- t3 --Чтение счета P2=100 и суммирование. SUM=200 Чтение счета P3=50 и суммирование. SUM=250 Фиксация транзакции Сумма $250 по всем счетам неправильная - должно быть $300 t4 t5 Снятие денег со счета P3. P3:100->50 Помещение денег на счет P1. P1:100->150 Фиксация транзакции --- t6 --- t7 --- Результат. Хотя транзакция B все сделала правильно — деньги переведены без потери, но в результате транзакция A подсчитала неверную общую сумму. Так как транзакции по переводу денег идут обычно непрерывно, то в данной ситуации следует ожидать, что главный бухгалтер никогда не узнает, сколько же денег в банке. 7.2.2. Конфликты между транзакциями Итак, анализ проблем параллелизма показывает, что если не принимать специальных мер, то при работе в смеси нарушается свойство транзакций — изолированность. Транзакции реально мешают друг другу получать правильные результаты. Однако не всякие транзакции мешают друг другу. Очевидно, что транзакции не мешают друг другу, если они обращаются к разным данным или выполняются в разное время. Определение 3. Транзакции называются конкурирующими, если они пересекаются по времени и обращаются к одним и тем же данным. В результате конкуренции за данными между транзакциями возникают конфликты доступа к данным. Различают следующие виды конфликтов: W-W (Запись — Запись). Первая транзакция изменила объект и не закончилась. Вторая транзакция пытается изменить этот объект. Результат — потеря обновления. R-W (Чтение — Запись). Первая транзакция прочитала объект и не закончилась. Вторая транзакция пытается изменить этот объект. Результат — несовместимый анализ (неповторяемое считывание). 6 МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE W-R (Запись — Чтение). Первая транзакция изменила объект и не закончилась. Вторая транзакция «грязных» данных. пытается прочитать этот объект. Результат — чтение Определение 4. График запуска набора транзакций называется последовательным, если транзакции выполняются строго по очереди, т. е. элементарные операции транзакций не чередуются друг с другом. Определение 5. Если график запуска набора транзакций содержит чередующиеся элементарные операции транзакций, то такой график называется чередующимся. Определение 6. Два графика называются эквивалентными, если при их выполнении будет получен один и тот же результат, независимо от начального состояния базы данных. Определение 7. График запуска транзакции называется верным (сериализуемым), если он эквивалентен какому-либо последовательному графику. Оптимальным будет график, дающий минимум стоимостной функции. Очевидно, оптимальность графика запуска зависит от выбора стоимостной функции, т. е. график, оптимальный с точки зрения одних критериев (например, с точки зрения приведенной функции стоимости), не будет оптимальным с точки зрения других критериев (например, с точки зрения достижения максимально быстрого начала выполнения каждой транзакции). Так как транзакции не мешают друг другу, если они обращаются к разным данным или выполняются в разное время, то имеется два способа разрешить конкуренцию между поступающими в произвольные моменты транзакциями: 1. «Притормаживать» некоторые из поступающих транзакций настолько, насколько это необходимо для обеспечения правильности смеси транзакций в каждый момент времени (т. е. обеспечить, чтобы конкурирующие транзакции выполнялись в разное время). 2. Предоставить конкурирующим транзакциям «разные» экземпляры данных (т. е. обеспечить, чтобы конкурирующие транзакции работали с разными версиями данных). Первый метод — «притормаживание» транзакций — реализуется использованием блокировок различных видов или метода временных меток. путем Второй метод — предоставление разных версий данных — реализуется путем использованием данных из журнала транзакций. Различают два типа блокировок: монопольные блокировки (X-блокировки, X-locks-eXclusive locks) — блокировки без взаимного доступа (блокировка записи); разделяемые блокировки (S-блокировки, S-locks — Shared locks) — блокировки с взаимным доступом (блокировки чтения) (табл. 7.6). Таблица 7.6 Матрица совместимости S- и X-блокировок Транзакция A наложила блокировку S-блокировку X-блокировку Транзакция B пытается наложить блокировку X-блокировку S-блокировку Да НЕТ (Конфликт R-W) НЕТ НЕТ(Конфликт W-W) (Конфликт W-R) 7 МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE Доступ к объектам базы данных на чтение и запись должен в соответствии со следующим протоколом доступа к данным: осуществляться 1. Прежде чем прочитать объект, транзакция должна наложить на этот объект Sблокировку. 2. Прежде чем обновить объект, транзакция должна наложить на этот объект Xблокировку. Если транзакция уже заблокировала объект S-блокировкой (для чтения), то перед обновлением объекта S-блокировка должна быть заменена Xблокировкой. 3. Если блокировка объекта транзакцией B отвергается оттого, что объект уже заблокирован транзакцией A, то транзакция B переходит в состояние ожидания. Транзакция B будет находиться в состоянии ожидания до тех пор, пока транзакция A не снимет блокировку объекта. 4. X-блокировки, наложенные транзакцией A, сохраняются до конца транзакции A. При использовании протокола доступа к данным с использованием блокировок часть проблем разрешилась (не все), но возникла новая проблема — тупики: проблема потери результатов обновления — возник тупик; проблема незафиксированной зависимости (чтение «грязных» неаккуратное считывание) — проблема разрешилась; неповторяемое считывание — проблема разрешилась; появление фиктивных элементов — проблема не разрешилась; проблема несовместимого анализа — возник тупик. данных, Общий вид тупика (dead locks) следующий (табл. 7.7). Таблица 7.7 Транзакция A Блокировка объекта P1 успешна --Блокировка объекта P2 конфликтует с блокировкой, наложенной транзакцией B Ожидание… Время t1 t2 t3 Транзакция B --Блокировка объекта P2 успешна --- t4 Ожидание… Ожидание… t5 Блокировка объекта P1 конфликтует с блокировкой, наложенной транзакцией A Ожидание… Ожидание… Как видно, ситуация тупика может возникать при наличии не менее двух транзакций, каждая из которых выполняет не менее двух операций. На самом деле в тупике может участвовать много транзакций, ожидающих друг друга. Методом разрешения тупиковой ситуации является откат одной из транзакций (транзакции–жертвы) так, чтобы другие транзакции продолжили свою работу. После разрешения тупика, транзакцию, выбранную в качестве жертвы можно повторить заново. Можно представить два принципиальных ситуации и выбору транзакции-жертвы: 1. СУБД не следит за возникновением решение, быть ли им жертвой. подхода тупиков. к обнаружению Транзакции сами тупиковой принимают 2. За возникновением тупиковой ситуации следит сама СУБД, она же принимает решение, какой транзакцией пожертвовать. 8 МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE 7.3. Операторы SQL для описания уровня изолированности пользователей 7.3.1. Реализация изолированности транзакций средствами SQL. Уровни изоляции Стандарт SQL не предусматривает понятие блокировок для реализации сериализуемости смеси транзакций. Вместо этого вводится понятие уровней изоляции. Этот подход обеспечивает необходимые требования к изолированности транзакций, оставляя возможность производителям различных СУБД реализовывать эти требования своими способами (в частности, с использованием блокировок или выделением версий данных). Стандарт SQL предусматривает 4 уровня изоляции (табл. 7.8): READ UNCOMMITTED — уровень незавершенного считывания; READ COMMITTED — уровень завершенного считывания; REPEATABLE READ — уровень повторяемого считывания; SERIALIZABLE — уровень способности к упорядочению. Таблица 7.8 Связь уровней изолированности с проблемами параллельного выполнения транзакций Уровень изоляции READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE Неаккуратное считывание Да Нет Нет Нет Неповторяемое считывание Да Да Нет Нет Фантомы Да Да Да Нет SET TRANSACTION {ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} | {READ ONLY | READ WRITE} Имеются также методы сериализации, не использующие блокировки. Это метод временных меток и механизм выделения версий. Механизм выделения версий удобен тем, что он позволяет одновременно и читать, и изменять одни и те же данные разными транзакциями. Это увеличивает степень параллельности и общую производительность системы. Этот метод состоит в том, что транзакциям, читающим данные, предоставляется как бы своя версия данных, имевшаяся в момент начала читающей транзакции. При этом транзакция не накладывает блокировок на читаемые данные и поэтому не блокирует другие транзакции, изменяющие данные. Журнал транзакций предназначен для выполнения операции отката при неуспешном выполнении транзакции или для восстановления данных после сбоя системы. Журнал транзакций содержит старые копии данных, измененных транзакциями. Кратко суть метода состоит в следующем: 9 МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE 1. Для каждой транзакции (или запроса) запоминается текущий системный номер (SCN — System Current Number). Чем позже начата транзакция, тем больше ее SCN. 2. При записи страниц данных на диск фиксируется SCN транзакции, производящей эту запись. Этот SCN становится текущим системным номером страницы данных. 3. Транзакции, только читающие данные, не блокируют ничего в базе данных. 4. Если транзакция A читает страницу данных, то SCN транзакции A сравнивается с SCN читаемой страницы данных. 5. Если SCN страницы данных меньше или равен SCN транзакции A, то транзакция A читает эту страницу. 6. Если SCN страницы данных больше SCN транзакции A, то это означает, что некоторая транзакция B, начавшаяся позже транзакции A, успела изменить или сейчас изменяет данные страницы. В этом случае транзакция A просматривает журнал транзакция назад в поиске первой записи об изменении нужной страницы данных с SCN меньшим, чем SCN транзакции A. Найдя такую запись, транзакция A использует старый вариант данных страницы. 7.4. Технология тиражирования данных Тиражирование данных — это асинхронный перенос изменений объектов исходной базы данных (source database) в БД, принадлежащие различным узлам распределенной системы. Функции тиражирования данных выполняет специальный модуль СУБД — сервер тиражирования данных, называемый репликатором (replicator). Его задача — поддержка идентичности данных в принимающих базах данных (target database) данным в исходной БД. Сигналом для запуска репликатора служит срабатывание правила, перехватывающего любые изменения тиражируемого объекта БД. Возможно и программное управление репликатором посредством сигнализаторов о событиях в базе данных. В качестве базиса для тиражирования выступает транзакция к БД. В то же время возможен перенос изменений группами транзакций, периодически или в некоторый момент времени, что дает возможность исследовать состояние принимающей БД на определенный момент времени. Детали тиражирования данных полностью скрыты от прикладной программы; ее функционирование никак не зависит от работы репликатора, который целиком находится в ведении администратора БД. Следовательно, для переноса программы в распределенную среду с тиражируемыми данными не требуется ее модификации. Технология распределенных БД и технология тиражирования данных — в определенном смысле антиподы. Краеугольный камень первой — синхронное завершение транзакций одновременно на нескольких узлах распределенной системы, т. е. синхронная фиксация изменений в распределенной БД. Ахиллесова пята первой технологии — жесткие требования к производительности и надежности каналов связи. Если БД распределена по нескольким территориально удаленным узлам, объединенным медленными и ненадежными каналами связи, а число одновременно работающих пользователей составляет десятки и выше, то вероятность того, что распределенная транзакция будет зафиксирована в обозримом временном интервале, становится чрезвычайно малой. В таких условиях (характерных, кстати, для большинства отечественных организаций) обработка распределенных данных практически невозможна. 10 МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ INTERNATIONAL BANKING INSTITUTE Вопросы для самопроверки 1. Можно ли в транзакцию заключить несколько запросов SELECT? 2. Почему в простой модели транзакций не выделено явным образом начало транзакции? Как СУБД определит начало транзакции? 3. Как при выполнении одиночных операторов манипулирования данными, которое выполняется в интерактивном режиме, поддерживается механизм транзакций? 4. Если при удалении данных нарушается принцип ссылочной целостности, то СУБД не позволит удалить данные. Как здесь работает механизм транзакций, какое действие выполняется? 5. Какие проблемы могут возникнуть при параллельном выполнении транзакций? 6. Что такое фантомы, когда они появляются? 7. Что такое «грязные данные» и когда возможно чтение «грязных данных»? 8. Как связаны уровни изолированности пользователей и проблемы при параллельном выполнении транзакций? 9. Вы работаете трейдером. Какой уровень изолированности вы бы выбрали и почему? 10. Вы разрабатываете программу генерации отчета для ЦБ России, какой уровень изолированности Вы бы выбрали и почему? 11. Что такое процедура тиражирования данных, какое у нее альтернативное название? 11