Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / the-current-transaction-cannot-be-committed REVISITED / 6 сообщений из 6, страница 1 из 1
13.10.2021, 16:02
    #40104161
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
the-current-transaction-cannot-be-committed REVISITED
Господа,
столкнулся с ошибкой описанной в

https://www.sql.ru/forum/1082737-1/the-current-transaction-cannot-be-committed-and-cannot-support-operations-that-write-to
https://www.sql.ru/forum/1082737/the-current-transaction-cannot-be-committed-and-cannot-support-operations-that-write-to

но обстоятельства несколько иные, чем в данных топиках.

SQL 2014

1) Есть очередь Q сервис брокера с процедурой обработчиком P1.
2) Она вызывает процедуру P2 та P3.
3) На команде END CONVERSATION @dialog
WITH ERROR = @importSalepageResult
DESCRIPTION = @response падает в CATCH и логирует ошибку

2021-10-13 14:07:59 FailToPosLog. The current transaction cannot be committed and cannot support operations that write to the log file. Roll back the transaction. proc:P2:678 proc: P1, line: 80, message: The current transaction cannot be committed and cannot support operations that write to the log file. Roll back the transaction.

4) Докопался до админов, те заверили, что на обоих серверах места для лога полно.
5) Обернул оператор из proc:P2:678 в TRY CATCH
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
BEGIN TRY 
	
DELETE 
INSERT 
	END TRY 
	BEGIN CATCH 
		IF (@@TRANCOUNT > 0) 
			ROLLBACK; 
	END CATCH 


6) Все равно получаю FailToPosLog. The current transaction cannot be committed and cannot support operations that write to the log file.

7) В процедуре имеется код, который делает INSERT в несколько табличных переменных, а потом DELETE INSERT в таблицы. Ещё Есть два MERGE. Есть парзинг XML.
8) При вызове вне очереди (закидывая в процедуру P2 XML мессаги) -- отрабатывает успешно
...
Рейтинг: 0 / 0
13.10.2021, 16:10
    #40104165
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
the-current-transaction-cannot-be-committed REVISITED
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
BEGIN CATCH   
          IF (@XACT_STATE = -1 OR @XACT_STATE = 1)
          BEGIN
              IF (@@TRANCOUNT > 0)
              BEGIN
                ROLLBACK TRANSACTION;
              END;
          END;
END CATCH
...
Рейтинг: 0 / 0
13.10.2021, 16:22
    #40104166
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
the-current-transaction-cannot-be-committed REVISITED
Konst_One
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
BEGIN CATCH   
          IF (@XACT_STATE = -1 OR @XACT_STATE = 1)
          BEGIN
              IF (@@TRANCOUNT > 0)
              BEGIN
                ROLLBACK TRANSACTION;
              END;
          END;
END CATCH



есть заменить @XACT_STATE на XACT_STATE(), то проблема магически исправилась.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
BEGIN CATCH   
          IF (@XACT_STATE = -1 OR @XACT_STATE = 1)
          BEGIN
              IF (@@TRANCOUNT > 0)
              BEGIN
                ROLLBACK TRANSACTION;
              END;
          END;
END CATCH



Не будет ли любезен великий маг из Хоггвардса объяснить, что тут происходило? В чем разница между исполнением под Service Broker и без него?
...
Рейтинг: 0 / 0
13.10.2021, 16:27
    #40104169
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
the-current-transaction-cannot-be-committed REVISITED
...
Рейтинг: 0 / 0
13.10.2021, 16:28
    #40104170
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
the-current-transaction-cannot-be-committed REVISITED
a_voronin,

ищите где у вас до команды end conversation XACT_STATE() меняет состояние на -1;
какая то инструкция у вас переводит транзакцию в uncommitable состояние.

инструкция end conversation по сути равна записи в постоянную таблицу - то есть это логируемая операция.
если замените end conversation на insert into [permanent_table] тоже получите ошибку.
...
Рейтинг: 0 / 0
13.10.2021, 20:26
    #40104222
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
the-current-transaction-cannot-be-committed REVISITED
felix_ff
какая то инструкция у вас переводит транзакцию в uncommitable состояние.
Либо установлено XACT_ABORT = ON.
В этом случае любая, даже пользовательская ошибка будет переводить транзакцию в нефиксируемое состояние.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / the-current-transaction-cannot-be-committed REVISITED / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]