русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Обробка транзакцій


Дата добавления: 2015-07-09; просмотров: 638; Нарушение авторских прав


 

Іноді єдина, з точки зору користувача, операція може вимагати декількох операцій над базою даних. Більше того, між цими операціями може навіть порушуватися цілісність бази даних. Наприклад, в ній можуть тимчасово міститися деякі записи постачань, для яких не має відповідних записів продуктів, що поставляються. Протиріччя зникнуть тільки після виконання всіх поновлень, тобто виконання логічної одиниці роботи - повної заміни номера продукту в базі даних.

(Транзакція - логічна одиниця роботи)

Транзакція являє собою послідовність операцій над базою даних, яка повинна бути виконана або повністю, або зовсім не виконана. Ядро бази даних гарантує, що, або операції, які виконуються в рамках транзакції, будуть цілком і повністю зафіксовані на диску, або буде відновлений стан бази даних, в якому вона перебувала до початку транзакції. Транзакція є не тільки засобом захисту від непередбачених аварійних відмов; вона також забезпечує програмі можливість безпечного виходу з ситуації, коли ця програма виявляє логічну помилку.

 

Більшість СУБД дозволяють любому числу транзакцій водночас здійснювати доступ до однієї і тієї ж бази даних і в них існують ті або інші механізми керування паралельними процесами, які запобігають небажаному впливу одних транзакцій на інші. По суті це механізм блокування, головна ідея якого достатньо проста. Якщо транзакції потрібні гарантії, що деякий об'єкт (база даних, таблиця, рядок або поле), в якому вона зацікавлена, не буде змінений яким-небуть непередбаченим способом на протязі необхідного проміжку часу, вона встановлює блокування цього об'єкту. Результат блокування полягає в тому, щоб ізолювати цей об'єкт від інших транзакцій і запобігти його зміні засобами цих транзакцій. Для першої транзакції, таким чином, є можливість виконувати передбачену в ній обробку, маючи певні знання про те, що об'єкт в запиті буде залишатися в стабільному стані до тих пір, доки дана транзакція буде цього бажати.



Існує декілька рівнів ізоляції (Dirty Read, Committed Read, Repeatable Read). Вони відрізняються правилами використання блокування програмою і діють таким чином:

* Рівень Dirty Read ("чорнове" читання або читання з робочих буферів) дозволяє транзакції читати всі поточні зміни, які проводяться іншими транзакціями, в тому числі не зафіксовані в базі даних.

* Рівень Committed Read (підтверджене читання) дозволяє транзакції читати тільки зафіксовані в базі даних зміни інших транзакцій.

* Рівень Repeatable Read (читання, що повторюється) не дозволяє транзакції після початку її виконання і до кінця читати зміни, зроблені іншими транзакціями, навіть якщо ці зміни зафіксовані в базі даних. Наступна транзакція додатку буде читати оновлені записи

 

В більшості СУБД створюється механізм обробки транзакцій, при ініціюванні якого всі зміни даних будуть розглядаються як попередні до тих пор, поки користувач (інколи система) не видасть команди:

COMMIT (фіксувати), що перетворює всі попередні поновлення в остаточні.

ROLLBACK (відкат), що анулює всі попередні поновлення.

 

 

Визначення початку транзакції (стандарт SQL)

Синтаксис оператора для початку транзакції включає параметри для встановлення рівня ізоляцїї транзакції :

SET TRANSACTION [READ WRITE | READ ONLY] [WAIT | NO WAIT]

[[ISOLATION LEVEL] {SNAPSHOT [TABLE STABILITY]

| READ COMMITTED [[NO] RECORD_VERSION]}]

[RESERVING <reserving_clause>;

 

<reserving_clause> = table [, table ...] [FOR [SHARED | PROTECTED] {READ | WRITE}] [,<reserving_clause>]

Опис параметрів:

READ WRITE - дозвіл для транзакції на виконання операцій читання та запису
READ ONLY - дозвіл для транзакції на виконання тільки операцій читання.
WAIT - визначає, що в разі доступу до запису іншою транзакцією необхідно її чекати
NO WAIT - визначає, що в разі конфлікту блокування обробка запиту припиняється та повертається повідомлення про помилку
ISOLATION LEVEL - визначає рівень ізоляції транзакції, в умовах коли до таблиць цієї ж бази звертаються інші транзакції. Можливі значення: SNAPSHOT TABLE STABILITY - зміни зроблені іншими транзакціями в таблиці недоступні для даної транзакції (блокування таблиці); READ COMMITED - показувати змінену версію рядка таблиці та дозволити неконфліктні зміни, при цьому: NO RECORD_VERSION - читається останній непідтверджений варіант запису, але якщо включено очікування (WAIT) транзакція буде чекати завершення іншої транзакції і повторить читання. RECORD_VERSION - читається остання підтверджена версія запису. Значення за замовчанням: SNAPSHOT.
RESERVING <reserving_clause> - транзакція блокує доступ конкуруючих транзакцій до вказаних таблиць

 

Завершення транзакції може проводитися або з підтвердженням змін в базі даних проведених транзакцією (підтвердження транзакції) або з відмовою від змін (відкат транзакції).

 

Підтвердження транзакції виконує оператор COMMIT.

Синтаксис оператора:

COMMIT [WORK] [TRANSACTION name] [RELEASE] [RETAIN [SNAPSHOT]];

Опис параметрів:

WORK - Ключове слово для забезпечення сумісності версій СУБД
TRANSACTION name - Ім'я транзакції що завершується. В разі відсутності підтверджується транзакція яка виконувалась за замовчуванням.
RELEASE - Ключове слово для забезпечення сумісності версій СУБД
RETAIN [SNAPSHOT] - Підтверджує зміни і зберігає поточний контекст транзакції.

 

Відкат транзакціївиконує оператор ROLLBACK

Синтаксис оператора:

ROLLBACK[WORK];

WORK - ключове слово для сумісності версій

 

 



<== предыдущая лекция | следующая лекция ==>
Підтримка тригерів | Підтримка системи захисту(стандарт SQL)


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.135 сек.