- •Лекція№ Тема: Спеціальні аспекти роботи з базами даних.
- •1. Безпека і цілісність баз даних
- •2. Контроль цілісності даних з використанням тригерів
- •Лекція№ Тема: Функції захисту бази даних
- •1.Транзакції і паралелізм
- •2.. Засоби обробки транзакцій
- •3. Методи блокування
- •Лекція№
- •Представлення
- •2. Створення, видалення і оновлення уявлень
- •Лекція№ Тема: Методи захисту інформації
- •1. Безпека баз даних і привілею
- •2. Види привілей.
- •3.Створення, видалення і оновлення привілей
- •4. Системні привілеї
- •Лекція№ Тема: Використовування системного каталога
- •1.Використовування системного каталогу
2.. Засоби обробки транзакцій
Очевидно, що БД - це постійно змінюється під впливом користувачів і їхніх команд структура. До цих пір передбачалося, що ця система правильно розроблена і функціонує без яких-небудь збоїв. Проте в реальному житті, через помилки людей, що взаємодіють з СУБД, або через нестійку роботу комп'ютерів виникають збої і помилки і в самій БД. Тому в СУБД застосовують спеціальні способи відміни дій, що викликали такі помилки - це. передусім, транзакції, об яких вже йшлося. Команда SQL, яка надає дію на зміст або структуру БД, не обов'язкове буде необоротною - користувач може встановити, що відбудеться після закінчення її дії: чи залишаться внесені зміни в БД або вони будуть повністю проігноровані.
Транзакція починається всякий раз. коли відбувається сеанс роботи з SQL. Всі команди, які вводяться, будуть частиною цієї транзакції, поки вона не завершиться введенням команди COMMIT WORK або команди ROLLBACK WORK. COMMIT робить всі зміни, вироблені транзакцією, постійними, ROLLBACK може їх відмінити. Нова транзакція починається після кожної команди COMMIT або ROLLBACK.
Синтаксис цих команд дуже простій, щоб залишити всі зміни постійними використовують
COMMIT WORK/
а для відміни зміни ROLLBACK WORK;
В більшості випадків можна встановити параметр, званий AUTOCOMMIT. який буде автоматично запам’ятовувати всі команди, що виконуються, причому дії, які привели до помилки, завжди будуть автоматично відмінені. Звичайно цей режим встановлюється за допомогою команди типу SET AUTOCOMMIT ON;
а повернення до звичайної діалогової обробки запитів - за допомогою команди
SET AUTOCOMMIT OFF;
Крім того, є можливість установки AUTOCOMMIT. яку СУБД виконає автоматично при реєстрації. Якщо сеанс користувача завершується аварійно - наприклад, відбувся збій системи або виконане перезавантаження користувача, - то поточна транзакція виконає автоматичний відкіт змін. Це - одна з причин, по якій варто управляти виконанням діалогової обробки запитів, розділивши команди на різні транзакції.
Не рекомендується організовувати роботу так, щоб одиночні транзакції містили багато команд, тим більш не зв'язаних між собою. Це може привести до того, що при відміні змін буде виконано багато дуже багато дій, у тому числі і тих, які є потрібними і помилки не викликали. Кращим варіантом є робити транзакції складаються з однієї команди або декількох тісно зв'язаних між собою команд.
Наприклад, виникла необхідність у видаленні даних про студента Полякова з таблиці STUDENTS. Очевидно, що при цьому потрібне що-небудь зробити з його оцінками за умови, що обмеження зовнішнього ключа відсутнє. Логічне розв'язання буде полягати в тому щоб встановити поле SNUM для записів з його оцінками, в NULL значення і лише після цього виконувати видалення. Це можна реалізувати таким чином:
UPDATE USP
SET SNUM = NULL WHERE SNUM = 3412;
DELETE FROM STUDENTS WHERE SNUM = 3412;
Якщо при цьому виникають які-небудь проблеми, то в користувача є можливість відмінити всі зміни командою ROLLBACK. У випадку, якщо все гаразд, і дію цієї групи команд на БД необхідно запам'ятати, це реалізується командою COMMIT.
В стандарті ANSI/ISO визначена модель транзакцій, а також вказані задачі операторів COMMIT і ROLLBACK. Згідно стандарту вважається, що транзакція автоматично починається з виконання користувачем або програмою першого оператора SQL. Далі відбувається послідовне виконання інших операторів SQL до тих пір, поки транзакція не завершиться одним з чотирьох способів:
• команда COMMIT завершує виконання поточної транзакції, причому зміни, внесені в БД, стають постійними. Нова транзакція починається безпосередньо після COMMIT:
• команда ROLLBACK відміняє виконання поточної транзакції, зроблені зміни відміняються, а нова транзакція починається безпосередньо після ROLLBACK;
• успішне завершення програми обробки даних вважається успішним закінченням транзакції, неначебто була виконана команда COMMIT. Нова транзакція не починається, т. до. програма закінчилася:
• неуспішне завершення програми вважається неуспішним закінченням транзакції, неначебто був виконана команда ROLLBACK. Нова транзакція не починається, оскільки програма закінчилася
Звернете увагу на те, що згідно стандартної моделі транзакцій, користувач або програма можуть виконати транзакцію завжди. Традиційно, при інтерактивному використовуванні SQL включено режим AUTOCOMMIT. тобто кожна команда стає окремою транзакцією.
В СУБД SQL Server використовується дещо розширена модель транзакцій, що надає користувачам додаткові можливості. При цьому використовуються команди:
• BEGIN TRANSACTION - повідомляє систему про початок транзакції. На відміну від стандартної моделі, початок транзакції задається явно за допомогою цієї команди:
• COMMIT TRANSACTION - повідомляє систему про успішне закінчення транзакції. Після виконання цієї команди всі зміни, зроблені в БД протягом транзакції, стають постійними, проте нова транзакція не починається; • SAVE TRANSACTION - створює усередині транзакції точку збереження. СУБД зберігає стан БД в поточній крапці і привласнює збереженому стану ім'я точки збереження, яке указується в операторі;
• ROLLBACK TO SAVEPOINT - відміняє зміни, зроблені в БД після точки збереження, повертаючи транзакцію до місця, де був виконаний оператор SAVE TRANSACTION.
• ROLLBACK - відміняє всі зміни, зроблені в БД після оператора BEGIN TRANSACTION.
Введені точки збереження особливо корисні в складних транзакціях, що складаються з великої кількості команд. В процесі виконання транзакції програма може періодично зберігати стан БД. створюючи іменовані точки збереження. Якщо під час виконання виникають які-небудь проблеми, програма має можливість відмінити не всю транзакцію цілком, а тільки її частина до точки збереження, відновивши своє виконання транзакції з цього місця. При цьому всі оператори, виконані до точки збереження, залишаються в силі, а виконані після крапки збереження відміняються. Проте логічною одиницею роботи все ж таки є ціла транзакція, тому, якщо під час виконання транзакції відбувається системний або апаратний збій, то відміняється ціла транзакція.
Реалізація механізму транзакцій в СУБД заснована на використовуванні журналу транзакцій. При виконанні користувачем команди на зміну БД система автоматично вносить в журнал транзакцій інформацію про те, що і яким чином було модифіковано даною командою. І лише після того, як в журналі буде зроблена запис. СУБД змінить фізичний запис на пристрої зберігання. Після цього, при виконанні команди COMMIT, в журналі наголошується кінець транзакції.
Якщо користувач виконує команду ROLLBACK. СУБД звертається до журналу і витягає з нього копії модифікованих під час транзакції даних. Використовуючи їх, система повертає БД в колишній стан і, таким чином, відміняє внесені зміни. У разі системного збою адміністратор БД відновлює дані по журналу транзакцій, відшукуючи транзакції, які не були завершені до моменту збою.
Використовування журналу транзакцій має і недоліки: в результаті його використовування тривалість операцій зміни БД збільшується, тому іноді роботу журналу припиняють, Очевидне, цю дію не можна віднести до розряду бажаних, до. у разі збою або виконання ROLLBACK відновити первинний стан БД не можна.
