powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
13 сообщений из 13, страница 1 из 1
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
    #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
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
    #40048976
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(nolock) грязное чтение не используйте
...
Рейтинг: 0 / 0
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
    #40048988
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

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

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

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

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

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

Может и эта команда виновата. Может триггер. Но точно не nolock сам по себе.
...
Рейтинг: 0 / 0
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
    #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
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
    #40051939
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
Посоветуйте, как диагностировать источник проблемы?
Запускать профайлер, воспроизводить ситуацию и смотреть, где и какая возникает ошибка.
...
Рейтинг: 0 / 0
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
    #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
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
    #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
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
    #40066473
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Связанные сервера есть в транзакции?
А на "той стороне", скажем, триггер, который смотрит обратно на исходный сервер?
...
Рейтинг: 0 / 0
Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
    #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
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Текущая транзакция не может быть зафиксирована и не может поддерживать операции..
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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