Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Текущая транзакция не может быть зафиксирована и не может поддерживать операции.. / 13 сообщений из 13, страница 1 из 1
26.02.2021, 14:24
    #40048973
teCa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
Текущая транзакция не может быть зафиксирована и не может поддерживать операции, производящие запись в файл журнала. Выполните откат транзакции.

Всем привет. Объясните, что это за ошибка и как с ней бороться.
Ошибка возникает при таком запросе:

Код: sql
1.
2.
3.
4.
5.
6.
7.
 insert into tbl_buh_status_history
  (report_id, report_state, comment, "SF_NUM")
 select
  h.report_id, h.report_state, h.comment, r.SF_NUM
   from
    (select @report_id report_id, @report_state report_state, @comment comment) h
     left outer join "tbl_buh_bn_reports" r (nolock) on h.report_id = r."Report_ID";



Подскажите, какую транзакцию просит откатить сервер и как её обнаружить?
...
Рейтинг: 0 / 0
26.02.2021, 14:26
    #40048976
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
(nolock) грязное чтение не используйте
...
Рейтинг: 0 / 0
26.02.2021, 14:48
    #40048988
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
teCa,

Если отчет был удалён во время выполнения до фиксации, то получите эту ошибку из-за (nolock), грязного чтения.
...
Рейтинг: 0 / 0
26.02.2021, 14:48
    #40048989
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
Konst_One
(nolock) грязное чтение не используйте
nolock тут ни при чем.

teCaПодскажите, какую транзакцию просит откатить сервер и как её обнаружить?Текущкю транзакцию, в которой выполняется этот запрос.
...
Рейтинг: 0 / 0
26.02.2021, 14:51
    #40048991
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
Владислав Колосов
teCa,

Если отчет был удалён во время выполнения до фиксации, то получите эту ошибку из-за (nolock), грязного чтения.
Нет. Это про uncommitable transactions. Прочитать можно вот тут, например: https://docs.microsoft.com/ru-ru/sql/t-sql/functions/xact-state-transact-sql?view=sql-server-ver15
...
Рейтинг: 0 / 0
26.02.2021, 15:02
    #40049002
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
Гавриленко Сергей Алексеевич,

насколько мне известно, uncommitable возникает при необработанном исключении при xact_abort off. В случае неявной транзакции возникает, как правило, автоматический откат текущей при любом xact_abort, в случае явной указанная ошибка возникает при попытке фиксации.

У ТС ошибка возникает не при попытке фиксации явной транзакции, то есть ошибка возникает внутри самой инструкции Insert. Вопрос - по какой причине?

Возможен и такой вариант - при открытой явно транзакции произошло ранее необработанное исключение, которое препятствует выполнению insert into. То есть виновата не эта команда а та, которая была выполнена до неё. В таком случае проблема выхвачена из контекста.
...
Рейтинг: 0 / 0
26.02.2021, 15:20
    #40049018
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
Владислав Колосов,

Может и эта команда виновата. Может триггер. Но точно не nolock сам по себе.
...
Рейтинг: 0 / 0
09.03.2021, 14:59
    #40051937
teCa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
Подобная ситуация в другом месте встретилась:
Есть запрос, который выполняет внутри транзакции хранимку, эта хранимка выполняет запрос используя линкованный сервер, а в рзеультате возвращает 0 или 1.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare 
 @axaptaRes int = -1,
 @BillId int = 28030;
begin try
 begin tran
  exec @axaptaRes = "proc_SendBnBillsInfoToBK" @BillId = @BillId;
  if @axaptaRes != 0
   rollback;
  else 
   commit;
end try
begin catch
 rollback;
 throw;
end catch




В результате выполнения, получаю ошибку:
автор
авторСообщение 3930, уровень 16, состояние 1, строка 10
Текущая транзакция не может быть зафиксирована и не может поддерживать операции, производящие запись в файл журнала. Выполните откат транзакции.


Разработчики уверяют, что данная ошибка стала встречаться пару недель назад, в коде, который не редактировался уже давно.

Посоветуйте, как диагностировать источник проблемы?
...
Рейтинг: 0 / 0
09.03.2021, 15:01
    #40051939
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
teCa
Посоветуйте, как диагностировать источник проблемы?
Запускать профайлер, воспроизводить ситуацию и смотреть, где и какая возникает ошибка.
...
Рейтинг: 0 / 0
09.03.2021, 15:16
    #40051950
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
XE-сессию повесьте на ошибки и уж точно выловится вам нужное.
у нас вон было такое,
так сама-то ошибка была при конвертировании:
Код: coco
1.
Conversion failed when converting the nvarchar value ' color' to data type int.


поди в ваш "SF_NUM" пытаетесь записать значение, не конвертируемое в число.
в свой proc_SendBnBillsInfoToBK тоже добавьте try ..catch со throw внутри, чтобы плевал ошибку наверх
...
Рейтинг: 0 / 0
27.04.2021, 14:57
    #40066381
teCa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
Yasha123
XE-сессию повесьте на ошибки и уж точно выловится вам нужное.
у нас вон было такое,
так сама-то ошибка была при конвертировании:
Код: coco
1.
Conversion failed when converting the nvarchar value ' color' to data type int.


поди в ваш "SF_NUM" пытаетесь записать значение, не конвертируемое в число.
в свой proc_SendBnBillsInfoToBK тоже добавьте try ..catch со throw внутри, чтобы плевал ошибку наверх


Можете подсказать, как настроить XE сессию с нужными параметрами, что-бы отловить подобные ошибки?
...
Рейтинг: 0 / 0
27.04.2021, 19:09
    #40066473
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
teCa,

Связанные сервера есть в транзакции?
А на "той стороне", скажем, триггер, который смотрит обратно на исходный сервер?
...
Рейтинг: 0 / 0
27.04.2021, 19:15
    #40066475
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
вот пример моей, пишу сюда только sqlserver.error_reported
переделайте под себя:

Код: sql
1.
2.
ADD EVENT sqlserver.error_reported(   ACTION(sqlserver.client_app_name,sqlserver.database_id,sqlserver.plan_handle,sqlserver.server_principal_name,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_frame,sqlserver.username)
    WHERE ([error_number]<>(5701) AND [error_number]<>(17830) AND [severity]>(14) AND NOT [client_app_name] like '%SQL Server Management Studio%' AND [database_id]<=(6)))



у меня фильтры на severity, потому что 14 это ошибки прав,
а 13 наши кастомные по договоренности для определенных сп,
5701 это Changed database context to '%.*ls'. и мне это не надо,
17830 тоже спам, Network error code 0x%x occurred while establishing a connection
AND NOT [client_app_name] like '%SQL Server Management Studio%' чтобы не ловить от юзеров ССМС
[database_id]<=(6) потому что тут системные базы и 2 наши основные, а что с database_id > 6 это идет в другой трэйс, не наше добро
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Текущая транзакция не может быть зафиксирована и не может поддерживать операции.. / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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