Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Konspekt_lektsiy_BD_amp_amp_SD

.pdf
Скачиваний:
28
Добавлен:
10.02.2016
Размер:
1.41 Mб
Скачать

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

121

 

 

Сценарії

Для того, щоб упорядкувати виклик і полегшити створення послідовності незв’язаних запитів, наприклад, команд МВД SQL для створення таблиць, збережених процедур, тригерів тощо, їх доцільно включати в так звані сценарії (script). Це файли, що мають стандартне розширення SQL, які можна створювати і редагувати в будь-якому текстовому редакторі.

Ми не будемо розглядати всі особливості сценаріїв. Відзначимо тільки два нюанси:

1.Переважна більшість сценаріїв повинна починатися командою

CONNECT ім’я/аліас БД USER

ім’я_користувача PASSWORD пароль;

і закінчуватися командами

 

COMMIT;

 

та

 

EXIT;

 

Якщо створюються зв’язані таблиці або для таблиць створюються представлення, індекси та ін., то командою COMMIT (зберігання результатів транзакції, тобто виконаних дій) повинна закінчуватися кожна команда CREATE TABLE.

До речі, якщо в параметрах СУБД чи інтерактивного додатку типу Windows Interactive SQL (див. Додаток Г) встановлено опцію AUTOCOMMIT, то додавати цю команду до сценарію не треба (навіть, заборонено).

Команда, що виконує дію, зворотну COMMIT, тобто відміняє результати транзакції — ROLLBACK („відкіт“ виконаних операцій).

2.Друга тонкість зв’язана зі створенням збережених процедур за допомогою сценаріїв (і не тільки). Справа в тому, що в усіх без винятку СУБД команди, з яких складається збережена процедура, повинні обов’язково закінчуватися символом ‘;’. Але при цьому більшість СУБД вимагає, щоб цим символом закінчувалися і всі запити в сценарії. Тому, якщо не прийняти відповідних заходів, то ці СУБД будуть намагатися виконувати команди збереженої процедури в порядку її створення. Для того щоб уникнути такої ситуації, необхідно кожну або блок команд CREATE PROCEDURE випереджати командою

SET TERM[INATOR] символ

;

де символ — наприклад, ‘^’, і закінчувати кожну команду створення збереженої процедури цим символом-замінником (подібно оператору END), а після її або в самому кінці зробити зворотне перепризначення:

SET TERM ; символ

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

122

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

Мова управління даними SQL (МУД, DCL)

Управління доступом

Поняття управління доступом має сенс, у першу чергу, у багатокористувальницькому режимі роботи СУБД.

На рівні БД управління доступом полягає в створенні і видаленні користувачів шляхом призначення їхніх імен, паролів і прав доступу до конкретних БД і є прерогативою адміністратора БД (DBA або SYSDBA). Кожен користувач є власником таблиць, пов’язаних з тією або іншою БД. Відповідно, власник таблиці може керувати доступом до даних на рівні таблиць. Таке управління полягає в призначенні привілеїв іншим користувачам, тобто визначення того, може чи ні конкретний користувач виконувати ту або іншу команду.

Привілеї SQL є об’єктними. Тобто користувач має привілей (право) виконувати конкретну команду для конкретного об’єкта БД: таблиці, представлення, стовпця тощо.

Привілеї, призначені власником таблиці, збігаються за мнемонікою та за змістом з ко-

мандами МВД SQL: SELECT, INSERT, DELETE, UPDATE та REFERENCES.

Для надання того чи іншого доступу до таблиці (таблиць) їхній власник повинен виконати команду GRANT. Її формат:

GRANT

список_операцій

ON

таблиця

TO

список_користувачів;

Наприклад:

 

 

 

 

GRANT

SELECT, INSERT

ON

Student

TO

User1, User2;

З наведеної множини привілеїв необхідно виділити UPDATE і REFERENCES, тому що вони, крім загального формату команди GRANT, дозволяють обмежити привілеї множиною стовпців. Наприклад:

GRANT UPDATE(Mark) ON Rating TO Lecturer10;

для відновлення полів. Або, наприклад:

GRANT REFERENCES (Spec) ON Speciality TO DeptHead;

Ця інструкція дозволяє користувачу DeptHead створювати зовнішні ключі, які будуть посилатися на поле Spec таблиці Speciality як на батьківський ключ. Якщо в цьому привілеї не вказані стовпці, то в якості батьківських можуть використовуватися будь-які поля цієї таблиці.

Наступний момент. Якщо в списку_операцій команди GRANT перераховані всі привілеї, тобто якому-небудь користувачеві відкритий повний доступ до таблиці, то замість такого списку в SQL можна скористатися інструкцією ALL PRIVILEGES. Наприклад:

GRANT ALL [PRIVILEGES] ON Student TO

DeptHead;

Аналогічно, якщо який-небудь привілей чи список привілеїв необхідно відкрити для кожного користувача системи, навіть тих, котрі тільки будуть створені, то замість списку_користувачів досить вказати оператор PUBLIC. Наприклад:

GRANT SELECT ON Rating TO PUBLIC;

Інструкція в даному прикладі відкриває всім користувачам доступ для читання всіх даних таблиці Rating: така дія привілею SELECT.

Однак часто виникає необхідність обмежити перегляд таблиці конкретними полями. Тому що указати стовпці можна тільки в привілеї UPDATE і REFERENCES, у цьому випадку необхідно скористатися представленнями. Наприклад, створити представлення:

CREATE VIEW StudEmail AS

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

123

 

 

 

SELECT

SecondName, FirstName, Email FROM Student;

 

і надати іншому користувачеві права на перегляд вже не таблиці Student, а представлення

StudEmail:

GRANT SELECT ON StudEmail TO PUBLIC;

На відміну від застосування привілеїв до базових таблиць, привілеї на представлення дозволяють обмежити доступ не тільки до стовпців, але і до кортежів. Наприклад:

CREATE VIEW

OSStudents

 

AS SELECT

*

FROM

Student

WHERE

Spec = ‘OІ’

WITH CHECK OPTION;

GRANT UPDATE

ON

OSStudent TO DeptHead;

Інструкція WITH CHECK OPTION не дозволяє змінювати шифр спеціальності.

Ще одна інструкція, зовні схожа на цю —– WITH GRANT OPTION — дозволяє транслювати привілеї по „ланцюжку“ користувачів. Наприклад, якщо в групі розроблювачів таблиці створюють одні користувачі, додатки – інші, а використовувати дані будуть треті, то власники таблиць можуть передати повноваження з призначення привілеїв іншим користу-

вачам:

GRANT

UPDATE, SELECT

ON OSStudents

TO DeptHead

WITH GRANT OPTION;

 

 

Тоді користувач DeptHead може виконати запит:

 

GRANT

SELECT ON

User1.OSStudents

TO ViceDeptHead;

де User1 — власник таблиці Student і представлення OSStudents.

Скасування привілеїв здійснюється командою REVOKE, що має формат абсолютно ідентичний команді GRANT.

В PostgreSQL існує можливість управляти базами даних, доступом до них і розв’язувати безліч задач над ними, використовуючи командну консоль PostgreSQL. Для виклику командної консолі призначена команда psql, яка підтримує низку опцій.

Наприклад, для отримання інформації про поточні привілеї, які надані ролям при організації доступу до таблиць, використовується опція \dp Ім’я_таблиці або \z Ім’я_таблиці.

Виклик командної консолі для розв’язання цієї задачі для таблиці Lecturer виглядає таким чином:

psql /z Lecturer

Опція \du [Шаблон] надає список всіх ролей бази даних або тільки ролей, які відповідають шаблону.

Привілеї доступу описуються списком доступу, елементи якого описуються наступною структурою:

Ім’я_ролі = Список_прав_доступу / Ім’я_власника_таблиці

Список прав доступу може містити наступні символи:

a, r, w, d, x, t — права доступу, відповідно, на внесення нового запису, читання записів,

зміну записів, видалення записів, контроль посилань, виконання тригерів.

Особливості управління доступом у СУБД PostgreSQL

Ролі та управління ролями

У версіях СУБД PostgreSQL до 8.1 при управлінні користувачами і групами користувачів використовувалися відповідні команди створення CREATE USER, CREATE GROUP та

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

124

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

зміни параметрів користувача або групи ALTER USER і ALTER GROUP, відповідно. У версіях СУБД PostgreSQL починаючи з 8.1 з’явився більш гнучкий механізм управління — ролі.

Для створення ролі використовується команда CREATE ROLE. CREATE ROLE Ім’я_ролі [[WITH] Опція [Опція, ... ]]

Опціями є:

 

SUPERUSER | NOSUPERUSER

роль із правами адміністратора / без прав (за

 

замовчуванням — NOSUPERUSER)

CREATEDB | NOCREATEDB

роль може створювати свої БД / не може (за

 

замовчуванням — NOCREATEDB)

CREATEROLE | NOCREATEROLE

роль може створювати інші ролі / не може

INHERIT | NOINHERIT

роль автоматично буде / не буде успадковува-

 

ти привілеї наслідуваних ними ролей (за замо-

 

вчуванням — NOINHERIT)

LOGIN | NOLOGIN

роль може встановлювати з’єднання / не може

 

(для групи) (за замовчуванням — LOGIN)

CONNECTION LIMIT connlimit

кількість одночасних підключень ролі до

[ENCRYPTED | UNENCRYPTED]

СУБД (за замовчуванням — немає обмежень)

 

PASSWORD Пароль

пароль для авторизованого встановлення

 

з’єднання ролі із СУБД, може зберігатися в

 

зашифрованому виді або відкрито (за замов-

VALID UNTIL дата

чуванням — ENCRYPTED)

крайній термін дії ролі (за замовчуванням —

 

без строку дії)

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

CREATE ROLE Director LOGIN;

Наприклад, для створення ролі Director, яка буде користувачем СУБД до 31-10-2007, необхідно виконати команду:

CREATE ROLE Director LOGIN WITH PASSWORD ‘dbms’ VALID UNTIL ‘2007-10-31’;

Наприклад, для створення ролі Programmers, яка надалі буде відповідати групі користувачів, необхідно виконати команду

CREATE ROLE Programmers NOLOGIN;

Для зміни параметрів ролі використовується команда ALTER ROLE: ALTER ROLE ім’я_ролі [[WITH] Опція [Опція, … ]]

Опції цієї команди збігаються з опціями команди CREATE ROLE. Наприклад, для зміни пароля користувача необхідно виконати команду:

ALTER ROLE postgres WITH PASSWORD ‘dbms2000’;

Для управління спадкуванням ролей також, як у стандартному SQL для управління привілеями, використовуються команди GRANT і REVOKE.

Команда GRANT дозволяє одній ролі успадковувати привілеї іншої ролі та має синтак-

сис:

GRANT Ім’я_ролі_яка_надає_привілеї TO Ім’я_ролі_яка_одержує_привілеї;

Наприклад, для надання ролі Director привілеїв ролі Programmers необхідно виконати команду:

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

125

 

 

GRANT Programmers TO Director;

Команда REVOKE, яка дозволяє з однієї ролі зняти привілеї іншої ролі, має такий синтаксис:

REVOKE Ім’я_ролі_яка_надає_привілеї FROM Ім’я_ролі_яка_одержує_привілеї;

Наприклад, для зняття з ролі Director привілеїв ролі Programmers необхідно виконати команду:

REVOKE Programmers FROM Director;

Якщо роль створена без спадкування ролей за замовчуванням (опція INHERIT), при роботі із цією роллю необхідно примусово встановлювати ролі-спадкоємці за допомогою команди SET ROLE. Наприклад:

SET ROLE Ім’я_успадкованої_ролі;

для встановлення ролі властивості автоматичного спадкування Скидання ролей може виконуватися двома способами:

SET ROLE NONE;

або

RESET ROLE;

При роботі з ролями можна використовувати дві системні змінні SESSION_USER ім’я користувача , який відкрив сесію; CURRENT_USER ім’я користувача, який працює під заданою роллю.

Для отримання значень цих змінних необхідно виконати інструкцію: SELECT SESSION_USER, CURRENT_USER;

Після створення ролі, яка може встановлювати з’єднання з СУБД, це з’єднання можна встановити.

Наприклад, для встановлення з’єднання із СУБД користувачеві Director: psql postgres -U Director

Управління схемами даних

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

Для створення схеми даних використовується операція

CREATE SCHEMA Ім’я_Схеми;

Приклад створення схеми Director: CREATE SCHEMA Director;

Для надання користувачу прав доступу до схеми використовується команда: GRANT USAGE ON SCHEMA назва_схеми TO назва_користувача;

Приклад надання користувачу прав доступу до схеми

GRANT USAGE ON SCHEMA Director TO Director;

Для призначення користувача власником схеми використовується команда: ALTER SCHEMA Ім’я_схеми OWNER TO Ім’я_користувача;

Приклад включення користувача Director у схему Director:

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

126

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

ALTER SCHEMA Director OWNER TO Director;

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

SELECT * FROM Director.Lecturer;

Після встановлення з`єднання з БД СУБД автоматично виконує пошук всіх таблиць з запитів в схемі public.

Для встановлення порядку доступу до схем, тобто порядку пошуку таблиць в схемах, використовується команда:

SET SEARCH_PATH TO Ім'я_схеми;

Наприклад:

SET SEARCH_PATH TO PUBLIC;

Коли для користувача визначено декілька схем, назви схем до імен таблиць в запитах додаються у вказаному порядку. Якщо таблиця не існує в схемі з назвою ім’я_схеми1, СУБД буде використовувати наступну назву схеми — ім’я_схеми2, доки таблиця не буде знайдена в схемі.

Приклад встановлення порядку пошуку: SET SEARCH_PATH TO Director, PUBLIC;

Для того, щоб користувач після встановлення з`єднання з СУБД автоматично визначав порядок пошуку в схемах, використовується команда:

ALTER ROLE Ім’я_користувача SET SEARCH_PATH = Ім’я_схеми1 [, Ім’я_схеми2,…];

Наприклад, для того, щоб користувачу director автоматично встановлювався порядок доступу до схем Director, PUBLIC можна виконати команду:

ALTER ROLE Director SET SEARCH_PATH TO Director, PUBLIC;

Схеми доцільно використовувати з метою:

1)логічного розподілу таблиць між групами в одній фізичній БД;

2)обмеження доступу до таблиць з боку різних користувачів на основі представлень. Наведемо приклад другої мети використання схем.

Нехай в БД існує таблиця:

CREATE TABLE Persons

(Person_Id

INTEGER PRIMARY KEY,

Name

VARCHAR(30),

Sex

CHAR(1),

Birthday

DATE);

до якої внесемо тестову інформацію:

INSERT INTO Persons VALUES(1,'Иванов','М','01/01/2000');

INSERT INTO Persons VALUES(2,'Петров','М','01/01/1990');

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

SELECT * FROM Persons;

заборонити отримувати інформацію про людей, яким на поточний момент ще не виповнилося 18 років.

Для цього створимо представлення:

CREATE OR REPLACE VIEW Director.Persons AS

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

127

 

 

SELECT * FROM Persons

WHERE EXTRACT(Year FROM (Age(Birthday))) >= 18;

Знімемо з користувача Director привілеї доступу до таблиці Persons зі схеми PUBLIC REVOKE SELECT ON Persons FROM Director;

Встановимо привілеї доступу до представлення Persons зі схеми Director

GRANT SELECT ON Director.Persons TO Director;

Тепер користувач, виконуючи запит

SELECT * FROM Persons;

отримає лише записи про людей, яким на поточний момент вже виповнилося 18 років.

Управління представленнями

В СУБД PostgreSQL представлення не є такими, що оновлюються автоматично. Наприклад, виконаємо над представленням Director.Persons операцію:

UPDATE Director.Persons SET Name = 'Сидоров' WHERE Person_Id = 2;

В результаті операції буде отримано помилку:

ERROR: cannot update a view

HINT: You need an unconditional ON UPDATE DO INSTEAD rule.

Помилка вказує на необхідність створення правила типу

… ON UPDATE DO INSTEAD …

Але існує механізм правил, який дозволяє визначати операції INSERT, UPDATE, DELETE над представленням.

Синтаксис операції створення правила:

CREATE RULE назва_правила AS ON подія TO назва_таблиці [WHERE умова] DO [ALSO | INSTEAD]

NOTHING | SQL_операція | (SQL_операція1; SQL_операція2 ...);

Типи події: INSERT, UPDATE, DELETE.

Синтаксис опис умови правила еквівалентний синтаксису виразу WHERE стандартного

SQL.

Якщо тип події правила є INSERT, тоді INSERT-операція, яку обробляє правило, виконується перед виконанням SQL-операцій з правила. Це дозволяє самому правилу бачити результат виконання операції. Але для подій типу UPDATE або DELETE операція виконується вже після виконання SQL-операцій з правил.

Параметр ALSO вказує правилу, яке обробляє операцію, на необхідність виконувати додатково до неї ще SQL-операції, які можуть бути описані в правилі.

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

SQL-операція може включати стандартні операції: INSERT INTO … VALUES;

UPDATE …; DELETE FROM …;

INSERT INTO … SELECT …

Додатково, як і в тригері, в якості значень можуть бути використані структури з кон-

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

128

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

текстними змінними: NEW.атрибут, OLD.атрибут — значення атрибуту після виконання операції, або перед виконанням операції, відповідно. Як і в тригері, змінну NEW. можна використовувати при роботі операцій INSERT і UPDATE, а змінну OLD. — при роботі опера-

цій UPDATE і DELETE.

Наприклад, для того, що виключити помилку запиту на початку параграфу при виконанні операції UPDATE над представленням можна створити наступне правило:

CREATE RULE Persons_Update_Director AS ON UPDATE TO Director.Persons DO INSTEAD UPDATE Persons SET

Person_Id = NEW.Person_Id, Name = NEW.Name,

Sex = NEW.Sex, Birthday = NEW.Birthday

WHERE Person_Id = OLD.Person_Id;

Знімемо з користувача Director привілеї доступу до таблиці Persons зі схеми PUBLIC REVOKE UPDATE ON Persons FROM Director;

Встановимо привілеї доступу до представлення Persons зі схеми Director

GRANT UPDATE ON Director.Persons TO Director;

Тепер користувач Director може успішно виконати запит: UPDATE Director.Persons SET Name = 'Сидоров' where Person_Id = 2;

В описі правила у WHERE-фразі вказується умова визначення запису реальної таблиці, який пов’язано із записом представлення. Тому користувач Director не зможе успішно виконати запит:

UPDATE Director.Persons SET Name = 'Сидоров' WHERE Person_Id = 1;

Це пов’язано з тим, що запис з Person_Id = 1 не є видимим в представленні.

Для того, щоб користувач міг виконувати над представленням операції INSERT та UPDATE представленням можна створити правила:

DROP RULE Persons_Insert_Director ON Director.Persons;

CREATE RULE Persons_Insert_Director AS ON INSERT TO Director.Persons DO INSTEAD INSERT INTO Persons

SELECT NEW.Person_Id,NEW.Name, NEW.Sex, NEW.Birthday; REVOKE INSERT ON Persons FROM Director;

GRANT INSERT ON Director.Persons TO Director;

CREATE RULE Persons_Delete_Director AS ON DELETE TO Director.Persons

DO INSTEAD DELETE FROM Persons WHERE Person_Id = OLD.Person_Id; REVOKE DELETE ON Persons FROM Director;

GRANT DELETE ON Director.Persons TO Director;

Якщо необхідно, щоб для користувача Director ігнорувалася INSERT-операція над представленням Director.Persons можна створити наступне правило:

CREATE OR REPLACE RULE Table_Insert_Director_Persons AS ON INSERT TO Director.Persons

WHERE CURRENT_USER != ‘Director’ DO INSTEAD NOTHING;

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

129

 

 

Блокування

Останнє, що ми відзначимо — це забезпечення цілісності даних у багатокористувальницьких (паралельних) системах.

Ми не будемо зупинятися на проблемах, що виникають у таких системах — більшість

зних очевидні і пов’язані з конфліктами при обробці декількох паралельних транзакцій.

УSQL вирішення таких конфліктів засноване на одному з методів управління паралелізмом — методі блокування. Його ідея дуже проста: у випадку, коли для виконання деякої транзакції необхідно, щоб який-небудь об’єкт (наприклад, кортеж) не змінювався непередбачено і без відома цієї транзакції, то такий об’єкт блокується, точніше блокується доступ до нього з боку інших транзакцій.

УSQL (у мові управління даними) існує два типи блокувань: монопольне (виняткове) блокування і поділюване, котрі іноді називають блокуваннями запису та читання відповідно (X-блокування і S-блокування). Різниця між цими типами визначається такими правилами:

1.Якщо транзакція A блокує кортеж p X-блокуванням, то запит іншої транзакції В з блокуванням цього кортежу буде скасований. (X-блокування тримається до кінця транзакції).

2.Якщо транзакція A блокує кортеж p S-блокуванням, то

а) запит транзакції B на X-блокування цього ж кортежу буде відхилений;

б) запит транзакції B на S-блокування кортежу буде прийнятий.

При цьому вводиться така властивість транзакції як рівень ізоляції, що визначає

ступінь втручання інших паралельних транзакцій у її роботу. У різних системах може бути від двох до п’яти рівнів ізоляції SQL/92 — 4), але всі СУБД обов’язково підтримують найвищий рівень – рівень повторного читання. Цей рівень гарантує, що всередині цієї тра-

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

то деякі СУБД поділяють цей рівень на 2: неприпустимість змін і невидимість змін. Розглянемо команду встановлення блокування на прикладі СУБД InterBase.

SET TRANSACTION

[READ WRITE | READ ONLY] [WAIT | NO WAIT] [[ISOLATION LEVEL]

{SNAPSHOT [TABLE STABILITY]| READ COMMITTED

[[NO] RECORD_VERSION]}];

Параметр

 

Опис

READ WRITE

 

Визначає, що транзакція може читати і записувати в таблиці (за

 

 

замовчуванням).

READ ONLY

 

Визначає, що транзакція може тільки читати таблиці.

WAIT

 

Визначає, що транзакція чекає доступу (надходить у чергу), якщо

 

 

вона викликає конфлікт блокування з іншою транзакцією (за за-

 

 

мовчуванням).

NO WAIT

 

Визначає, що транзакція негайно повертає помилку, якщо вона

 

 

зіштовхується з конфліктом блокування (без очікування).

ISOLATION LEVEL

Визначає рівень ізоляції для цієї транзакції при спробі інших па-

 

 

ралельних транзакцій звернутися до тих же самих таблиць.

SNAPSHOT

 

(за замовчуванням) забезпечує повторюване читання (repeatable-

 

 

read) бази даних у момент старту транзакції. Зміни, зроблені ін-

 

 

шими паралельними транзакціями, невидимі.

SNAPSHOT

TABLE

забезпечує повторюване читання бази даних, гарантуючи, що

STABILITY

 

транзакції не можуть записувати в таблиці, але можуть читати з

 

 

них.

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

READ COMMITTED
NO RECORD_VERSION
RECORD_VERSION

130

М. Г. Глава. Технологія проектування і адміністрування баз даних та сховищ даних

 

 

дає можливість транзакції за замовчуванням бачити самі останні завершені (committed) зміни, зроблені іншими рівнобіжними транзакціями. Вони можуть також модифікувати рядки доти, поки не відбудеться конфлікт модифікації. Незавершені (uncommitted) зміни, зроблені іншими транзакціями, залишаються невидимими до виконання команди COMMIT.

За замовчуванням, читає тільки останню версію рядка. Якщо визначена опція WAIT блокування, то транзакція чекає, доки остання версія рядка не буде завершена (committed) або скасована (rolled back), і повторює читання.

Читає останню завершену версію рядка, навіть якщо більш нова незавершена версія також розміщена на диску.

Протокол доступу до даних має такий вигляд:

Перш ніж прочитати об’єкт, транзакція повинна накласти на цей об’єкт S-блокування. Перш ніж обновити об’єкт, транзакція повинна накласти на цей об’єкт X-блокування.

Якщо транзакція уже заблокувала об’єкт S-блокуванням (для читання), то перед відновленням об’єкта S-блокування повинно бути замінено X-блокуванням.

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

X-блокування, накладені транзакцією A, зберігаються до кінця транзакції A.

Кафедра економічної кібернетики та інформаційних технологій. Одеський національний політехнічний університет

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]