Программирование >>  Реализация баз данных 

1 ... 119 120 121 [ 122 ] 123 124 125 ... 162


3 Управление транзакциями и блокировками в SQL Server Глава 12

Colb СНАЯ(З) NOT NULL

GO .... -

SET IMPLICIT TRANSACTIONS ON

GO

Первая неявная транзакция, начатая оператором INSERT */ INSERT INTO ImplicitTran

VALUES (1, -aaa) . ,

INSERT INTO ImplicitTran

VALUES (2, bbb } 30

/* Фиксация первой транзакции / .

COMMIT TRANSACTION

GO

/* Вторая неявная транзакция атая оператором INSERT ♦/ INSERT INTO ImplicitTran ., .

VALUES (3. ci...;.. у . ,

SELECT .

FROM ImplicitTran

/* Фиксация второй транзакции */ - . -

COMMIT TRANSACTION GO

SET IMPLICIT TRANSACTIONS OFF

GO

Неявные транзакции API

Установить режим неявных транзак 1ий можно средствами API ODBC и OLE DB. Чтобы выяснить, как это сделать, обратитесь к SQL Server Books Online. ADO не поддерживает неявные транзакции. Приложения ADO используют режим автоматической фиксации или режим явных транзакций.

Распределенные транзакции

В исполнении распределенные акций принимают участие два или больше серверов, которые в этом случае называются тчера.м рес.урсов. Серверный компонент под названием диспетчер транзакций координируем шленне транзакциями етатяемое диспетчерами ресурсов. SQL Server способен работать как диспетчер ресурсов при исполнении распределенных транзакций, координируемых такими диспетчерами транзакций, как Microsoft Distributed Transaction Coordinator (M ГС). или другими, поддерживающими спецификацию обработки распределенных транзакции , ХА.

исполняемая на одном экземпляре SQL Server, в которой задействовано две или более БД, на самом дел яется распределенной. Однако она управляется внутренними механизмами SQL ServeriK и все распределенные транзакции. Таким образом, пользователь воспринимает этот как локальную транзакцию.

Управление распределенными в приложениях во многом напоминает

управление локальными В конце транзакции приложение запрашивает



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

виться . В результате каждый диспетчер ресурсов выполняет все необходимые действия

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

Фаза фиксации. Если все диспетчеры ресурсов сообщают диспетчеру транзакций об

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

ресурсов посылает сообщение о сбое подготовительной фазы, диспетчер транзакций

посылает всем диспетчерам ресурсов команду ROLLBACK и уведомляет приложение о

сбое фиксации.

SQL Server управляют распределенными транзакциями через Transact-

SQL или API БД.

Распределенные транзакции в Transact-SQL

Струк1>\. распределенныетакций, инициируемых Transact-SQL. относительно проста:

1. сценарий или установленное приложением соединение исполняет оператор Transact-SQL, запускающий распределенную транзакцию;

2. экземпляр SQL Server, исполнивший этот оператор Transact-SQL, становится сервером, управляющим транзакцией;

3. сценарий или исполняет распределенные запросы к связанным или удаленные хранимые процедуры, использующие связанные серверы;

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

5. если приложение или сценарий исполняет оператор ММIT или ROLLBACK, управляющий сервер вызывает MS DTC для проведения процесса двухфазной фиксации или уведомления связанных и удаленных серверов о необходимости отката транзакции соответственно.

Необходимые операторы Transact-SQL

Число операторов Transact-SQL, управляющих распределенными транзакциями, невелико, поскольку большая часть работы выполняется внутренними механизмами SQL Server и MS DTC. Операторы Transact-SQL необходимы в сценариях и приложениях только для выполнения задач:

* запуска распределенной транзакции;

выполнения распределенных запросов к связанным серверам или удаленных процедур, связанные серверы;



362 Управление и Шлоюлршками s SQL Server Глава 12

вызова стандартные ransact-SQL COMMIT CTION, COMMIT WORK, ROLLBACK TRANSACT ION или ROLLBACK : ; ; завершения транзакции.

При исполнении любо е.чсни.т транзакции, написанной на языке Transact-

SQL, сервер, обрабатывающий сценарий Transact-SQL, автоматически вызывает MS DTC

для координации фиксации или отката транзакции. Распределенные транзакции!} DTC

Приложения, использующие OLEDB, ODBC, ADO или DB-Library, мотут использовать распределенные транзакции, инициируя и завершая их средствами операторов Transact-SQL. Помимо этого, OLE DB и также поддерживают управление распределенными

транзакциями на уровне API. С помощью функций API приложения OLE DB и ODBC получают возможность управлять транзакциями, в которых задейство-

ваны диспетчеры ресурсов СОМ пвающие транзакции MS DTC, отличные от SQL Server. Посредством функций API эти приложения увеличивают степень контроля над границами распределенных в которых участвуют несколько серверов SQL.

Структура распределенных начатых с использованием операторов Transact-

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

ми SQL Server и службы MS DTC.

Упражнение 2. Реализация явных транзакций

В этом упражнении лните в БД BookShopDB явные и неявные транзакции, а также транзакции с автоматической фиксацией с помощью операторов

Transact-SQL. Чтобы выполнить это упражнение, необходимо зарегистрироваться

в качестве администратора на компьютере под управлением Windows 2000 Server.

Выполнение явной транзакции

L Откройте Quer 1у/.с1 и подключитесь к локальному серверу.

2. На панели Editor в окне Query введите следующий код Transact-SQL:

BEGIN TRANSACTION

USE BookShopDB . ,

UPDATE Authors .

SET Description -

English author whos s are highly regarded

fo rrony, and depiction of English .не. WHERE lasTWane = Austen

GO .

COMMIT TRANSACTION

Этот оператор запускает транзакцию с помощью оператора BEGIN TRANSACTION, затем он обновляет таблицу hors в БД BookShopDB и в завершение - фиксирует транзакцию с помощью оператора COMMIT TRANSACTION.

3. Исполните оператор Transact-SQL.

На вкладке Messages панели выводится сообщение, о том. что исполненная

транзакция повлияла на одну строку.



1 ... 119 120 121 [ 122 ] 123 124 125 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика