Установка уровней изоляции

При помощи аннотации SET TRANSACTION ISOLATION LEVEL можно установить последующие уровни изоляции транзакции.

READ UNCOMMITTED – разрешает инструкциям читать строчки, освеженные хоть какой транзакцией и еще не зафиксированные в базе данных Этот уровень изоляции минимизирует возможность конфликтов, но допускает «грязные» считывания (dirty reads) и неподражаемые считывания.

READ COMMITTED – разрешает инструкциям в текущих Установка уровней изоляции соединениях и транзакциях создавать неподражаемые считывания, но воспрещает «грязные» считывания (данные, освеженные транзакцией, открытой в другом соединении). Это уровень изоляции, принятый по дефлоту в SQL Server.

REPEATABLE READ – не разрешает транзакциям считывать незафиксированные модифицированные данные («грязные» считывания) и гарантирует сохранение совмещаемых блокировок до окончания текущей транзакции.

SNAPSHOT – просит Установка уровней изоляции, чтоб параметр базы данных ALLOW_SNAPSHOT_ISOLATION был равен значению ON. Этот уровень изоляции сформировывает мгновенный снимок данных в момент их считывания в транзакцию, но не поддерживает блокировку данных. Могут выполнятся обновления из другой транзакции, но текущая транзакция не лицезреет этих конфигураций, отраженных в следующих считываниях начальных данных. Если текущая Установка уровней изоляции транзакция видоизменит данные, эти модификации видны исключительно в текущей транзакции.

SERIALIZABLE – не разрешает считывать данные, которые были обновлены, но не зафиксированы другими транзакциями. Не считая того, никакая другая транзакция не может до окончания текущей транзакции обновлять данные, которые были считаны текущей транзакцией. Уровень изоляции SERIALIZABLE защищает от фантомных Установка уровней изоляции считываний, но делает наивысший уровень конкуренции и блокирования [1].

Синтаксическая запись команды определения уровня изоляции транзакции:

SET TRANSACTION ISOLATION LEVEL

SNAPSHOT

После того как в сеансе выполнена аннотация SET TRANSACTION ISOLATION LEVEL, все транзакции в границах этого соединения употребляют данный уровень изоляции [1].

Функции IDENT_CURRENT, SCOPE_IDENTITY, @@IDENTITY

Для того, что бы выяснить последний Установка уровней изоляции добавленный идентификатор (IDENTITY), употребляются функции IDENT_CURRENT, SCOPE_IDENTITY и @@IDENTITY.

Функция IDENT_CURRENT фактически подобна функциям удостоверений SQL Server SCOPE_IDENTITY и @@IDENTITY. Все три функции возвращают сделанные последними значения идентификаторов. Но эти функции различаются областью деяния и сеансом.

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

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

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

Функция IDENT_CURRENT возвращает значение NULL Установка уровней изоляции, если вызвана для пустой таблицы либо для таблицы без столбца идентификаторов.

Аннотации и транзакции, приведшие к ошибке, могут изменять текущее удостоверение для таблицы и вызывать возникновение пропусков в значениях столбца идентификаторов. Откат удостоверения не делается никогда, невзирая на то, что транзакция, пытавшаяся воткнуть в таблицу значение, не Установка уровней изоляции была зафиксирована. К примеру, если аннотация INSERT привела к ошибке из-за нарушения ограничения IGNORE_DUP_KEY, текущее удостоверение для таблицы все равно возрастает.

Будьте внимательны при использовании функции IDENT_CURRENT для прогнозирования последующего создаваемого значения идентификатора. В реальности создаваемое значение может отличаться от приобретенного при помощи функции IDENT_CURRENT плюс IDENTITY Установка уровней изоляции_SEED, так как в других сеансах могут производиться операции вставки [3].

Содержание работы

1. Добавьте в таблицу продукт (Product) поле количество (Quantity). Заполните поле случайными значениями от 0 до 100.

2. Сделайте хранимую функцию AddBill, которая будет сформировывать чек, а потом возвращать его идентификатор. Входные характеристики процедуры: BuyerID и EmployeeID. Все аннотации данной Установка уровней изоляции хранимой процедуры должны производиться в транзакции.

3. Сделайте хранимую функцию прибавления продукта в чек. Назовите ее AddBillItem. Входные характеристики процедуры: BillID, ProductID, Quantity. Установить уровень изоляции транзакции в режим SERIALIZABLE. После открытия транзакции (BEGIN TRANSACTION) нужно проверить количество продукта в магазине. В случае если продукта в магазине недостаточно, то процедура должна Установка уровней изоляции окончить выполнение транзакции (ROLLBACK TRANSACTION). В неприятном случае хранимая процедура уменьшает доступное количество продукта в магазине и добавляет запись о покупке в чек (добавляются записи в таблицу BillItem). Закрываем транзакцию (COMMIT TRANSACTION). Растолкуйте выбор уровня изоляции транзакции.

4. Сделайте подборку содержимого чека с внедрением запроса №1 из лабораторной работы Установка уровней изоляции №2.

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

6. Подготовьте материал для включения в отчетную презентацию по курсу Базы данных: особый курс.


ustavshaya-kozha-prichini-i-lechenie.html
ustevskaya-srednyaya-obsheobrazovatelnaya-shkola-stranica-23.html
ustinov-vv-reshenie-kvorum-est.html