Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

Распределенные транзакции в MSSQL Server   Найти похожие ветки 

 
Суслик ©   (2006-05-02 16:02) [0]

Есть:
1. Cервера С1 и С2 - MS SQL Server.
2. Сервера друг о друге ничего не знают.
3. Есть клиент - К.

Что требуется:
1. Синхронные изменения в на обоих серверах.

Предполагаемый сценарий:
1. К открывает транзакцию на сервере С1.
2. К открывает транзакцию на сервере С2.
3. К проводит обновления на обоих серверах.
4. К частично коммитит транзакцию на сервере С1.
5. К частично коммитит транзакцию на сервере С2.
6. К получает сообщение о успешном комите с обоих серверов.
7. К окончательно комитит транзакции на серверах С1 и С2.
8. Если сообщение не получено, то на обоих серверах происходит откат.

Вопросы:
1. Можно это как-то сделать - может вложенные транзакции?
2. Имеет ли кто-нибудь опыт подобной реализации - поделитесь?
3. Где можно почитать про распределенные (надеюсь удачный термин) транзакции?


 
Ega23 ©   (2006-05-02 16:24) [1]

Как раз сейчас нечто подобное ваяем.
Тебе обязательно необходимо синхронное выполнение на обоих серверах? Или это всё-таки может происходить через какое-то время?


 
Ega23 ©   (2006-05-02 16:24) [2]

Да, вот ещё вопрос - версии серверов какие?


 
Суслик ©   (2006-05-02 16:31) [3]

1. Версия - ms sql 2000
2. Дело не в одновременности, а в синхронности транзакций - либо все на обоих серверах, либо ничего на обоих серверах


 
Sergey13 ©   (2006-05-02 16:33) [4]

Я не знаток МССКЛ, потому просто интересуюсь, сори за офтопик.
Что такое "частично коммитит транзакцию"?


 
Ega23 ©   (2006-05-02 16:35) [5]


> 1. Версия - ms sql 2000


Именно сервер? Не MSDE?


> 2. Дело не в одновременности, а в синхронности транзакций
> - либо все на обоих серверах, либо ничего на обоих серверах


Предметную область более подробно можешь описать, или секрет?


 
Ega23 ©   (2006-05-02 16:39) [6]


> Что такое "частично коммитит транзакцию"?


Насколько я понял, Дима хочет транзакцию в транзакции объявить. И если пришёл коммит от обоих серверов - соответственно закрывать её совсем.


> Дело не в одновременности, а в синхронности транзакций -
>  либо все на обоих серверах, либо ничего на обоих серверах


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


 
Nikolay M. ©   (2006-05-02 22:02) [7]

BEGIN DISTRIBUTED TRANSACTION
или я не понял вопроса?


 
Суслик ©   (2006-05-02 22:49) [8]


> Nikolay M. ©   (02.05.06 22:02) [7]
> BEGIN DISTRIBUTED TRANSACTION

Это вроде DTC?
Про это мне тоже говорили. Пока не почитал - спасибо, почитаю.


 
Nikolay M. ©   (2006-05-02 23:11) [9]


> Это вроде DTC


DTC - это Distributed Transaction Coordinator, обеспечивает работу распределенных транзакций (этот термин, кстати не ты придумал - ему сто лет в обед :) ). Должен быть запущен на обоих серверах. В принципе, это как раз твой случай, но учти, что DTC - это еще тот глюк.


 
Суслик ©   (2006-05-02 23:49) [10]


> Nikolay M. ©   (02.05.06 23:11) [9]

Да я и не придумывал ничего :) Просто констатировал.

Уточню вопрос.
По результатам прочтения про DTC понял, что он обеспечивает distributed transaction опираясь на возможности сервера. Не может же он выполнить распределенную транзакцию, если сервер не поддерживает двух фазовую транзакцию? Двух фазовая транзакция - это термин из books online. Термин значит как раз то, что я спрашивал в исходном вопросе - т.е.:
1. сначала предварительно комитит транзакцию в каждой базе данных, которая принимает участие в распределенной транзакции;
2. после того, как предварительный комит прошел во всех базах данных, комитит транзакцию окончательно.

Вопрос собственно в том какие mssql предоставляет возможности для двух фазового комита КРОМЕ DTC?


 
Суслик ©   (2006-05-03 00:13) [11]

Еще раз уточню вопрос :)

Как использовать two-phase commit в MS SQL Server"е,


 
Nikolay M. ©   (2006-05-03 10:27) [12]


> Не может же он выполнить распределенную транзакцию, если
> сервер не поддерживает двух фазовую транзакцию?


Не может.


> Термин значит как раз то, что я спрашивал в исходном вопросе
> - т.е.:


Да.


> Как использовать two-phase commit в MS SQL Server"е


Запустить на обоих серверах DTC (какие ставить флажки, из-под каких учетных записей пускать и тд много написано на sql.ru), распределенную транзакцию запускать с помощью BEGIN DISTRIBUTED TRANSACTION
или с установленным флажком REMOTE_PROC_TRANSACTIONS - при обращении к ресурсам чужого сервера автоматически произойдет эскалация локальной транзакции до распределенной. Остальное - не твоя забота.


 
Суслик ©   (2006-05-03 12:01) [13]


>  [12] Nikolay M. ©   (03.05.06 10:27)

Николай, спасибо за ответ.

Вообще говоря все это написано в BOLе. Т.е. я это в общем знаю.

Задам вопрос более развернуто.
Есть такая штука j2ee - стандарт на окружение, предоставляемое сервером приложений. В частности там есть функционал, отвечающий за распр. транзакции. У меня есть знакомый, который пишет приложения с использованием серверов - он использует одновременно несколько видов серверов (но не MSSQL). Из этого я делаю вывод, что сервер приложений, реализуя распр. транзакции, опирается на некий интерфейс, предоставляемый сервером базы данных в области two-phase commit. Если предполжить, что сервера приложений используют DTC, то возникает противоречие, как эти сервера приложений реализуют распр. транзакцию на серверах разных типов: например, 1 mssql и 2 oracle. Из этого я могу сделать вывод, что они опираются на некий низкоуровневый интерфейс, на который, в свою очередь, опирается DTC. Т.е. должно быть что-то низкоуровневое для реализации 2PC помимо DTC, т.е. то, что предоставляет непосредственно MSSQL, а не навесок в виде DTC.

Вот и интересно как 2PC реализуется БЕЗ DTC.

ЗЫ. Прошу не переносить в "Прочее", т.к. вопрос (вернее, ответ) для меня все-таки имеет большое практическое значение.


 
Nikolay M. ©   (2006-05-03 12:23) [14]


> Вот и интересно как 2PC реализуется БЕЗ DTC.

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

http://citforum.pomorsu.ru/programming/distr/distr02_6.shtml


 
Суслик ©   (2006-05-03 12:38) [15]


> Если не хочешь использовать DTC, то тебе по любому нужно
> будет писать его аналог (свой менеджер транзакций).

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


 
Nikolay M. ©   (2006-05-03 13:29) [16]


> Хотел бы создать платформу для масштабирования посредством
> подключения разных хранилищ.


Если большая часть нагрузки ложится на сервер приложений, то можешь попробовать распределять нагрузку среди серверов, на которых крутятся аппсерверы. Ествественно, все равно будет нужен свой менеджер распределения нагрузки. А БД-сервер будет один. Я, конечно, не знаю особенности твоей архитектуры, но не уверен, что увеличение параллельно работающих отдельных БД-серверов даст прирост производительности: на репликацию данных между ними и распределенные транзакции тоже нужны ресурсы. Разве что MS SQL на кластер ставить?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.008 c
11-1129103347
Алексей Ефременко
2005-10-12 11:49
2006.06.25
Использование интерфейсов в KOL


15-1149253449
Новичоккк
2006-06-02 17:04
2006.06.25
Правильно ли работаю с массивом сокетов?


15-1149128005
Arazel
2006-06-01 06:13
2006.06.25
Народ! подскажите где взять документацю ф.с. Ex2/Ex3/NTFS/...


5-1134113633
AndrewK
2005-12-09 10:33
2006.06.25
Как подключить в рантайм стандартный редактор свойств Delphi


15-1148583076
Аноним2000
2006-05-25 22:51
2006.06.25
Как получить ответ от Com-порта?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский