
- •Министерство образования Российской Федерации Пензенский государственный университет
- •Пенза 2004
- •Введение
- •1. Архитектура баз данных ms sql Server 2000
- •Физическая архитектура базы данных sql Server 2000
- •1.1.1. Файлы данных и группы файлов
- •1.1.2. Страничная организация файлов данных
- •ЛоГическая архитектура базы данных sql Server 2000
- •1.3. Системные базы данных sql server 2000
- •Создание и сопровождение баз данных средствами enterprise manager
- •3. Создание и сопровождение таблиц баз данных средствами enterprise manager
- •3.1. Основные принципы создания таблиц
- •3.2. Создание, модификация и удаление таблиц средствами Enterprise Manager
- •3.3. Управление диаграммами
- •4. Создание и управление индексами средствами Enterprise manager
- •5. Создание представлений средствами Enterprise manager
- •6. Основы программирования на языке Transact-sql
- •6.1. Средства языка Transact–sql
- •6.2. Константы, имена, идентификаторы, переменные, выражения в языке Transact–sql
- •6.3. Типы данных sql Server 2000
- •6.4. Создание и удаление баз данных, таблиц и представлений
- •6.4.1. Создание и удаление баз данных
- •6.4.2. Создание и удаление таблиц
- •6.4.3. Создание представлений
- •6.5. Создание и управление индексами
- •6.6. Вставка, удаление и изменение данных
- •6.7. Выборка данных
- •Раздел into позволяет создать новую таблицу для хранения результатов запроса, структура которой будет определяться списком выбора, т.Е. Динамически при выполнении запроса.
- •6.8. Функции sql Server 2000
- •6.8.1. Встроенные функции sql Server 2000
- •6.8.2. Функции пользователя
- •6.9. Хранимые процедуры sql Server 2000
- •6.9.1. Создание хранимых процедур
- •6.10. Триггеры
- •6.11. Создание и управление транзакциями
- •6.12. Создание, отладка и оптимизация sql–модулей
- •7. Лабораторный практикум
- •Создание диаграммы базы данных;
- •Рекомендуемые источники Печатные издания
- •Интернет-ресурсы1
- •Приложение 1. Примеры операторов языка Transact-sql
- •1.1. Создание баз данных
- •Create database Archive
- •Use master
- •Filegroup SalesGroup1
- •Filegroup SalesGroup2
- •Create database Sales
- •Create database Employees
- •1.2. Создание таблиц баз данных
- •1.3. Создание индексов
- •1.4. Создание представлений
- •From dbo. Authors
- •1.5. Добавление, модификация и удаление данных в таблицах
- •Insert Into TabF default values
- •Insert Into TabG (Col1,Col2)
- •1.6. Выборка данных из таблиц
- •If update (Phone)
- •Insert into #aaa values (111)
- •Insert into #aaa values (222)
- •Insert into #aaa values (333)
- •1.9. Создание пользовательских функций
- •1.10. Создание хранимых процедур пользователя
- •Приложение 2. Описание предметных областей, схем баз данных и запросов для лабораторного практикума
- •2.1. Предметная область «Летопись острова Санта-Белинда»
- •2.2. Предметная область «Скачки»
- •2.3. Предметная область «Хроника восхождений в альпинистском клубе»
- •2.4. Предметная область базы данных медицинского кооператива
- •2.5. Предметная область базы данных «Городская Дума»
- •2.6. Предметная область базы данных рыболовной фирмы
- •2.7. Предметная область база данных фирмы, проводящей аукционы
- •2.8. Предметная область база данных библиотеки
- •Предметная область базы данных для обслуживания работы конференции
- •2.10. Предметная область базы данных для обслуживания склада
6.11. Создание и управление транзакциями
Одним из способов повышения надежности работы системы MS SQL Server 2000 является применение встроенного в систему механизма транзакций и контрольных точек и умелое его управление.
Транзакция – это одна или несколько последовательных команд языка Transact–SQL, образующих логически завершенный пакет и выполняемых как единое целое. Если по какой-либо причине хотя бы одна из команд пакета не выполняется, то происходит откат системы к состоянию, в котором она была до начала транзакции, и транзакция считается не выполненной. По умолчанию каждая команда выполняется как самостоятельная транзакция. При необходимости в пакете можно явно указать начало и конец транзакции.
Обработка транзакций в любой системе управления базами данных должна производиться с соблюдением следующих правил ASID (Atomicity, Consistency, Isolation и Durability):
Atomicity – атомарность, выполняемые в транзакции изменения либо выполняются все, либо не выполняются вовсе;
Consistency – согласованность, все данные после выполнения транзакции должны находиться в согласованном состоянии с соблюдением всех правил и ограничений целостности;
Isolation – изолированность, изменения данных, выполняемых различными одновременно работающими транзакциями, должны быть изолированы;
Durability – долговечность, после завершения транзакции ничто не может вернуть систему в состояние, в котором она была до начала транзакции (происходит фиксация транзакции).
Транзакции должны как можно меньше включать команд и изменять минимум данных. Соблюдение этого требования позволит наиболее эффективным образом обеспечить одновременную работу с данными множества пользователей системы SQL Server 2000. Они определяются на уровне соединения с сервером. Поэтому при закрытии соединения происходит откат невыполненной транзакции, и ее нельзя выполнить позже после восстановления соединения.
SQL Server 2000 поддерживает три вида определений транзакций:
явное;
автоматическое;
подразумеваемое.
Для управления явными транзакциями применяют команды:
BEGIN TRANSACTION [Имя транзакции] – начало транзакции;
COMMIT TRANSACTION [Имя транзакции] – конец (фиксация) транзакции;
ROLLBACK TRANSACTION [Имя транзакции] – откат транзакции;
В последних двух командах слово TRANSACTION можно либо опускать, либо заменять словом WORK. Во всех трех командах допускается использование сокращения TRAN вместо слова TRANSACTION и переменной строкового типа, которой присваивается имя транзакции, вместо непосредственного указания этого имени. Дополнительный аргумент WITH MARK ‘Описание позволяет специальным образом маркировать транзакцию в журнале транзакций, что используется при восстановлении базы данных.
Если команды явного определения транзакций не используются, то сервер работает в одном из двух режимов:
режиме автоматического начала транзакций, в котором каждая операция рассматривается как отдельная транзакция, при этом, если команда выполнена успешно, то сделанные ею изменения фиксируются, и выполняется следующая команда, в противном случае производится откат транзакции и выполнение команды повторяется;
режиме неявного начала транзакции, когда начала транзакции не указывается, а ее завершение задается явно командой COMMIT или инициируется командами: ALTER TABLE, CREATE, DELETE, DROP, FETCH, GRANT, INSERT, OPEN, REVOKE, SELECT, TRANCATE TABLE и UPDATE; в этом режиме можно использовать команды COMMIT и ROLLBACK; после завершения текущей транзакции, начинается выполнение следующей, если не был задан откат транзакции.
Режим автоматического начала транзакций устанавливается по умолчанию или командой SET IMPLICIT – TRANSACTION OFF.
Режим неявного (или подразумевающегося) начала транзакций задается только командой SET IMPLICIT – TRANSACTION ON.
Когда в запросах используются разные базы данных, даже если они расположены на одном физическом сервере, необходимо использовать распределенные транзакции, которые на самом деле представляют собой несколько отдельных транзакций, выполняемых локально в каждой базе данных, используемой в запросе. Если при этом одна из локальных транзакций не выполняется, то происходит откат распределенной транзакции.
Для управления распределенными транзакциями в MS SQL Server 2000 используется координатор DTC (Distribution Transaction Coordinator). Координатор MS DTC начинает и заканчивает локальные транзакции, а также откатывает их назад, если одна из них закончилась с ошибкой. При выполнении распределенных транзакций пользователь может обращаться не только к серверам SQL Server 2000, но и к другим источникам данных: Oracle, Access, источники ODBC и другие.
Для клиентского приложения работа с определенными транзакциями практически ничем не отличается от работы с локальными транзакциями, так как все согласование транзакций в различных источниках данных выполняется автоматически и невидимо для пользователя.
Распределенная транзакция может быть начата несколькими способами. Если приложение в локальной транзакции использует распределенный запрос, то сервер автоматически начинает выполнение распределенной транзакции.
Если приложение начинает локальную транзакцию и из нее вызывает удаленную хранимую процедуру при установленном параметре REMOTE_PROC_TRANSACTION, то эта транзакция автоматически расширяется до распределенной транзакции (см.sp_configure).
Приложение может начать распределенную транзакцию, используя методы OLE DB или ODBC. Сервер начинает выполнение распределенной транзакции, если встречает команду BEGIN DISTRIBUTED TRANSACTION Имя транзакции. В этом случае для завершения и отката транзакций используются команды COMMIT TRANSACTION и ROLLBACK TRANSACTION.
При работе с явными транзакциями можно использовать вложенные транзакции, выполнение которых инициируется из тела уже активной транзакции. Для управления вложенными транзакциями используются те же команды, при этом каждая команда COMMIT работает только с последней начатой транзакцией. Если в команде ROLLBACK не задано имя транзакции, то откатываются все вложенные транзакции и транзакция самого высокого уровня. Если же имеется необходимость откатить лишь часть транзакций, то предварительно надо создать точку сохранения с помощью команды SAVE TRANSACTION, которую следует указывать при откате. Функция @@TRANSACTION предназначена для определения количества активных транзакций, начатых в активном соединении.
Во всех транзакциях нельзя использовать следующие команды: ALTER DATABASE, BACKUP LOG, CREATE DATABASE, DISK INIT, DROP DATABASE, DUMP TRANSACTION, LOAD DATABASE, LOAD TRANSACTION, RECONFIGURE, RESTORE DATABASE, RESTORE LOG, UPDATE STATISTICS, а также системной хранимой процедуры sp_droption и любой другой хранимой процедуры, изменяющей значения в системной базе master. Для отката таких действий необходимо использовать архивирование базы данных и последующее ее востановление.
MS SQL Server 2000 для обеспечения целостности данных использует журнал транзакции, который имеет сложную физическую и логическую архитектуру и в котором производятся все промежуточные модификации до завершения транзакции, после которой происходит фиксация изменений в самой базе данных. Контрольные точки минимизируют данные в журнале транзакций.