COMMIT завершает текущую транзакцию, при этом гарантируется, что результаты работы транзакции сохраняются в базе данныхдолговечность состоит в том, что, если транзакция выполнена, то результаты ее работы должны сохраниться в базе данных, даже если в следующий момент произойдет сбой системыатомарность состоит в том, что транзакция выполняется только вся целиком, как неделимая операция.согласованность состоит в том, что транзакция переводит базу данных из одного согласованного состояния в другое также согласованное состояние, без обязательной поддержки согласованности данных во все промежуточные моменты времени....ROLLBACK завершает неудачную транзакцию, полностью аннулируя ее результаты.Если транзакция А заблокировала кортеж S-блокировкой,
то транзакция В может наложить свою S-блокировку;
то транзакция В не может и наложить свою Х-блокировку:
то транзакция А может наложить свою Х-блокировку;
то транзакция В не может разблокировать кортеж и наложить свою S-блокировку;
то транзакция В не может разблокировать кортеж и наложить свою X-блокировку.
Если транзакция А заблокировала кортеж X-блокировкой,
то транзакция В не может наложить свою S-блокировку;
то транзакция В не может наложить свою X-блокировку:
то транзакция А не может наложить свою S-блокировку:
то транзакция B не может разблокировать кортеж и наложить свою S-блокировку:
то транзакция В не может разблокировать кортеж и наложить свою Х-блокировку.
не соответствует
соответствует
не соответствует
соответствует
Каждой транзакции Т приписывается временная метка t, соответствующая моменту ее начала.
Транзакция В перед выполнением операции над объектом R выполняет следующие действия.
Проверяет, помечен ли и кем помечен этот объект другой транзакцией.
Если объект не помечен, то транзакция помечает его своей временной меткой и типом операции (чтение или изменение).
Если объект помечен , то транзакция B проверяет, не закончилась ли транзакция A, пометившая этот объект.
Если транзакция A завершилась, транзакция В помечает объект R своей временной меткой и выполняет операцию.
Если транзакция A еще не завершилась , то транзакция В проверяет конфликтность операций.
Если операции неконфликтны, то при объекте R остается или проставляется временная метка с меньшим значением и транзакция B выполняет свою операцию.
Если операции транзакций А и В конфликтны, то, если t(A) больше t(B) (т. е. транзакция А является более «молодой», чем В), то транзакция A откатывается и, получив новую временную метку, начинается заново.
Транзакция B продолжает работу.
Если же t(A) меньше t(B) (т. е. транзакция А является более «старой», чем В), то транзакция B откатывается и, получив новую временную метку, начинается заново.
Транзакция A продолжает работу.
В итоге система обеспечивает такую работу, при которой при возникновении конфликтов всегда откатывается более «молодая» транзакция (начавшаяся позже).
Граф ожидания транзакций - это ориентированный граф, в котором существует деа типа вершин - вершины, состеетствующие транзакциям, и вершины, соответствующие объектам .В этом графе существует дуга, ведущая из вершины-транзакции к вершине-объекту если для транзакции существует удовлетворенная блокировка объекта, и дуга из вершины-объекта к вершине-транзакции если транзакция ожидает удовлетворения захвата объекта.
Для каждой транзакции формируется и запоминается ее текущий системный номер (SCN). Чем позже начата транзакция, тем больше ee SCN.
При выполнении операции записи страниц данных на диск фиксируется SCN транзакции, производящей эту операцию. Этот SCN становится текущим системным номером страницы данных. Транзакции, только читающие данные, не блокируют объекты в базе данных.
Если транзакция А читает страницу данных, то SCN транзакции А сравнивается с SCN читаемой страницы данных.
Если SCN страницы данных меньше или равен SCN транзакции А, то транзакция А читает эту страницу.
Если SCN страницы данных больше SCN транзакции А, то это означает, что некоторая транзакция В, начавшаяся позже транзакции A, успела изменить данные страницы. В этом случае транзакция A просматривает журнал транзакций****назад в поиске первой записи об изменении нужной страницы данных с SCN меньшим, чем SCN транзакции А. Найдя такую запись, транзакция А использует старый вариант данных страницы.
При использовании метода выделения версий данных транзакция не накладывает блокировки на читаемые данные и не блокирует другие транзакции, изменяющие данные.
При использовании метода выделения версий данных откаты транзакций будут происходить реже, чем при использовании обычного метода блокировок
При использовании метода выделения версий данных эффективность распараллеливания транзакций будет выше, чем при использовании обычного метода блокировок
клиент-сервер с сервером приложений
клиент-сервер с активным сервером БД
файловый сервер БД
клиент-сервер с "толстым" клиентом
низкий трафик, повышенные требования к ресурсам сервера БД
низкий трафик, сложность обновления бизнес-логики
высокий сетевой трафик, низкий уровень безопасности данных
низкий трафик, простое обновление бизнес-логики
SELECTЕсли транзакция А заблокировала кортеж S-блокировкой,
то транзакция В может наложить свою S-блокировку;
то транзакция В не может наложить свою X-блокировку;
то транзакция А может наложить свою -локеровку:
то транзакция В не может разблокировать кортеж и наложить свою S-блокировку:
то транзакция В не может разблокировать кортеж и наложить свою X-блокировку.
Если транзакция А заблокировала кортеж Х-блокировкой,
то транзакция В не может наложить свою S-блокировку;
то транзакция В не может наложить свою X-блокировку;
то транзакция А не может наложить свою S-блокировку;
то транзакция В не может разблокировать кортеж и наложить свою S-блокировку:
то транзакция В не может разблокировать кортеж и наложить свою X-блокировку.
ROLLBACK завершает неудачную транзакцию, полностью аннулируя ее результаты.