Розподілені транзакції

Транзакції є ключовим елементом підтримки цілісності даних Якщо логічна одиниця роботи містить зміну даних поза локального сервера, то стандартна транзакція не зможе забезпечити атомарность операції Якщо в середині транзакції трапиться помилка, то повинен існувати механізм, здатний скасувати виконану частину роботи В іншому випадку буде записана часткова транзакція, і база даних залишиться в суперечливому стані

Дотттттш У главі 51 ми докладно обговоримо властивості Асю баз даних і транзакцій

інформація \

Координатор розподілених транзакцій

SQL Server використовує координатор розподілених транзакцій (далі DTC) для обслуговування транзакцій, які зачіпають кілька серверів, – їх підтвердження і відкату Служба DTC використовує двофазну схему підтвердження багатосерверних транзакцій Це передбачає, що доступні обидва сервера, при цьому служба DTC виконує наступні дії

1 Кожен з серверів відправляє повідомлення про готовність до підтвердження

2 Кожен з серверів виконує перший етап підтвердження, гарантуючи тим самим здатність до повного підтвердженню транзакції

3 Кожен з серверів повідомляє про закінчення підготовки до підтвердження

4 Тільки після того як всі сервери відповіли позитивно про готовність до підтвердження, повідомлення про реальний підтвердженні транзакції відправляється всім їм

Якщо логічна одиниця роботи містить тільки операції читання з серверів, то використання служби DTC не потрібно Тільки коли виконується віддалене оновлення даних, транзакція розглядається як розподілена

Координатор розподілених транзакцій є окремою службою SQL Server, яка запускається і зупиняється за допомогою SQL Server Service Manager

Тільки один екземпляр цієї служби запускається на одному сервері, незалежно від кількості встановлених і запущених на ньому примірників SQL Server Фактичне імя служби – msdtc ехе, споживаний обсяг памяті – 2,5 Мбайт

Служба DTC повинна бути запущена, коли ініціюється розподілена транзакція, в іншому випадку остання завершиться помилкою

Створення розподілених транзакцій

аналогічні локальним, але мають деякі розширення в синтаксисі:

SET xact_abort on

BEGIN DISTRIBUTED TRANSACTION

У випадку помилки параметр підключення xact_abort призведе до відкату поточної транзакції, а не тільки поточної інструкції Т-SQL Параметр xact_abort необхідний, щоб будь-яка розподілена транзакція могла підключитися до віддаленого примірника SQL Server, так само як і до більшості інших сполук OLE DB

Інструкція BEGIN DISTRIBUTED TRANSACTION, яка визначає, чи доступна служба DTC, строго не потрібно Навіть якщо транзакція починається інструкцією BEGIN TRAN, вона все одно буде розширена до розподіленої, і наявність служби DTC буде перевірено, як тільки буде виконано перший розподілений запит У той же час вважається хорошою практикою використовувати повну форму BEGIN DISTRIBUTED TRANSACTION, щоб наявність DTC перевірялося на самому початку транзакції Якщо служба DTC не запущено, то автоматично видається повідомлення про помилку:

Server: Msg 8501, Level 16, State 3, Line 7 MSDTC on server XPS is unavailable

Наступний приклад демонструє розподілену транзакцію між локальним сервером і його другим примірником:

USE Family

SET xact_abort on

UPDATE Person

SET LastName = Johnson2

WHERE PersonID = 10

UPDATE [Noli\SQL2]FamilydboPerson SET LastName = 1Johnson2

WHERE PersonID = 10

COMMIT TRANSACTION

Зазвичай при відкат вкладених транзакцій SQL Server відкочуються всі транзакції, що знаходяться в режимі очікування, тобто до самої зовнішньої Однак служба DTC надходить по-іншому – вона відкатує тільки поточну транзакцію

Моніторинг розподілених транзакцій

Роботу координатора розподілених транзакцій можна переглянути в самій операційній системі як окремо встановлюваної служби сервера Windows Server 2003 Для цього потрібно в головному системному меню Start вибрати пункт Control Panel ^ Administrative Tools ^ Component Services Служба компонентів відображає список поточних очікують розподілених транзакцій (рис 158), а також статистику служби DTC (рис 159)

Puc 158 Служба компонентів відображає список поточних транзакцій DTC

Якщо деяка розподілена транзакція зіткнулася з труднощами, вона, що найбільш ймовірно, буде передчасно скасована Якщо ж транзакція позначена як In Doubt, то ручне її підтвердження або відкат за допомогою контекстного меню в службі компонентів можуть вирішити ситуацію

Рис 159 У службі компонентів можна побачити поточну і накопичувальну статистику про розподілених транзакціях При перезапуску служби DTC статистика повністю очищається

Резюме

Корпоративні даних мають тенденцію розміщуватися на безлічі платформ і компютерів Здатність SQL Server брати на озброєння можливості OLE DB і ODBC для виконання розподілених запитів є ключовим фактором успіху безлічі проектів баз даних Тому знання методів створення розподілених запитів є необхідним компонентом в арсеналі розробника баз даних

Крім переміщення даних за допомогою розподілених запитів, інструкція SELECT незамінна при зміні даних У наступному розділі ми розглянемо дії, що виконуються цією інструкцією при додаванні команд INSERT, UPDATE і DELETE

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*