Практическая лабораторная работа №1


BEGIN TRANSACTION [Имя транзакции]


Download 3.23 Mb.
Pdf ko'rish
bet188/207
Sana16.11.2023
Hajmi3.23 Mb.
#1778259
TuriУчебно-методическое пособие
1   ...   184   185   186   187   188   189   190   191   ...   207
Bog'liq
курс лаб по SQL 2008

BEGIN TRANSACTION [Имя транзакции] – начало транзакции; 
COMMIT TRANSACTION [Имя транзакции] – конец транзакции; 
ROLLBACK TRANSACTION[Имя транзакции] – откат транзакции; 
В последних двух командах слово TRANSACTION можно либо опускать, либо 
заменять словом WORK. Во всех трех командах допускается использование сокращения 


181 
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), удовлетворяющий 
спецификации “X/OPUN XA for Distributed Transaction Processing”. Координатор MS 
DTC начинает и заканчивает локальные транзакции, а также откатывает их назад, если 
одна из них закончилась с ошибкой. При выполнении распределенных транзакций 
пользователь может обращаться не только к серверам SQL Server, но и к другим 
источникам данных: Oracle, Access, источники ODBC и другие. 
Для клиентского приложения работа с определенными транзакциями практически 
ничем не отличается от работы с локальными транзакциями, так как все согласование 
транзакций в различных источниках данных выполняется автоматически и невидимо для 
пользователя. 


182 
Распределенная транзакция может быть начата несколькими способами. 
1. Если приложение в локальной транзакции использует распределенный запрос, 
то сервер автоматически начинает выполнение распределенной транзакции. 
2. Если приложение начинает локальную транзакцию и из нее вызывает 
удаленную 
хранимую 
процедуру 
при 
установленном 
параметре 
REMOTE_PROC_TRANSACTION, то эта транзакция автоматически расширяется до 
распределенной транзакции (см.sp_configure). 
3. Приложение может начать распределенную транзакцию, используя методы OLE 
DB или ODBC. 
4. Сервер начинает выполнение распределенной транзакции, если встречает 
команду BEGIN DISTRIBUTED TRANSACTION Имя транзакции. 
В этом случае для завершения и отката транзакций используются команды 
COMMIT TRANSACTION и ROLLBACK TRANSACTION. 
При работе с явными транзакциями можно использовать вложенные транзакции, 
выполнение которых инициируется из тела уже активной транзакции. Для управления 
вложенными транзакциями используются те же команды, при этом каждая команда 
COMMIT работает только с последней начатой транзакцией. Если в команде 
ROLLBACK не задано имя транзакции, то откатываются все вложенные транзакции и 
транзакция самого высокого уровня. 
Если же имеется необходимость откатить лишь часть транзакций, то 
предварительно надо создать точку сохранения с помощью команды SAVE 
TRANSACTION, которую следует указывать при откате. Функция @@TRANSACTION 
предназначена для определения количества активных транзакций, начатых в активном 
соединении. 
Во всех транзакциях нельзя использовать следующие команды:

Download 3.23 Mb.

Do'stlaringiz bilan baham:
1   ...   184   185   186   187   188   189   190   191   ...   207




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling