Транзакції ПІДТРИМКА МОВИ SQL

У цьому розділі засоби підтримки роботи з транзакціями в мові SQL (зокрема, процедури відновлення на основі транзакцій) розглядаються відповідно до загальних принципів, описаними в попередніх розділах Насамперед, в системі гарантується, що виконання більшості операторів SQL відбувається нерозривно (єдиними винятками є CALL і RETURN) Крім того, як було описано в розділі 4, в мові SQL передбачені безпосередні аналоги операторів BEGIN TRANSACTION, COMMIT і ROLLBACK, які називаються в ньому, відповідно, START TRANSACTION, COMMIT WORK і ROLLBACK WORK Нижче показаний синтаксис оператора START TRANSACTION

START TRANSACTION &ltoption commalist&gt

Тут параметр &ltoption commalist&gt, як показано нижче, визначає режим доступу, рівень ізоляції або те й інше (опис четвертого варіанту, який стосується визначення розміру діагностичної області, виходить за рамки цієї книги)

■ Режим доступу може позначатися ключовим словом READ ONLY або READ WRITE Якщо жодна з них не вказано, то за замовчуванням застосовується ключове слово READ WRITE (за умови, що не визначений рівень ізоляції READ UNCOMMITTED, так як в цьому випадку за замовчуванням застосовується READ ONLY) Якщо задано ключове слово READ WRITE, то рівень ізоляції не повинен прини мати значення READ UNCOMMITTED

■ Визначення рівня ізоляції приймає форму ISOLATION LEVEL &ltisolation&gt, де параметр &ltisolation&gt може мати значення READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ або SERIALIZABLE Додаткова інформа ція з цієї теми подано у розділі 16

Синтаксис операторів COMMIT і ROLLBACK наведено нижче

COMMIT [ WORK ] [ AND [ NO ] CHAIN ]

; ROLLBACK [ WORK ] [ AND [ NO ] CHAIN ]

Ключове слово WORK є необовязковим Застосування ключового слова AND CHAIN ​​забезпечує автоматичне виконання оператора START TRANSACTION після виклику оператора COMMIT (С таким же параметром &ltoption commalist&gt, як і у попереднього оператора START TRANSACTION) ключове слово AND NO CHAIN ​​задано за замовчуванням Оператор CLOSE виконується автоматично для кожного відкритого курсору (що призводить до втрати позиціонування всіх курсорів в базі даних), за винятком курсорів, оголошених з ключовим словом WITH HOLD (це відноситься тільки до оператору COMMIT)

Примітка Хоча про це не було сказано в розділі 4, ключове слово WITH HOLD є однією з опцій в оголошенні курсору Курсор, оголошений як WITH HOLD, не закривається автоматично після виконання оператора COMMIT, а залишається відкритим і має таке позиціонування, що наступний оператор FETCH переведе його на наступну по порядку рядок Завдяки цьому виключається необхідність розробляти складний код повторного позиціонування курсора, який би в іншому випадку потрібен в наступному операторі OPEN

Крім того, в мові SQL підтримуються точки збереження Наведений нижче оператор створює точку збереження з імям, зазначеним користувачем (яке відоме тільки в межах даної транзакції)

SAVEPOINT  &ltsavepoint  name&gt   

Наступний оператор скасовує всі оновлення, внесені в базу даних з часу створення зазначеної точки збереження

ROLLBACK TO oavepoint name&gt   

Нижче наведений оператор, який видаляє вказану точку збереження, а це означає, що з цього часу не можна буде виконати оператор ROLLBACK для повернення до даної точки збереження

RELEASE  &ltsavepoint  name&gt   

Всі точки збереження знищуються автоматично після завершення транзакції

154 РЕЗЮМЕ

У цій главі коротко представлена ​​необхідна інформація про управління транзакціямиТранзакція – целогічна одиниця роботи,а такожодиниця відновлення (Крім того, одиниця паралельності подробиці наводяться в главі 16) Транзакції володіють такимивластивостями ACID,якнерозривність, правильність(Яке в літературі частіше називаєтьсясумісністю), ізольованістьістійкість Управління транзакціямипередбачає вирішення завдання організації їх виконання таким чином, щоб дотримання всіх цих найважливіших властивостей абсолютно гарантувалося (за винятком правильності) Простіше кажучи, загальна мета функціонування всієї системи може бути визначена як надійне виконання транзакцій

Транзакції починаються з операціїBEGIN  TRANSACTION  і закінчуються після виконання операції COMMIT (У разі успішного завершення) або ROLLBACK (У випадку

невдалого завершення) Оператор COMMIT встановлює точку фіксації (При цьому поновлення записуються в базу даних) Виконання оператора ROLLBACK повертає базу даних в попередню точку фіксації (всі внесені поновлення скасовуються)

Якщо транзакція не досягає запланованого завершення, система автоматично виконує для неї операцію ROLLBACK (Відновлення транзакції) Для отримання можливості скасування (відкату) і повторного застосування (накату) оновлень в системі

ведеться журнал відновлення Важливо відзначити, що всі записи реєстрації ходу виконання деякої транзакції повинні бути фізично занесені в журнал до виконання для цієї транзакції операції COMMIT (Правило випереджаючої записи в журнал)

Якщо відбувається аварійний останов системи, то після перезапуску система повинна, по-перше, повторно внести всі зміни, виконані у транзакціях, успішно завершених до цього зупину, і по-друге, скасувати всі оновлення, зроблені у транзакціях, які почали виконуватися, але не були завершені до зупину Необхідно гарантувати збереження властивостей ACID транзакцій навіть у разі збою системи Ці операції по відновленню системи здійснюються у складі процедури перезапуску системи (Яка інакше називається процедурою перезапуску / відновлення) Аналізуючи останню наявну в журналі запис контрольної точки, система визначає, яку роботу необхідно виконати повторно, а яку скасувати Записи контрольної точки заносяться до журналу через встановлений час

Система також забезпечує відновлення носіїв, що реалізується шляхом відновлення бази даних з заздалегідь створеної резервної копії (з дампа) з подальшим використанням журналу для повторного виконання всієї роботи, закінченою в базі даних після створення зазначеної резервної копії Для підтримки функції відновлення носіїв використовуються утиліти створення / відновлення резервної копії

Системи, які дозволяють транзакціях взаємодіяти з двома (або кількома)

різними диспетчерами ресурсів (Наприклад, з двома різними СУБД або з СУБД і диспетчером передачі даних), повинні використовувати протокол, званий протоколом

двухфазной фіксації (Або якусь версію цього протоколу), для того, щоб ці системи підтримували властивість нерозривності транзакцій Дві фази цього протоколу включають, по-перше, фазу підготовки, в якій координатор дає вказівку всім учасникам

“Підготуватися до виконання чи фіксації, або відкату, і по-друге, фазу фіксації, в якій координатор (після того як всі учасники дали очікуваний від них відповідь під час попередньої фази) інструктує учасників, що можна виконати остаточну фіксацію даної транзакції (або її відкат у разі одержання хоча б одного негативної відповіді)

На завершення цієї глави коротко описані точки збереження і наведено огляд засобів відновлення, передбачених у мові SQL Зокрема, в ній представлений оператор START TRANSACTION мови SQL, який дає можливість користувачеві вказати режим доступу і рівень ізоляції транзакції

І ще одне, останнє зауваження В принципі, в цьому розділі йдеться про середовище прикладного програмування Проте, всі описані концепції застосовні і до користувача середовищі (хоча на цьому рівні вони можуть бути більшою мірою прихованими) Наприклад, програмні продукти SQL зазвичай дозволяють користувачеві вводити оператори SQL інтерактивно, з терміналу Зазвичай кожен такий оператор SQL, введений в інтерактивному режимі, обробляється як окрема транзакція – за умовчанням система буде автоматично виконувати операцію COMMIT від імені користувача відразу після успішного виконання заданого оператора SQL (або ж оператор

ROLLBACK, якщо виконання закінчується невдачею) Але в деяких системах користувачі можуть забороняти такі автоматичні оператори COMMIT І замість цього виконувати цілий ряд операторів SQL (за якими слід явно заданий оператор COMMIT або ROLLBACK) як єдину транзакцію Але така практика зазвичай не рекомендується, так як в подібному випадку частина бази даних може бути заблокована і на тривалий час стати недоступною для інших користувачів (глава 16) Більш того, в такий операційному середовищі для кінцевих користувачів можливе виникнення ситуації взаємного блокування, що є ще одним доказом на користь відмови від подібного режиму роботи (докладні відомості наведені в главі 16)

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*