Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции(БД).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
339.97 Кб
Скачать

View («представление»).

Создается при помощи оператора SELECT, который позволяет задать содержимое6 представления.

CREATE VIEW Счет1

AS

SELECT * FROM Счет

WHERE тип_счета=’депозитный’

В данном случае представление «Счет1» содержит те же столбцы, что и таблица «Счет», но в него входят только те строки, для которых соблюдается условие тип_счета=’депозитный’.

Представление не хранится в памяти как таковое. Там хранится только его закодированное определение. Всякий раз, когда с ним надо работать, производится соответствующая выборка из соответствующих таблиц.

Удаление объектов из БД.

DROP TABLE Клиент

DROP VIEW Счет1

При удалении таблицы удаляются и все ее представления, которые на нее ссылаются.

Управление доступом к данным в SQL.

В SQL существуют операторы GRANT («дар») и REVOKE («отмена»). В каждом операторе надо указать пользователя, объект (таблицу или представление, по отношению к которому задаются полномочия) и сами полномочия. Например,

GRANT SELECT ON Клиент TO XX

Этот оператор дает пользователю XX возможность производить выборку из таблицы «Клиент», а REVOKE аннулирует все предоставленные ранее полномочия.

Транзакции.

Понятие транзакции.

Транзакции – несколько операторов языка SQL, которые либо все выполняются (по очереди), либо все не выполняются.

Поддержание механизма транзакций – показатель развитости СУБД. Этот механизм является основой обеспечения целостности БД. Он также является основой изолированности пользователей в многопользовательских СУБД.

Транзакция – это единица работы, выполняемая БД. Она может быть программой, частью программы или только одним оператором.

Транзакция характеризуется четырьмя основными свойствами:

  1. Атомарность – выражается в том, что транзакция должна быть выполнена целиком или не выполнена вообще.

  2. Согласованность ­– гарантия, что по мере выполнения транзакции данные переходят из одного согласованного состояния в другое.

  3. Изолированность. Означает, что конкурирующие за доступ к БД транзакции физически обрабатываются последовательно, изолированно друг от друга. Пока не закончится выполнение одной, не начнется выполнение другой. Однако, для пользователя это выглядит так, как будто они выполняются параллельно. Причем промежуточные результаты незавершенной транзакции не должны быть доступны другим транзакциям.

  4. Долговечность. Означает, что если транзакция завершена успешно, то те изменения, которые были произведены в данных, не могут быть потеряны в виде каких-либо обстоятельств.

Транзакции и целостность БД.

Возможны 2 варианта завершения транзакции. Если все операторы успешно выполнены и в процессе выполнения транзакции не было сбоев АО или ПО, транзакция фиксируется. В противном случае БД не будет изменена. Все изменения данных будут аннулированы.

Фиксация транзакций COMMIT.

Это действие, обеспечивающее запись на диск изменений БД, которые были сделаны в ходе выполнения транзакции. До тех пор, пока транзакция не зафиксирована, возможно произвести отмену всех изменений и привести БД в исходное состояние на момент начала транзакции.

В языке SQL определены такие функции, как COMMIT и ROLLBACK. COMMIT означает фиксацию транзакции, а ROLLBACK – ее откат. Язык SQL предполагает, что транзакция начинается с первого SQL-оператора, инициируемого пользователем или содержащегося в программе. Также транзакция может начинаться с любого SQL-оператора., следующего за COMMIT или ROLLBACK. Если же работа была прервана сбоем, то транзакция не фиксируется.

А) Б) В) Г)

П ояснения к рисунку.

  1. – транзакция заканчивается принудительно функцией COMMIT, т.е. происходит фиксация изменений в БД.

  2. – транзакция заканчивается принудительно функцией ROLLBACK. При этом происходит откат транзакции. Все изменения, внесенные данной транзакцией, аннулируются. БД на диске остается без изменений.

  3. – программа завершается без сбоев, что означает фиксацию транзакции. Т.е. все изменения заносятся в БД.

  4. – программа прервана из-за сбоя. Откат транзакции, БД не изменяется. Все выполненные в рамках транзакции изменения потеряны.

Существуют 2 типа ограничений целостности: немедленно проверяемые и откладываемые.

К немедленно проверяемым относятся относятся такие, которые бессмысленны и невозможно откладывать. Например, возраст <150 лет. Эти ограничения относятся к отдельным операторам языка. При их нарушении производится не откат транзакции, а лишь невыполнение данного оператора.

Откладываемые ограничения – это ограничения на саму БД. Они проверяются в конце транзакции. В случае их нарушения COMMIT автоматически заменяется на ROLLBACK.

Возможности отката и фиксации транзакции обеспечиваются благодаря журнализации - ведению журнала транзакции (см. далее).

Параллельное выполнение транзакции.

В том случае если с БД одновременно работают несколько пользователей, СУБД должна не только корректно выполнить индивидуальные транзакции и восстанавливать согласованное состояние БД, но и обеспечивать корректную параллельную работу всех пользователей над одними и теми же данными.

Исходя из теории, все транзакции должны обладать свойствами изолированности, т.е. работать так, как если бы с БД работал только один пользователь. При этом возникают следующие проблемы:

  1. Пропавшие изменения.

Предположим, на складе есть 40 мониторов. 2 оператора одновременно работают с клиентами. Первый получил заказ на 30 мониторов. Он выставляет счет на 30 мониторов и оформляет покупку. При этом обновляется запись о количестве товаров на складе и остается 10 штук. В это же время второй оператор оформляет покупку на 20 мониторов. Т.к. на момент его запроса первая покупка еще не была оформлена, то он также оформляет покупку. Таким образом, продается 50 мониторов вместо реально существующих 40. БД находится в несогласованном состоянии.

  1. Проблема промежуточных данных.

  2. Проблемы несогласованных данных.

  3. Проблема строк-призраков.

Предположим, что надо приготовить 2 отчета за организованный период – стандартный и расширенный. В то время, как формируется для печати первый отчет, оператор получает еще один заказ, укладывающийся в данный период. Во втором отчете новая покупка будет зафиксирована, а в первом нет.

===============================================================

Сериализация транзакций.

Во избежание подобных ситуаций (см. выше) следует обеспечить согласованность выполнения параллельных транзакций, их изолированность друг от друга. Сериализация транзакций – это механизм выполнения транзакций по некоторому плану. Обеспечение такого механизма есть основа СУБД по части управления транзакциями.

Этот механизм опирается на следующие правила:

  1. В процессе выполнения транзакции программа «видит» только согласованные состояния БД. Пользователь никогда не может получить доступ к незафиксированным изменениям в данных, произведенных другой программой.

  2. Если 2 транзакции А и В выполняются параллельно, то СУБД полагает, что результат будет такой же, как если бы транзакция А выполнялась бы первой, за ней выполнялась бы транзакция В, т.е. выполнение последовательное.

  3. Между транзакциями могут возникнуть следующие виды конфликтов:

W-W

Транзакция 2 пытается изменить объект, измененный незаконченной транзакцией 1

R-W

Транзакция 2 пытается изменить объект, прочитанный незаконченной транзакцией 1

W-R

Транзакция 2 пытается прочитать объект, измененный незаконченной транзакцией 1

Методы сериализации транзакций должны учитывать эти конфликты.

Методы сериализации транзакций.

У всех методов есть плюсы и минусы.

Метод синхронизированных блокировок.

Этот метод наиболее распространен для централизованных СУБД. В том числе для систем архитектуры «сервер-клиент». Суть его в том, что перед выполнением любой операции в транзакции «Т» над объектом БД «А» от имени транзакции «Т» запрашивается «захват» объекта «А» в одном из двух режимов:

  1. режим S (Shared) – совместный. Означает разделяемый захват объекта и требуется для выполнения операции «чтение объекта».

  2. режим X (eXclusive) – монопольный захват объекта. Требуется для выполнения операций занесения, удаления, модификации.

Захват объекта несколькими транзакциями по чтению совместимы, т.е. транзакции могут одновременно читать один и тот же объект.

Захват объектов одной транзакцией по чтению не совместим с захватом этого же объекта другими транзакциями по записи, и, тем более, не совместимы захваты объекта разными транзакциями по записи.

Состояние объекта\Возможность захвата

X

S

-

Да

Да

X

Нет

Нет

S

Нет

Да

Пояснение к таблице.

Вертикальный столбец – то состояние, в котором находится объект. Горизонтальный столбец – возможно ли такое состояние (захват) или нет.

Если запрашиваемая блокировка со стороны второй транзакции отвергается, то вся вторая транзакция переходит в режим ожидания. Х-блокировки не снимаются до конца выполнения транзакции (до выполнения операторов COMMIT и ROLLBACK).

Предположим, что

Транзакция Т1 Транзакция Т2

t1

печать кортежа р1

t2

изменение р1

t3

печать р1

t4

COMMIT

tt1

печать кортежа р1

tt2

изменение р2

tt3

изменение р1

tt4

печать р1

tt5

печать р2

tt6

COMMIT


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