- •Министерство образования и науки российской федерации
- •Лабораторная работа 1. Создание и заполнение таблиц базы данных. Часть 1.
- •Базы данных и субд
- •Таблицы
- •Типы данных sql
- •Ссылочная целостность
- •Выполнение лабораторной работы
- •Изменение данных
- •Удаление данных
- •Изменение определения таблицы
- •Выполнение лабораторной работы
- •Разработка запросов
- •Выполнение лабораторной работы
- •Директивы, используемые в условиях запросов
- •Выполнение лабораторной работы
- •Объединение, пересечение, разность запросов
- •Выполнение лабораторной работы
- •Экзистенциальные запросы
- •Выполнение лабораторной работы
- •Хранимые процедуры
- •Выполнение лабораторной работы
- •Содержание отчета
- •Варианты заданий
- •Лабораторная работа 8 — Разработка триггеров
- •Виды триггеров
- •Создание триггеров в диалекте Transact sql
- •Выполнение лабораторной работы
- •Рекомендации по выбору индексов
- •Операторы языка sql для создания и удаления индексов
- •Генерация тестовых данных
- •Анализ использования индексов
- •Выполнение лабораторной работы
- •Проблемы многопользовательского доступа к данным, их решение с помощью блокировок
- •Уровни изоляции транзакций
- •Конфигурирование блокировок, отчеты о блокировках
- •Выполнение лабораторной работы
- •Основные объекты и виды репликации
- •Организация репликации транзакций
- •Выполнение репликации транзакций
- •Выполнение лабораторной работы
- •Схемы хранилищ данных
- •Проектирование хранилища
- •Реализация хранилища
- •Выполнение лабораторной работы
- •Содержание отчета
- •Варианты заданий
- •Библиографический список
- •Содержание
Выполнение лабораторной работы
Произвести генерацию и вставку тестовых данных в БД, выполнить запросы из ЛР № 4..6, зафиксировать планы и время их выполнения, создать систему индексов для ускорения выполнения запросов, повторно выполнить запросы из ЛР № 4..6, зафиксировать планы и время их выполнения.
Содержание отчета
Содержание отчета:
— операторы для создания индексов;
— планы и время выполнения запросов до и после индексации, пояснение произошедших изменений.
Варианты заданий
Варианты заданий приведены в ПРИЛОЖЕНИИ.
Лабораторная работа 10 — Транзакции и блокировки
Транзакции
Транзакция — совокупность действий в БД, которая должна быть или полностью успешно выполнена или полностью отклонена. Типовым примером транзакции является перевод средств в банковской системе:
(i) сумма списывается со счета A;
(ii) средства зачисляются на счет B.
Если между (i) и (ii) происходит программно-аппаратный сбой, БД оказывается в несогласованном состоянии. Механизм транзакций гарантирует, что либо оба действия будут успешно выполнены, и БД окажется в согласованном состоянии, либо не будет выполнено ни одно из них, и БД окажется в согласованном состоянии, в котором она находилась до начала транзакции. Говоря о транзакциях, обычно отмечают ряд их свойств сокращенно обозначаемых как ACID (http://msdn.microsoft.com/ru-ru/library/ms190612%28SQL.105%29.aspx).
По умолчанию SQL-сервера рассматривают каждый оператор insert, update, delete, select и др. как отдельную транзакцию. Для оформления в виде транзакции группы операторов используются директивы:
(i) begin { tran | transaction } [ <имя транзакции> ] — начинает новую транзакцию (http://msdn.microsoft.com/ru-ru/library/ms188929(SQL.105).aspx);
(ii) save { tran | transaction } <имя точки сохранения> — сохраняет текущее состояние транзакции (http://msdn.microsoft.com/ru-ru/library/ms188378(SQL.105).aspx);
(iii) commit { tran | transaction } [ <имя транзакции > ] — фиксирует в БД изменения, произведенные транзакцией, транзакция завершается успешно (http://msdn.microsoft.com/ru-ru/library/ms190295(SQL.105).aspx);
(iv) rollback { tran | transaction } [ { <имя транзакции > | <имя точки сохранения> } ] — отменяет изменения, произведенные транзакцией, либо до первого begin transaction (транзакция завершается с откатом), либо до указанной точки сохранения (http://msdn.microsoft.com/ru-ru/library/ms181299(SQL.105).aspx).
Пусть в БД существует таблица Счет:
create table Счет(
Номерint primary key,
ФИОvarchar(50) not null,
Суммаmoney not null)
go
оформим с помощью транзакций перевод денег с одного счета на другой:
begin tran
update СчетsetСумма=Сумма+ 100 whereНомер= 33
if (select СуммаfromСчетwhereНомер= 44) >= 100
begin
update СчетsetСумма=Сумма- 100 whereНомер= 44
commit tran
end
else
rollback tran
go
Таким образом, если на счете с номером 44 недостаточно средств, транзакция будет отклонена.
Транзакции могут использоваться в теле ХП и Т, рекомендации по оформлению транзакций приведены в (http://msdn.microsoft.com/ru-ru/library/ms187844(v=sql.105).aspx) и (http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc32300.1550/html/sqlug/X16153.htm).
Транзакция может находиться в одном из четырех возможных состояний, текущее состояние хранится в глобальной системной переменной @@transtate (http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300.1550/html/sqlug/X27470.htm),в MS SQL не поддерживается.
Транзакции могут быть вложенными, текущий уровень вложенности содержится в глобальной системной переменной @@trancount (http://msdn.microsoft.com/ru-ru/library/ms189336(v=sql.105).aspx).
SQL-сервера могут поддерживать два режима начала транзакций — неявные транзакции (транзакция начинается автоматически при выполнении очередного оператора DML) и явные (транзакция начинается после begin transaction), переключение режимов осуществляет директива set implicit_transactions { on | off } (http://msdn.microsoft.com/ru-ru/library/ms190230%28v=sql.105%29.aspx)1.
Так как транзакции устанавливают и удерживают блокировки, при их разработке следует придерживаться ряда рекомендаций (http://msdn.microsoft.com/ru-ru/library/ms187484%28v=sql.105%29.aspx).