Данная курсовая работа призвана рассмотреть ключевые особенности работы транспортной компании, а также выявить процессы грузоперевозок, которые возможно автоматизировать с помощью СУБД.
Транспортные компании ежедневно получают большое количество заказов на грузоперевозки, которые нужно быстро обрабатывать, имеют больший парк автотранспорта, за которым нужно следить и поддерживать в работоспособном состоянии. Чтобы не упустить ни одного заказа, компании предложено автоматизировать процессы с помощью СУБД на базе Microsoft SQL Server 2012, имеющий большой спектр возможностей. Предполагается, что это упростит обработку заказов, ускорит их прием и позволит собирать статистику, что благоприятно скажется на прибыли компании.
В данной курсовой работе будет разработан проект автоматизации процесса грузоперевозок, развернута распределенная база данных компании, выполнена репликация, созданы десятки запросов. Все это позволит достичь цели, поставленной выше.
В настоящей курсовой работе использованы ссылки на следующие руководящие документы:
ГОСТ 34.ххх «Информационная технология. Комплекс стандартов и руководящих документов на автоматизированные системы»
ГОСТ 19.ххх «Единая система программной документации»
IEEE 830-1994 «Рекомендуемая практика формирования спецификаций программного обеспечения»
IEEE 829 — Планирование тестирования программных средств
ГОСТ 28806 «Качество программных средств. Термины и определения»
ГОСТ 28195 «Оценка качества программных средств. Общие положения»
ГОСТ 9126 «Информационная технология. Оценка программного продукта Характеристики качества и руководящие указания по их применению»
ГОСТ Р ИСО/МЭК 92991-93. Руководство по управлению документированием программного обеспечения. — М.: Изд-во стандартов,1994
2.1 Общее описание предметной области
В транспортную компанию поступают заказы на грузоперевозки. Клиент указывает тип груза, вес, пункт отправления и пункт назначения. Компания подбирает необходимые автомобили, назначает дату перевозки, выставляет цену. В назначенное время перевозчик забирает груз, перевозит и отгружает.
2.2 Описание входных документов и сообщений
На вход подаются тип груза, вес, пункт отправления и пункт назначения.
2.3 Описание выходных документов и сообщений
На выходе получаем подобранный автомобиль, дату перевозки, цену
Программные средства автоматизации конструирования, моделирования ...
... на проектирование, включающее в себя разработку конструкции, расчеты, согласование со смежными областями и т.д.). Многие современные программные системы, ориентированные на проектирование промышленных ... др.) предоставляет следующие возможности: графическое моделирование, т.е. использование компьютера в САПР в качестве мощного вычислительного средства, позволяющего без особых навыков программирования ...
2.4 Список ограничений
Автомобили делятся по типу перевозимых грузов. Имея свободные автомобили в наличии, но не подходящие по типу груза, грузоперевозка не может быть осущетвлена.
Для реализации поставленной задачи выбран Microsoft SQL Server 2012 в виду его широких возможностей, доступности и богатой документации. Для программирования приложения работы с БД выбрана среда Microsoft Visual Studio 2012 и язык C#, обладающий простотой реализации оконных приложений, привычных обычным пользователям Microsoft Windows.
4.1 Построение концептуальной модели базы данных
Концептуальная модель РБД выглядит следующим образом:
Рисунок 1 — Концептуальная модель
4.2 Реализация реляционной базы данных
4.2.1 Описание таблиц
Таблица Orders содержит сведения о заказах на грузоперевозки: внутренний номер, поставщик, потребитель, дату заявки, тип груза, массу, пункт назначения, расстояние до пункта назначения.
Таблица Criterias содержит типы грузов в виде иерархии: номер типа, родитель, уровень и название.
Таблица transport содержит данные об автотранспорте: внутренний номер, госномер, марку автомобиля, модель, вместимость, тип перевозки, минимальное и максимальное расстояние ходки, время загрузки и нахождение в ремонте.
Таблица TransportCriterias устанавливает соответствие между автотранспортом и типами грузов.
Таблица Timetable отражает занятость автотранспорта в перевозках и дату совершения перевозки.
4.2.2 Описание представлений
Представление «Запрос Критерии+Заказы» отражает данные о заказах в приемлемом для пользователя виде — в шапке таблицы заголовки на русском языке, номера типов грузов заменены на текстовые значения.
Представление «Фильтр Компьютеры» является фильтром предыдущего представления, отображающий только заказы компьютеров, отсортированных по имени поставщика в прямом порядке и по имени потребителя — в обратном.
4.2.3 Диаграмма базы данных
Рисунок 2 — Диаграмма БД
5.1 Выбор типа репликации РБД
Пока наша фирма по перевозкам не разрослась достаточно широко, для нашей базы подойдет репликация моментальными снимками. Но, учитывая темпы роста, взглянем в будущее, где одной активной базой уже не ограничиться. Репликация моментальными снимками не будет удовлетворять требованию одновременной работы в несколькими базами, поэтому сразу настроим репликацию слиянием. В будущем это позволит не только защитить данные от потерь, но и работать с несколькими базами одновременно, не боясь рассогласования данных.
5.2 Настройка репликации
Для настройки репликации слиянием выполним следующие несколько шагов:
- Убедимся, что Агент SQL Server включен. В диспетчере конфигурации SQL Server (рисунок 3) в пункте «Службы SQL Server» проверим, что Агент SQL Server находится в состоянии «Работает», или включим его если это не так.
Введение системы управления базами данных
... базе данных с использованием стандартного языка SQL» – «визуальная объектно-ориентированная среда разработки» «распределенная СУБД структуры «сервер - клиент» (например, Microsoft Access - FoxPro - SQL Server). ... распределенной системы функционируют группы автоматизированных рабочих мест (АРМ), абсолютно ... распределенным транзакциям считается репликация (дублирование) данных. В таких системах ...
2. В MS SQL Server Management Studio в пункте меню «Репликация» нажать ПКМ на «Локальные публикации» и выбрать «Создать публикацию».
Рисунок 4 — Создание публикации
- Выбрать базу данных для репликации, выбрать тип «Публикация слиянием», выбрать необходимые данные для публикации, фильтрацию можно пропустить за ненадобностью, настроить Агент моментальных снимков (рисунок 5), указать учетную запись и пароль к ней (учетная запись с которой Вы входите на сервер, в нашем случае ASH-PC\Ash), нажать клавишу «Готово >>|», ввести имя публикации и снова нажать клавишу «Готово».
- В пункте «Локальные публикации» нажать ПКМ на только что созданную публикацию и выбрать «Создать подписку» (рисунок 6).
- Первые две настройки можно оставить по умолчанию, в окне «Подписчики» указать сервер-подписчик и новую базу данных.
В появившемся окне указать имя новой базы. Настроить параметры безопасности Агента SQL Server так же, как пункте 3 (рисунок 7).
Нажать «Готово >>|» и снова «Готово». Репликация настроена! После синхронизации все выбранные данные будут перенесены в новую базу данных.
Рисунок 5 — Мастер создания публикаций
Рисунок 6 — Создание подписки
Рисунок 7 — Мастер создания подписки
5.3 Распределенные запросы к данным
Чтобы поддерживать данные в обеих базах в актуальном состоянии, не прибегая к репликации, можно обратиться к распределенным запросам. А чтобы эти запросы в случае каких-либо сбоев не вызвали рассогласования, обратимся к распределенным транзакциям. Подробнее о распределенных транзакциях написано в
6.1 Запуск распределенных транзакций
Распределенную транзакцию в Transact-SQL можно запустить следующими способами:
- Явно начать распределенную транзакцию, используя инструкцию BEGIN DISTRIBUTED TRANSACTION.
Например, для изменения данных в таблице Orders в распределенной базе данных expert_db и ее удаленной копии re_ex, выполним
expert_dbdistributed transaction;Orders set Supplier = ‘Izmenen’ Where ID = ‘1017’;[ASH-PC].re_ex.dbo.Orders set Supplier = ‘Izmenen’ Where ID = ‘1017’; transaction;
— Обратите внимание, что путь к таблице, находящейся вне локальной копии базы данных, указывается полностью: имя сервера, имя удаленной базы данных, имя таблицы. На рисунке 8 показан эффект использования распределенной транзакции. Триггеры в базах, выполняющие выборку по всей таблице, показывают, что запрос выполнился в 2х базах данных.
Проектирование и реализация хранилища данных для анализа бизнес ...
... требуется организовать работу с информацией наилучшим образом. Поэтому возникла необходимость в создании специализированных систем хранения данных и дополнительных средств анализа поступающей информации. Система хранения данных состоит из ... Полученный результат бизнес-процесса говорит о сформированном клиентом заказе. На рисунке 1.3 представлен бизнес-процесс расчет с клиентом. Данный бизнес-процесс ...
distributed
Рисунок 8 — Работа распределенной транзакции
6.2 Завершение транзакции
Чтобы транзакция считалась завершенной, после выполнения всех действий ее нужно применить инструкцией COMMIT TRANSACTION, либо откатить инструкцией ROLLBACK TRANSACTION. В первом случае все изменения сохранятся в базе, во втором — отменены.
В попробуем откатить и применить транзакцию:
- expert_dbtransactionOrders set Customer = ‘x’ Where ID = ‘1016’;[ASH-PC].re_ex.dbo.Orders set Customer = ‘x’ Where ID = ‘1016’;transactiontransactionOrders set Customer = ‘z’ Where ID = ‘1017’;[ASH-PC].re_ex.dbo.Orders set Customer = ‘z’ Where ID = ‘1017’;
- transaction
В результате выполнения примера изменится только строка с ID 1017, так как изменения в строке 1016 мы откатили.
6.3 Блокировки
При выполнении транзакции, данные, которые она обрабатывает блокируются. Это происходит для того, чтобы во время выполнения одной транзакции, другая не изменила или не прочитала данные, которые изменены не до конца, что может в свою очередь привести к повреждению набора данных, либо к считыванию ложных данных. Пока первая транзакция не будет завершена, вторая будет ожидать момента снятия блокировки.
Выполним 2 запроса на выполнение транзакций. Для удобства создадим два окна запроса с среде SQL Management Studio. Поместим код транзакций каждый в свое окно.
- Транзакция 1
expert_db
BEGIN TRANSACTIONOrders SET Mass = ‘1000’ WHERE ID = ‘1008’
- Транзакция 2
expert_dbTRANSACTIONOrders SET Distance = ‘100’ WHERE ID = ‘1008’ TRANSACTION
Поочередно выполним запросы. Транзакция 2 будет ожидать выполнения до тех пор, пока транзакция 1 не будет завершена либо откачена. Допишем строку COMMIT TRASACTION в первый запрос, выполним его, и второй запрос сразу же выполнится.
6.4 Взаимоблокировки
Взаимоблокировкой называют особую ситуацию, которая возникает только тогда, когда транзакции с множеством задач соревнуются за ресурсы друг друга. Например, первая транзакция установила блокировку ресурса А, и ей необходимо заблокировать ресурс Б, а в это же время вторая транзакция, заблокировавшая ресурс Б, нуждается в блокировке ресурса А.
Каждая из этих транзакций ожидает, пока другая снимет свою блокировку, и ни одна из них не может завершиться, пока этого не произойдет. Если не произойдет внешнего воздействия или одна из транзакций завершится по определенной причине (например, по времени ожидания), то эта ситуация может продолжаться бесконечно.
Раньше взаимоблокировки представляли собой серьезную проблему, но теперь SQL Server позволяет успешно разрешить ее.
6.4.1 Создание взаимоблокировки
Проще всего создать ситуацию взаимоблокировки в SQL Server с помощью двух подключений в редакторе запросов утилиты Management Studio. Первая и вторая транзакции пытаются обновить одни и те же строки, однако в противоположном порядке.
Распределение технологии обработки и хранения данных
... распределенных технологий обработки и хранения данных. Система распределенных технологий обработки и хранения данных, являясь совокупностью независимых компьютеров, представляется пользователю единым компьютером. Создание систем распределенных технологий обработки данных имеют следующие преимущества перед централизованными технологиями: ... оперативной обработки транзакций, однако ... virtual server») (рис. ...
Поместим код в первое окно запроса и выполним его:
- Транзакция 1 — Шаг 1
expert_dbTRANSACTIONOrders SET Mass = ‘1000’ WHERE ID = ‘1008’
Создадим в редакторе запросов второе окно и поместим в него следующий код:
- Транзакция 2 — Шаг 2
expert_dbTRANSACTIONTransport SET MaxDistance = ‘1000’ WHERE ID = ‘1’Orders SET Distance = ‘100’ WHERE ID = ‘1008’ TRANSACTION
Вторая транзакция ожидает снятие блокировки на строку 1018 в таблице Orders.
Вернемся в первое окно, добавим следующий код и запустим запрос.
- Транзакция 1 — Шаг 3
Transport SET InRepair = ‘1’ WHERE ID = ‘1’ TRANSACTION
Транзакция 2 еще не завершена, так как ожидает снятия блокировки, поэтому все еще блокирует строку 1 в таблице Transport. Транзакция 1 обращается к этой строке, продолжая блокировать данные. Таким образом 2 транзакции заблокировали выполнение друг друга. Через короткий промежуток времени SQL Server обнаружит взаимоблокировку и автоматически устранит ее (рисунок 9).
Рисунок 9 — Создание взаимоблокировки
7.1 Создание функции разделения
Для удобства обращения к большим объемам данных, разделим таблицу Orders на 3 большие части: заказы до 2006 года, с 2006 по 2011 годы и после 2011 года. Для этого обратимся к функции разделения. Под функцией разделения понимается механизм определения границ разделов. Следующий код разбивает таблицу по столбцу даты на 3 части, используя левую границу, это означает, что диапазон дат входит в раздел до границы, не включая саму границу:
expert_dbPARTITION FUNCTION fnyears(Date)RANGE LEFT FOR VALUES
(’31/12/2005′ , ’31/12/2010′);
2 Создание схемы разделения
Чтобы использовать созданную функцию разделения, применим в таблице схему разделения. Схема разделения позволяет разместить данные в одной или нескольких файловых группах. Так как по умолчанию в базе существует одна файловая группа, добавим еще 3 для таблицы Orders. Следующий код добавляет 3 файловые группы с одним файлом данных в каждой:
- expert_db;DATABASE expert_dbFILEGROUP test1fg;DATABASE expert_dbFILEGROUP test2fg;DATABASE expert_dbFILEGROUP test3fg;DATABASE expert_dbFILE
(= test1dat1,= ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATAt1dat1.ndf’,= 5MB,= 100MB,= 5MB
FILEGROUP test1fg;DATABASE expert_dbFILE
(= test2dat2,= ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\t2dat2.ndf’,= 5MB,= 100MB,= 5MB
FILEGROUP test2fg;DATABASE expert_dbFILE
(= test3dat3,= ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\t3dat3.ndf’,= 5MB,= 100MB,= 5MB
TO FILEGROUP test3fg;
GO
Теперь можно создать схему разделения. Следующий код создает схему разделения, помещая данные в файловые группы:
- PARTITION SCHEME psYears AS PARTITION fnyears TO (test1fg, test2fg, test3fg);
7.3 Создание разделенных индексов
Для быстрого обращения к данным, создадим кластеризованный индекс в таблице Orders. При создании первичного ключа на ранних этапах проектирования поле ID уже содержало кластеризованный индекс, поэтом сделаем его некластеризованным, так как кластеризованный индекс может быть только один. Для этого в проекте таблице нажать ПКМ на первичном ключе, выбрать «Индексы и ключи», в поле «Создать как кластеризованный» выбрать значение «нет» (рисунок 10).
Создание базы данных аэропорта
... целостности (правильности) и безопасности данных, а также санкционирования доступа. Целью этой работы является создать базу данных в СУБД ACCESS. Которая должна будет автоматизировать работу служащих аэропорта. 1. Предметная область 1.1 ...
Рисунок 10 — Изменение индекса
Теперь можно создать кластеризованный индекс. Следующий код выполняет это действие:
- clustered INDEX Order_ID ON Orders (ID, Date) ON psYearsAll(Date);
Рисунок 11 — План выполнения запроса.
8.2 Монитор производительности
Оценить потребление ресурсов во время выполнения запроса можно не только с помощью плана выполнения, но и с использованием системного монитора производительности. Найти его можно в Панели управления, в папке Администрирование. Системный монитор позволяет в реальном времени просматривать нагрузку на сервер, отслеживая десятки параметров, например, такой важный, как загрузка центрального процессора. На рисунке 12 показан график нагрузки на центральный процессор во время выполнения одного из запросов.
Рисунок 12 — Системный монитор
Как можно пронаблюдать, запрос выборки 100000 строк в индуктированной таблице увеличивает загрузку процессор на 20-25%.
8.3 Трассировка запросов
Трассировка запросов — это еще один инструмент оптимизации запросов. Трассировка в реальном времени показывает все происходящие на SQL Server процессы, показывая сколько ресурсов и времени было затрачено на выполнение запроса. Чтобы запустить трассировку запросов, необходимо открыть SQL Server Profiler, в меню «Файл» выбрать «Создать трассировку…», подключиться к SQL Server, выбрать необходимые события и запустить. Запустим трассировку и посмотрим, что происходит на сервере в момент выполнения запроса (рисунок 13).
Рисунок 13 — Трассировка запросов
ТЕМА 4. Управление распределенными транзакциями
Цели и задачи
Изучить основные принципы управления распределенными транзакциями.
Выполнить задание по варианту.
Ответить на контрольные вопросы по данной теме.
Оформить отчет.
Общие сведения
Транзакции являются ключевым элементом поддержания целостности данных. Если логическая единица работы содержит изменение данных вне локального сервера, то стандартная транзакция не сможет обеспечить атомарность операции. Если в середине транзакции случится ошибка, то должен существовать механизм, способный отменить выполненную часть работы. В противном случае будет записана частичная транзакция, и база данных останется в противоречивом состоянии.
Автоматизированная система учета
... необходимой продукции (указывается количество, наименование, номенклатура, сроки поставки). Также создаваемая автоматизированная система по имеющимся данным о поставщиках и вновь полученным данным должна ... соответствующего программного обеспечения, что значительно увеличивает трудоемкость процесса контроля и учета проведения поставок. Разрабатываемый программный продукт и призван решать данные ...
2.1 Координатор распределенных транзакций
MS SQL Server использует координатор распределенных транзакций (далее DTC) для обслуживания транзакций, затрагивающих несколько серверов, — их подтверждения и отката. Служба DTC использует двухфазную схему подтверждения многосерверных транзакций. Это подразумевает, что доступны оба сервера, при этом служба DTC выполняет
- Каждый из серверов отправляет сообщение о готовности к подтверждению.
- Каждый из серверов выполняет первый этап подтверждения, гарантируя тем самым способность к полному подтверждению транзакции.
- Каждый из серверов сообщает об окончании подготовки к подтверждению.
- Только после того как все серверы ответили положительно о готовности к подтверждению, сообщение о реальном подтверждении транзакции отправляется всем им.
Если логическая единица работы содержит только операции чтения с серверов, то использование службы DTC не требуется. Только когда выполняется удаленное обновление данных, транзакция рассматривается как распределенная.
Координатор распределенных транзакций является отдельной службой SQL Server, которая запускается и останавливается с помощью SQL Server Service Manager.
Только один экземпляр этой службы запускается на одном сервере, независимо от количества установленных и запущенных на нем экземпляров SQL Server. Фактическое имя службы — msdtc. ехе, потребляемый объем памяти — 2,5 Мбайт.
Служба DTC должна быть запущена, когда инициируется распределенная транзакция, в противном случае последняя завершится ошибкой.
2.2 Выполнение распределенных транзакций
Распределенные транзакции, запускаемые в Transact-SQL, имеют относительно простую структуру. Приложение или сценарий Transact-SQL выполняет инструкцию Transact-SQL, которая инициирует распределенную транзакцию. Экземпляр SQL Server Database Engine, выполняющий инструкцию, становится управляющим сервером в транзакции. Сценарий или приложение затем выполняет либо распределенные запросы к связанным серверам, либо удаленные хранимые процедуры на удаленных серверах.
После того как распределенные запросы и вызовы удаленных процедур выполнены, управляющий сервер автоматически вызывает координатор распределенных транзакций (Майкрософт) (MS DTC), чтобы прикрепить в распределенную транзакцию связанные и удаленные серверы.
Когда сценарий или приложение выполняет инструкцию COMMIT или ROLLBACK, управляющий экземпляр SQL Server вызывает MS DTC, который управляет процессом двухфазной фиксации или уведомляет связанные и удаленные серверы, чтобы они выполнили откат своих транзакций. Инструкции Transact-SQL, контролирующие распределенные транзакции, немногочисленны, поскольку большая часть работы производится внутри экземпляра SQL Server Database Engine и MS DTC.
2.2.1 Запуск распределенных транзакций
Распределенную транзакцию в Transact-SQL можно запустить следующими способами:
- Явно начать распределенную транзакцию, используя инструкцию BEGIN DISTRIBUTED TRANSACTION.
Например, для изменения данных в таблице Orders в распределенной базе данных expert_db и ее удаленной копии re_ex, выполним
expert_dbdistributed transaction;Orders set Supplier = ‘Izmenen’ Where ID = ‘1017’;[ASH-PC].re_ex.dbo.Orders set Supplier = ‘Izmenen’ Where ID = ‘1017’; transaction;
Выпускной квалификационной работы – «Корпоративная
... Разработка архитектуры корпоративной информационной системы Разработка структуры баз данных Разработка интерфейса Составление технической документации Составление руководства пользователя ТЕХНИЧЕСКОЕ ЗАДАНИЕ Разработка требований для создания корпоративной информационной системы для транспортной компании. ... в рамках выпускной квалификационной работы. 1.7 Шифр темы или шифр договора Шифр ...
— Обратите внимание, что путь к таблице, находящейся вне локальной копии базы данных, указывается полностью: имя сервера, имя удаленной базы данных, имя таблицы. На рисунке 14 показан эффект использования распределенной транзакции. Триггеры в базах, выполняющие выборку по всей таблице, показывают, что запрос выполнился в 2х базах данных.
distributed
Рисунок 14 — Работа распределенной транзакции
2.2.2 Завершение транзакции
Чтобы транзакция считалась завершенной, после выполнения всех действий ее нужно применить инструкцией COMMIT TRANSACTION, либо откатить инструкцией ROLLBACK TRANSACTION. В первом случае все изменения сохранятся в базе, во втором — отменены.
В следующем примере показано как откатить и применить транзакцию:
- expert_dbtransactionOrders set Customer = ‘x’ Where ID = ‘1016’;[ASH-PC].re_ex.dbo.Orders set Customer = ‘x’ Where ID = ‘1016’;transactiontransactionOrders set Customer = ‘z’ Where ID = ‘1017’;[ASH-PC].re_ex.dbo.Orders set Customer = ‘z’ Where ID = ‘1017’;
- transaction
В результате выполнения примера изменится только строка с ID 1017, так как изменения в строке 1016 мы откатили.
2.3 Использование распределенных транзакций
Многие администраторы баз данных рано или поздно встают перед выбором: использовать репликации для поддержания актуальности данных в распределенной базе данных, либо использовать распределенные транзакции. В каждом из методов есть свои плюсы и минусы. Репликации — сложный процесс, связанный с созданием моментальных снимков, своевременной синхронизацией и поддержанием этой системы в работоспособном состоянии, однако при выполнении распределенной транзакции увеличивается нагрузка на все узлы распределенной базы, так как в этот момент запрос выполняется не на одном сервере, а сразу на всех. Какой из способов использовать решает администратор.
2.4 Блокировки
При выполнении транзакции, данные, которые она обрабатывает блокируются. Это происходит для того, чтобы во время выполнения одной транзакции, другая не изменила или не прочитала данные, которые изменены не до конца, что может в свою очередь привести к повреждению набора данных, либо к считыванию ложных данных. Пока первая транзакция не будет завершена, вторая будет ожидать момента снятия блокировки.
Пример. Выполним 2 запроса на выполнение транзакций. Для удобства создадим два окна запроса с среде SQL Management Studio. Поместите код транзакций каждый в свое окно.
- Транзакция 1
USE expert_db
BEGIN TRANSACTIONOrders SET Mass = ‘1000’ WHERE ID = ‘1008’
- Транзакция 2expert_dbTRANSACTIONOrders SET Distance = ‘100’ WHERE ID = ‘1008’ TRANSACTION
Поочередно выполните запросы. Транзакция 2 будет ожидать выполнения до тех пор, пока транзакция 1 не будет завершена либо откачена. Допишем строку COMMIT TRASACTION в первый запрос, выполним его, и второй запрос сразу же выполнится.
Автоматизация банковской деятельности
... работы банка БС должна функционировать в режиме реального времени OLTP (On-line Transaction Processing). Перечислим основные функции БС (обычно они реализуются в виде независимых модулей единой системы): Автоматизация ... банкоматов и кредитных карточек. Системы межбанковских расчетов. Системы автоматизации работы банка на рынке ценных бумаг. Информационные системы. Возможность мгновенного получения ...
5 Взаимоблокировки
Взаимоблокировкой называют особую ситуацию, которая возникает только тогда, когда транзакции с множеством задач соревнуются за ресурсы друг друга. Например, первая транзакция установила блокировку ресурса А, и ей необходимо заблокировать ресурс Б, а в это же время вторая транзакция, заблокировавшая ресурс Б, нуждается в блокировке ресурса А.
Каждая из этих транзакций ожидает, пока другая снимет свою блокировку, и ни одна из них не может завершиться, пока этого не произойдет. Если не произойдет внешнего воздействия или одна из транзакций завершится по определенной причине (например, по времени ожидания), то эта ситуация может продолжаться бесконечно.
Раньше взаимоблокировки представляли собой серьезную проблему, но теперь SQL Server позволяет успешно разрешить ее.
5.1 Создание взаимоблокировки
Проще всего создать ситуацию взаимоблокировки в SQL Server с помощью двух подключений в редакторе запросов утилиты Management Studio. Первая и вторая транзакции пытаются обновить одни и те же строки, однако в противоположном порядке.
Пример. Поместите код в первое окно запроса и выполните его:
- Транзакция 1 — Шаг 1
expert_dbTRANSACTIONOrders SET Mass = ‘1000’ WHERE ID = ‘1008’
Создайте в редакторе запросов второе окно и поместите в него следующий код:
- Транзакция 2 — Шаг 2expert_dbTRANSACTIONTransport SET MaxDistance = ‘1000’ WHERE ID = ‘1’Orders SET Distance = ‘100’ WHERE ID = ‘1008’ TRANSACTION
Вторая транзакция ожидает снятие блокировки на строку 1018 в таблице Orders.
Вернитесь в первое окно, добавьте следующий код и запустите запрос.
- Транзакция 1 — Шаг 3
Transport SET InRepair = ‘1’ WHERE ID = ‘1’ TRANSACTION
Рисунок 15 — Создание взаимоблокировки
3 Задания
Для своего варианта РБД (см. задание темы 3) выполнить следующее:
1. Изучить работу службы DTC.
2. Создать план выполнения нескольких распределенных транзакций.
- Выполнить запуск транзакций всеми возможными способами, описанными в работе.
- Выполнить подтверждение и откат транзакций.
- Создать блокировки разных типов. Исключить блокировки.
- Сделать выводы по работе.
Контрольные вопросы
1. Определение распределенной транзакции и ее назначение.
2. Какие существуют способы выполнения транзакций?
- Какова структура журнала транзакций?
- Каковы отличия распределенных транзакций Transact-SQL от MS DTC?
- В чем заключается особенность использования распределенных транзакций вместо локальных?
- Какие типы блокировок транзакций существуют?
- Как удалить взаимоблокировки?
В данной курсовой работе, проанализировав и исследовав предметную область, был изучен характер работы бизнеса грузоперевозок, а также разработан и реализован проект автоматизации процесса грузоперевозок, развернута распределенная база данных компании, выполнена репликация, созданы десятки распределенных запросов. Все это позволило упростить обработку заказов, ускорить их прием и позволило собирать статистику, что благоприятно сказалось на прибыли компании.
- Малыхина М. П. Базы данных. Основы, проектирование, использование. — БХВ-Петербург, 2006. — 528 с.
- Нильсен Пол.
Microsoft SQL Server 2005. Библия пользователя. Пер. с англ. — М.: «И.Д. Вильямс», 2008. — 1232 с.
- Мартин Фаулер, Кендалл Скотт — UML. Основы — 2002.
- Павловская Т.А.
C#. Программирование на языке высокого уровня: учебник для вузов. — СПб.: Питер, 2007. — 432 с.
5. Шилдт Г. Полный справочник по C#. Пер. с англ. — М.: Вильямс, 2004.
- Орлов С.А. Технологии разработки программного обеспечения. — СПб.: Питер, 2003. — 480с.
- Леоненков А.
Самоучитель UML. — BHV Санкт-Петербург, 2001. — 304с.
- Иванова Г.С. Технология программирования: Учебник для вузов. — М.: Изд-во МГТУ им. Н.Э. Баумана, 2002.
- Ляхевич А.Г.
Лекции по сетевым технологиям, 2002г. — 165 с
Листинг использованных запросов
Выборки из таблицы Transport
«SELECT * FROM Transport Where ID IN (select TransportID FROM TransportCriterias WHERE CriteriaID = ‘» + order.FreightCriteriaID + «‘) and ID not in (select TransportID from Timetable Where Date = ‘» + order.Date + «‘) and Capacity >= ‘» + order.Mass + «‘ and MinDistance <= ‘» + order.Distance + «‘ and MaxDistance >='» + order.Distance + «‘ and InRepair = 0»
SELECT * FROM Transport
SELECT CriteriaID FROM TransportCriterias WHERE TransportID = ‘» + tID + «‘
delete from TransportCriterias
INSERT INTO TransportCriterias values ((select ID from Transport where RegNumber Like ‘» + RegNumber + «‘), » + CriteriaID + «)
SELECT ID, RegNumber FROM Transport
select distinct » + TransportCrit + » FROM Transport where » + TransportCrit + » is not null
Выборки из таблицы Criterias
SELECT * FROM Criterias Where [Level] = ‘» + Level + «‘ order by Name
SELECT Name FROM Criterias Where ID = ‘» + ID + «‘ order by Name
select * from Criterias where Parent = (select ID from Criterias where Name like ‘» + ParentName + «‘) order by Name
SELECT * FROM Criterias Where Name LIKE ‘» + Name + «‘ and [Level] = ‘» + Level + «‘ order by Name
SELECT ID FROM Criterias Where [Name] LIKE ‘» + Name + «‘
SELECT ID FROM Criterias Where [Parent] = ‘» + ParentID + «‘
Добавление записей в таблицу Criterias
программный база данные транзакция
insert into Criterias ([Parent], [Level], [Name]) values (‘0′,’0’,'» + Name + «‘)
insert into Criterias ([Parent], [Level], [Name]) values ((select id from criterias where name like ‘» + Parent + «‘),'» + Level + «‘,'» + Name + «‘)
Запросы на удаление
delete from Orders where FreightCriteriaID =» + Find(Name)
delete from Criterias where [Name] like ‘» + Name + «‘
delete from Orders where FreightCriteriaID IN (SELECT ID FROM Criterias Where Parent LIKE ‘» + ParentID + «‘)
delete from Criterias where [Parent] = ‘» + ParentID + «‘
delete from TransportCriterias where [CriteriaID] = ‘» + ID + «‘
delete from Criterias where [ID] = ‘» + ID + «‘
delete from TransportCriterias where [CriteriaID] IN (SELECT ID FROM Criterias Where Parent LIKE ‘» + ParentID + «‘)
delete from Criterias where [Parent] = ‘» + ParentID + «‘
delete from Criterias where [ID] = ‘» + ID + «‘
delete from Orders where [ID] = ‘» + ID.ToString() + «‘
delete from TimeTable where [OrderID] = ‘» + ID.ToString() + «‘
Добавление записей в таблицу Orders
insert into orders (Supplier, Customer, Date, FreightCriteriaID, Mass, Destination, Distance) values (‘» + os.Supplier + «‘,'» + os.Custumer + «‘,'» + os.Date.ToString() + «‘,» + os.FreightCriteriaNameID.ToString() + «,» + os.Mass.ToString() + «,'» + os.Destination + «‘,» + os.Distance + «);
Добавление записей в таблицу Timetable
insert into Timetable (TransportID, OrderID, [Date]) values ((select ID from Transport Where RegNumber = ‘» + RegNumber + «‘),(select MAX(ID) from Orders),'» + Date + «‘);
Создание хранимой процедуры поиска
expert_db;
- GOPROCEDURE Find @FName varchar(20)@FName = ‘%’ + RTRIM(@FName) + ‘%’;
- OrdersSupplier LIKE @FName;
- Запуск хранимой процедурыexpert_db;Find @FName = ‘а’;
Создание хранимой процедуры проверки существования
expert_dbprocedure Existance
Print ‘Компонент существует»Компонент не существует’
Запуск хранимой процедуры
use expert_dbExistance ‘Компьютеры’
Создание хранимой процедуры агрегирования
use expert_dbprocedure sum_mass_by_supp
@Supp varchar(50)Supplier, sum(Mass) AS Summ from Orders group by Supplier Having Supplier = @Supp
Запуск хранимой процедуры
expert_dbsum_mass_by_supp ‘Владос’
Создание распределенной транзакции
expert_db/*distributed*/ transaction;Orders set Supplier = ‘Izmenen’ Where ID = ‘1017’;[ASH-PC].re_ex.dbo.Orders set Supplier = ‘Izmenen’ Where ID = ‘1017’; transaction;
Откат транзакции и подтверждение транзакции
use expert_db@Transa varchar(10) = ‘Transa1’;transaction @Transa;Orders set Customer = ‘x’ Where ID = ‘1016’;[ASH-PC].re_ex.dbo.Orders set Customer = ‘x’ Where ID = ‘1016’;transaction @Transa;transaction;Orders set Customer = ‘z’ Where ID = ‘1017’;[ASH-PC].re_ex.dbo.Orders set Customer = ‘z’ Where ID = ‘1017’;transaction
Взаимоблокировки
- Транзакция 1 — Шаг 1
expert_dbTRANSACTIONOrders SET Mass = ‘1000’ WHERE ID = ‘1008’
- Транзакция 2 — Шаг 2
expert_dbTRANSACTIONTransport SET MaxDistance = ‘1000’ WHERE ID = ‘1’Orders SET Distance = ‘100’ WHERE ID = ‘1008’TRANSACTION
- Транзакция 1 — Шаг 3
UPDATE Transport SET InRepair = ‘1’ WHERE ID = ‘1’TRANSACTION
Создание индекса
expert_db;DATABASE expert_dbFILEGROUP test1fg;DATABASE expert_dbFILEGROUP test2fg;DATABASE expert_dbFILEGROUP test3fg;
- Adds one file for each filegroup.DATABASE expert_dbFILE
(= test1dat1,= ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATAt1dat1.ndf’,= 5MB,= 100MB,= 5MB
FILEGROUP test1fg;DATABASE expert_dbFILE
(= test2dat2,= ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\t2dat2.ndf’,= 5MB,= 100MB,= 5MB
FILEGROUP test2fg;DATABASE expert_dbFILE
(= test3dat3,= ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\t3dat3.ndf’,= 5MB,= 100MB,= 5MB
FILEGROUP test3fg;expert_dbPARTITION FUNCTION fnyears(Date)RANGE LEFT FOR VALUES
( ’31/12/2005′ , ’31/12/2010′);PARTITION SCHEME psYears AS PARTITION fnyears TO (test1fg, test2fg, test3fg);clustered INDEX Order_ID ON Orders (ID, Date) ON psYearsAll(Date);
Индексированное представление
USE expert_db;
- GONUMERIC_ROUNDABORT OFF;ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON;VIEW vOrdersSCHEMABINDINGdbo.Orders.Supplier AS Поставщик, dbo.Orders.Customer AS Покупатель, dbo.Orders.Date AS Дата, dbo.Criterias.Name AS Наименование, dbo.Orders.Mass AS Вес, dbo.Orders.Destination AS Адрес,.Orders.Distance AS Растояние, dbo.Orders.ID as oID, dbo.Criterias.ID AS cIDdbo.Criterias INNER JOIN.Orders ON dbo.Criterias.ID = dbo.Orders.FreightCriteriaID
- Create an index on the view.UNIQUE CLUSTERED INDEX IDX_V1
ON vOrders (oID, cID);