Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизЧто происходит с транзакцией запущенной на сервере если ADOComman Найти похожие ветки
← →
jocko (2004-01-17 13:01) [0]Собственно хотелось бы знать сталкивался ли кто с такой проблемой.
В списке блокировок видим пользователей, у которых есть несколько незавершенных транзакций,на клиенте транзакции не открываются,
серверные процедуры уже перепроверены, источник не нашли, везде есть commit или rollback (кажется :( ),
из множества серверов проблемы только на одном, причем самом нагруженном и то видимо в часы максимальной
нагрузки. Единственная мысль изложена в subject.
Может у кого есть идеи...
← →
jocko (2004-01-17 13:40) [1]Что происходит с транзакцией запущенной на сервере если ADOCommand "отвалился" по timeout?
← →
KSergey (2004-01-17 14:06) [2]Смотря что происходит в программе при этом "отваливании".
Впрочем, не совсем понятно что значит "ADOCommand "отвалился" по timeout". Рвется соединение с сервером или команда просто выполняется больше таймаута?
А где транзакция-то открыта? В ХП или c клента?
1.Если с клиента.
Если рвется соединение с сервером - то транзакция собственно и останется висеть. И не снять ее часто, увы. Если просто выскакивает Exception про таймаут - то, видимо, просто обработать его и откатить транзакцию.
2.Если с сервера (в ХП или запросе)
Думаю, ХП или запрос таки будут дорабатывать до конца не смотря на то, что клиента это уже не интересует, хотя, сказать честно, в этом уже не уверен. Это я не четко знаю.
Вообще, хоть и возникает часто соблазн открывать транзакции с клиента делать этго не стоит никогда, т.к. всегда возможна ситуация подвиса клиента, а значит никакая обработки исключений не позволит транзакцию корректно закрыть (коммитом или откатом). Т.е. транзакции - только! на сервере, в рамках ХП, например.
← →
jocko (2004-01-17 14:21) [3]команда выполняется дольше 30 сек
на клиенте транзакции не открываются
← →
jocko (2004-01-17 14:22) [4]используются только ХП
← →
KSergey (2004-01-17 14:41) [5]Ну в принципе, если более 30 сек считать нормальным для задачи - то может увеличить? Благо ADOCommands это позволяет.
А вообще действительно интересно: что делает сервер с запущенным SQL Batch, если пользователь отвалился? Может кто из монстров подскажет...
Если вы зададите этот вопрос а sql.ru, скажем, киньте сюда ссылку - инетесно что ответят.
← →
Nikolay M. (2004-01-19 10:15) [6]
> Что происходит с транзакцией запущенной на сервере если
> ADOCommand "отвалился" по timeout?
Может, я не совсем в сути дела, но у меня при вызове след. ХР вылета по таймауту (в ADOCommand & ADOConnection тайминги минимальны) не произошло, процедура работает около минуты.
Имхо, после запуска ХР на сервере (не)существование коннекта с клиентом на ее работу уже никакого влияния не имеет. Просто на клиенте посыпятся ошибки, а процесс, запущенный на сервере, отработает до конца. А закоммитится он или откатится - это уже зависит от логики ХР.
CREATE PROC pTest
AS
DELETE FROM tTest
BEGIN TRANSACTION
DECLARE
@i integer,
@j integer
SELECT @j = 0
WHILE (@j < 1000)
BEGIN
SELECT
@i = 0
WHILE (@i < 20000)
SELECT @i = @i + 1
SELECT @j = @j + 1
INSERT INTO tTest (f1) VALUES (@j)
END
COMMIT TRANSACTION
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c