
- •Міністерство освіти і науки україни
- •Анотація
- •Основи sql
- •Основні поняття
- •Стандарт і реалізація мови sql
- •Введення в технологію клієнт-сервер
- •Типи команд sql
- •Переваги мови sql
- •Запис sql –операторів
- •Опис учбової бази даних
- •Визначення структури даних
- •Типи даних мови sql, визначені стандартом
- •Типи даних, використовувані в sql –сервері
- •Управляючі Конструкції sql
- •Основні об'єкти структури бази даних sql -сервера
- •Створення бази даних і проектування таблиць
- •База даних
- •Індекси
- •Ефективне виконання запитів для витягання даних
- •Пропозиція select
- •Пропозиція from
- •Пропозиція where
- •Пропозиція order by
- •З'єднання і теоретико-множинні операції над відношеннями
- •Операція вибірки
- •Операція проекції
- •Декартовий добуток
- •Операція з'єднання по двох відношеннях (таблицях)
- •Операція об'єднання
- •Операція перетину
- •Операція різниці
- •Операція ділення відношень
- •Обчислення і підведення підсумків в запитах
- •Побудова обчислюваних полів
- •Використання підсумкових функцій
- •Пропозиція group by
- •Пропозиція having
- •Поняття підзапиту
- •Використання підзапитів, що повертають одиничне значення
- •Використання підзапитів, що повертають безліч значень
- •Запити модифікації даних
- •Запит додавання
- •Запит видалення
- •Запит оновлення
- •Введення в поняття "Цілісність даних"
- •Визначення обмежень цілісності
- •Таблиці з обмеженнями в стандарті мови
- •Таблиці в середовищі ms sql Server
- •Представлення
- •Визначення представлення
- •Оновлення даних в представленнях
- •Переваги і недоліки представлень
- •Функції користувача
- •Поняття функції користувача
- •Функції Scalar
- •Функції Inline
- •Функції Multi-statement
- •Вбудовані функції
- •Функції для роботи з датою і часом
- •Збережені процедури
- •Поняття збереженої процедури
- •Збережені процедури, в середовищі ms sql Server
- •Курсори
- •Поняття курсору
- •Реалізація курсорів в середовищі ms sql Server
- •Управління курсором в середовищі ms sql Server
- •Тригери
- •Визначення тригера в стандарті мови sql
- •Реалізація тригерів в середовищі ms sql Server
- •Тригери в рекурсивних структурах
- •Введення в рекурсивні структури
- •Реалізація правил цілісності даних
- •Додавання запису в рекурсивну структуру
- •Зміна запису в рекурсивній структурі
- •Видалення запису з рекурсивної структури
- •Транзакції і блокування
- •Введення в транзакції
- •Acid -властивості транзакцій
- •Блокування
- •Управління транзакціями
- •Управління транзакціями в середовищі ms sql Server
- •Блокування в середовищі ms sql Server
- •Рівні ізоляції sql Server
- •Основні методи захисту даних. Управління користувачами
- •Управління користувачами бази даних
- •Управління користувачами в середовищі ms sql Server
- •Управління доступом до даних
- •Реалізація прав на доступ до об'єктів баз даних в середовищі ms sql Server
- •Впровадження sql -операторів в прикладні програми
- •Sql і прикладні програми
- •Архітектура odbc
- •Джерела даних і odbc
- •Взаємодія з базою даних в Java -програмах
- •Звернення до бази даних з використанням технології ado
- •Висновок
- •Список літератури
Acid -властивості транзакцій
Характеристики транзакцій описуються в термінах ACID (Atomicity, Consistency, Isolation, Durability - неподільність, узгодженість, ізольованість, стійкість ).
• Транзакція неділима в тому сенсі, що є єдиним цілим. Усі її компоненти або мають місце, або немає. Не буває часткової транзакції. Якщо може бути виконана лише частина транзакції, вона відхиляється.
• Транзакція є погодженою, тому що не порушує бізнес-логіку і стосунки між елементами даних. Ця властивість дуже важлива при розробці клієнт-серверних систем, оскільки в сховище даних поступає велика кількість транзакцій від різних систем і об'єктів. Якщо хоч би одна з них порушить цілісність даних, то усі інші можуть видати невірні результати.
• Транзакція завжди ізольована, оскільки її результати самодостатні. Вони не залежать від попередніх або наступних транзакцій - ця властивість називається серіалізуємістю і означає, що транзакції в послідовності незалежні.
• Транзакція стійка. Після свого завершення вона зберігається в системі, яку ніщо не може повернути в початковий (до початку транзакції ) стан, тобто відбувається фіксація транзакції, що означає, що її дія постійно навіть при збої системи. При цьому мається на увазі деяка форма зберігання інформації в постійній пам'яті як частина транзакції .
Вказані вище за правило виконує сервер. Програміст лише вибирає потрібний рівень ізоляції, піклується про дотримання логічної цілісності даних і бізнес-правил. На нього покладаються обов'язки по створенню ефективних і логічно вірних алгоритмів обробки даних. Він вирішує, які команди повинні виконуватися як одна транзакція, а які можуть бути розбиті на декілька послідовно виконуваних транзакцій. Слід по можливості використовувати невеликі транзакції, тобто що включають якомога менше команд і змінюють мінімум даних. Дотримання цієї вимоги дозволить найбільш ефективним чином забезпечити одночасну роботу з даними безлічі користувачів.
Блокування
Підвищення ефективності роботи при використанні невеликих транзакцій пов'язане з тим, що при виконанні транзакції сервер накладає на ці блокування.
Блокуванням називається тимчасове обмеження на виконання деяких операцій обробки даних. Блокування може бути накладене як на окремий рядок таблиці, так і на усю базу даних. Управлінням блокуваннями на сервері займається менеджер блокувань, контролюючий їх застосування і вирішення конфліктів. Транзакції і блокування тісно пов'язані один з одним. Транзакції накладають блокування на дані, щоб забезпечити виконання вимог ACID. Без використання блокувань декілька транзакцій могли б змінювати одні і ті ж дані.
Блокування є методом управління паралельними процесами, при якому об'єкт БД не може бути модифікований без відома транзакції, тобто відбувається блокування доступу до об'єкту з боку інших транзакцій, чим виключається непередбачувана зміна об'єкту. Розрізняють два види блокування :
• блокування запису - транзакція блокує рядки в таблицях таким чином, що запит іншої транзакції до цих рядків буде скасований ;
• блокування читання - транзакція блокує рядки так, що запит з боку іншої транзакції на блокування запису цих рядків буде знехтуваний, а на блокування читання - прийнятий.
У СУБД використовують протокол доступу до даних, що дозволяє уникнути проблеми паралелізму. Його суть полягає в наступному:
• транзакція, результатом дії якої на рядок даних в таблиці являється її витягання, зобов'язана накласти блокування читання на цей рядок;
• транзакція, призначена для модифікації рядка даних, накладає на неї блокування запису;
• якщо прошене блокування на рядок відкидається із-за вже наявного блокування, то транзакція переводиться в режим очікування до тих пір, поки блокування не буде знято;
• блокування запису зберігається аж до кінця виконання транзакції.
Вирішення проблеми паралельної обробки БД полягає в тому, що рядки таблиць блокуються, а наступні транзакції, модифікуючі ці рядки, відкидаються і переводяться в режим очікування. У зв'язку з властивістю збереження цілісності БД транзакції є відповідними одиницями ізольованості користувачів. Дійсно, якщо кожен сеанс взаємодії з базою даних реалізується транзакцією, то користувач починає з того, що звертається до погодженого стану бази даних - стану, в якому вона могла б знаходитися, навіть якщо б користувач працював з нею самостійно.
Якщо в системі управління базами даних не реалізовані механізми блокування, то при одночасному читанні і зміні одних і тих же даних декількома користувачами можуть виникнути наступні проблеми одночасного доступу :
• проблема останньої зміни виникає, коли декілька користувачів змінюють один і той же рядок, ґрунтуючись на її початковому значенні; тоді частина даних буде втрачена, оскільки кожна наступна транзакція перезапише зміни, зроблені попередньою. Вихід з цієї ситуації полягає в послідовному внесенні змін;
• проблема "брудного" читання можлива у тому випадку, якщо користувач виконує складні операції обробки даних, що вимагають множинної зміни даних перед тим, як вони набудуть логічно вірного стану. Якщо під час зміни даних інший користувач прочитуватиме їх, то може виявитися, що він отримає логічно невірну інформацію. Для виключення подібних проблем необхідно робити зчитування даних після закінчення усіх змін;
• проблема неповторюваного читання є наслідком неодноразового зчитування транзакцією одних і тих же даних. Під час виконання першої транзакції інша може внести в ці зміни, тому при повторному читанні перша транзакція отримає вже інший набір даних, що призводить до порушення їх цілісності або логічної неузгодженості;
• проблема читання фантомів з'являється після того, як одна транзакція вибирає дані з таблиці, а інша вставляє або видаляє рядки до завершення першої. Вибрані з таблиці значення будуть некоректні.
Для вирішення перерахованих проблем в спеціально розробленому стандарті визначено чотири рівні блокування. Рівень ізоляції транзакції визначає, чи можуть інші (що конкурують) транзакції вносити зміни в дані, змінені поточною транзакцією, а також чи може поточна транзакція бачити зміни, зроблені конкуруючими транзакціями, і навпаки. Кожен наступний рівень підтримує вимоги попереднього і накладає додаткові обмеження:
• рівень 0 - заборона "забруднення" даних. Цей рівень вимагає, щоб змінювати дані могла тільки одна транзакція ; якщо іншій транзакції необхідно змінити ті ж дані, вона повинна чекати завершення першої транзакції ;
• рівень 1 - заборона "брудного" читання. Якщо транзакція почала зміну даних, то ніяка інша транзакція не зможе прочитати їх до завершення першої;
• рівень 2 - заборона неповторюваного читання. Якщо транзакція прочитує дані, то ніяка інша транзакція не зможе їх змінити. Таким чином, при повторному читанні вони знаходитимуться в первинному стані;
• рівень 3 - заборона фантомів. Якщо транзакція звертається до даних, то ніяка інша транзакція не зможе додати нові або видалити рядки, що мають, які можуть бути лічені при виконанні транзакції. Реалізація цього рівня блокування виконується шляхом використання блокувань діапазону ключів. Схоже блокування накладається не на конкретні рядки таблиці, а на рядки, що задовольняють певній логічній умові.