Create TABLE Importers

(

CompanylD int NOT NULL,

CompanyName varchar(40) NOT NULL,

Contact varchar(40) NOT NULL

)

ALTER TABLE

Оператор ALTER TABLE позволяет модифицировать определение таблицы посредством изменения, добавления или удаления столбцов и ограничений, а также активации и деактивации ограничений и триггеров. Следующий оператор изменит таблицу Importers в базе данных Northwind, добавив в нее столбец под названием ContactTitle.

USE Northwind

ALTER TABLE Importers

ADD ContactTitle varchar(20) NULL

DROP TABLE

Оператор DROP TABLE удаляет определение таблицы со всеми ее данными, индексами, триггерами, ограничениями и правами доступа. Любое представление или хранимую процедуру, которые ссылаются на удаленную таблицу, необходимо удалить в явном виде с помощью операторов DROP VIEW или DROP PROCEDURE. Следующий оператор удаляет таблицу Importers из базы данных Northwind.

USE Northwind

DROP TABLE Importers

23. Хранимые процедуры. Разработка хранимых процедур на MS SQL Server

Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности, недоступные при использовании команд Transact-SQL, отсылаемых для обработки на сервер. Повышается производительность — за счет локального (по отношению к базе данных) хранения, прекомпиляции исходного текста и кэширования. Возможности программирования расширяются благодаря применению таких распространенных средств программирования, как использование входных и выходных параметров, а также благодаря многократному использованию процедур.

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

Созданную хранимую процедуру можно вызвать в любой момент. Это обеспечивает модульность и стимулирует повторное использование кода. Последнее облегчает сопровождение базы данных, так как она изолирована от меняющихся бизнес-правил. Модифицировать хранимую процедуру в соответствии с новыми правилами можно в любой момент. После этого все приложения, использующие ее, автоматически придут в соответствие с новыми бизнес-правилами без непосредственной модификации.

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

Другое важное назначение хранимых процедур — повышение безопасности посредством изоляции и шифрования. Пользователям можно предоставить право на исполнение хранимой процедуры без непосредственного доступа к объектам базы данных, с которыми работает хранимая процедура. Кроме того, если хранимую процедуру зашифровать при создании или модификации, пользователям не удастся прочитать команды Transact-SQL, составляющие процедуру. Эти функции безопасности позволяют изолировать от пользователя структуру базы данных, что обеспечивает целостность данных и надежность базы.

SQL Server строит план исполнения запроса.

Хранимые процедуры в данном случае более эффективны. При создании они сохраняются в SQL Server, поэтому при вызове хранимой процедуры ее содержимое сразу же обрабатывается сервером. Один-единственный оператор позволяет вызвать сложный сценарий Transact-SQL, который содержится в хранимой процедуре, что позволяет избежать пересылки через сеть сотен команд.

Для создания процедур используют ключевые слова CREATE PROCEDURE.

Перед исполнением процедуры следует задать значения всех необходимых параметров. Хранимые процедуры можно исполнять вручную или автоматически (при запуске SQL Server). Для исполнения процедуры служит ключевое слово EXECUTE. Его можно опустить, если исполняемая процедура состоит из единственной строки или имя процедуры является первым словом пакета.

Часто приходится модифицировать созданные хранимые процедуры, например, чтобы добавить параметр или изменить ту или иную команду. Модификация процедуры вместо удаления и повторного создания «с нуля» позволяет сэкономить время, поскольку при модификации сохраняются многие свойства хранимых процедур (например, права доступа). Для модификации процедур используются ключевые слова ALTER PROCEDURE.

Для удаления процедур используют ключевое слово DROP. Процедуру можно удалить в Enterprise Manager или Query Analyzer, выбрав ее и нажав клавишу DELETE. He следует удалять процедуру до тех пор, пока все зависящие от процедуры объекты не будут удалены или модифицированы (чтобы удалить зависимость).

CREATE PROCEDURE [dbo]. [ListAuthorNames]

AS

SELECT [au_fname], [au_lname] FROM [pubs], [dbo]. [authors]


24. Понятие транзакции. Управление параллельностью.

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

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

Любая транзакция всегда должна переводить базу данных из одного согласованного состояния в другое, хотя допускается, что согласованность состояния базы будет нарушаться в ходе выполнения транзакции. Любая транзакция завершается одним из двух возможных способов. В случае успешного завершения результаты транзакции фиксируются (commit) в базе данных, и последняя переходит в новое согласованное состояние. Если выполнение транзакции не увенчалось успехом, она отменяется. В этом случае в базе данных должно быть восстановлено то согласованное состояние, в котором она находилась до начала данной транзакции. Этот процесс называется откатом (roll back) транзакции.

Существуют некоторые свойства, которыми должна обладать любая из транзакций. Ниже представлены четыре основных свойства (ACID — аббревиатура, составленная из первых букв их английских названий).

· Атомарность. Это свойство типа "все или ничего". Любая транзакция представляет собой неделимую единицу работы, которая может быть либо выполнена вся целиком, либо не выполнена вовсе.

· Согласованность. Каждая транзакция должна переводить базу данных из одного согласованного состояния в другое согласованное состояние.

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

· Продолжительность. Результаты успешно завершенной (зафиксированной) транзакции должны сохраняться в базе данных постоянно и не должны быть утеряны в результате последующих сбоев.

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

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

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

· проблему потерянного обновления,

· проблему зависимости от нефиксированных результатов,

· проблему несогласованной обработки.

25. Распределенные БД и системы управления распределенными БД.

Распределенная база данных - Набор логически связанных между собой разделяемых данных (и их описаний), которые физически распределены в некоторой компьютерной сети.

Из этого вытекает следующее определение.

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

Система управления распределенными базами данных (СУРБД) состоит из единой логической базы данных, разделенной на некоторое количество фрагментов. Каждый фрагмент базы данных сохраняется на одном или нескольких компьютерах, которые соединены между собой линиями связи и каждый из которых работает под управлением отдельной СУБД. Любой из сайтов (один из компьютеров с фрагментом распределенной БД) способен независимо обрабатывать запросы пользователей, требующие доступа к локально сохраняемым данным (что создает определенную степень локальной автономии), а также способен обрабатывать данные, сохраняемые на других компьютерах сети.

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

• Набор логически связанных разделяемых данных.

• Сохраняемые данные разбиты на некоторое количество фрагментов.

• Между фрагментами может быть организована репликация данных.

• Фрагменты и их реплики распределены по различным сайтам.

• Сайты связаны между собой сетевыми соединениями.

• Работа с данными на каждом сайте управляется СУБД.

• СУБД на каждом сайте способна поддерживать автономную работу локальных приложений.

• СУБД каждого сайта поддерживает хотя бы одно глобальное приложение.

Из определения СУРБД следует, что для конечного пользователя распределенность системы должна быть совершенно прозрачна (невидима).

Преимущества: Отражение структуры организации, Разделяемость и локальная автономность, Повышение доступности данных, Повышение надежности, Повышение производительности, Экономические выгоды, Модульность системы

Недостатки: Повышение сложности, Увеличение стоимости, Проблемы защиты, Усложнение контроля за целостностью данных, Отсутствие стандартов, Недостаток опыта.

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

Параллельная Система управления базой данных, функционирующая с использованием нескольких процессоров и устройств жестких дисков, что позволяет ей (если это возможно) распараллеливать выполне­ние некоторых операций с целью повышения общей производи­тельности обработки.

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

Существуют два основных типа фрагментации: горизонтальная и вертикальная. Горизонтальные фрагменты представляют собой подмножества кортежей отношения, а вертикальные — подмножества атрибутов отношения, как показано на рис. 19.7.

Кроме того, существуют еще два типа фрагментации: смешанная (рис. 19.8) и производная (представляющая собой вариант горизонтальной фрагментации). Ниже мы продемонстрируем различные типы фрагментации на примере экземпляра базы данных приложения DreamHome, представленного в табл. 3.3-3.8.

(а)

(б)

(с)

Рис.19.7. Различные типы фрагментации: (а) горизонтальная; (б) вертикальная, (с) смешанная

Слить воду

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

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

Каждая транзакция состоит из последовательности операций, включающих чтение и запись данных в базу, которые должны завершаться фиксацией либо откатом полученных результатов. График S представляет собой последовательность операций, входящих в состав множества из n транзакций Т1 T2,..., Тn на которую накладывается ограничение, требующее, чтобы последовательность операций каждой из исходных транзакций была сохранена. Следовательно, для каждой транзакции Тi порядок ее операций в графике S должен быть сохранен.

Последовательный график. График, в котором операции каждой из транзакций выполняются строго последовательно и не могут чередоваться с операциями, выполняемыми в других транзакциях.

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

Три описанные выше проблемы являются следствием неверного управления параллельным выполнением транзакций, что приводит к переходу базы данных в несогласованное состояние (в первых двух примерах) или к выдаче пользователю неверных результатов (в третьем случае). Последовательное выполнение транзакций предотвращает возникновение подобных проблем. Не имеет значения, какой именно последовательный график будет выбран, поскольку при последовательном выполнении транзакций база данных никогда не оставляется в несогласованном состоянии. Поэтому любая последовательность выполнения транзакций из заданного множества будет корректной, хотя могут быть получены различные конечные результаты. Суть упорядочивания состоит в отыскании таких непоследовательных графиков, которые позволят транзакциям выполняться параллельно, но без оказания взаимного влияния друг на друга, и, привести базу данных в состояние, которое может быть достигнуто при использовании последовательного графика.

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

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

· Если две транзакции считывают или записывают совершенно независимые, элементы данных, они не будут конфликтовать между собой и порядок их выполнения не имеет значения.

· Если одна транзакция записывает элемент данных, а другая транзакция этот же элемент данных считывает или записывает, порядок их выполнения имеет существенное значение.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: