Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / почему не откатывается транзакция? / 20 сообщений из 20, страница 1 из 1
06.06.2019, 17:52
    #39823646
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
Вариант с try catch работает, но я думал что без try catch должен произойти окат из за ошибки.
Или я заблуждаюсь?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create table #T1
(
  C1 int identity(1,1), 
  C2 varchar(10)
)

-- исходное состояние со "старыми данными" которые должны быть обновлены
-- в случае ошибки старые данные должны остаться
truncate table #T1; insert #T1(C2) values('a'),('b') 

begin tran T1
  --это удаление не откатывается при возникновении последующей ошибки
  delete #T1 

  --вызываем ошибку:
  insert #T1(C1, C2) values(1,'c'),(2,'d') --> ошибка 544: Cannot insert explicit value for identity column 

commit

--проверка:
select count(*) from #T1 --> 0 удаление не откатилось
...
Рейтинг: 0 / 0
06.06.2019, 17:54
    #39823649
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
...
Рейтинг: 0 / 0
06.06.2019, 17:58
    #39823653
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
Alexander UsВариант с try catch работает, но я думал что без try catch должен произойти окат из за ошибки.
Или я заблуждаюсь?С try catch тоже не откатывает
Откат происходит, если вы вызвали rollback, либо если установлена опция xact abort
...
Рейтинг: 0 / 0
06.06.2019, 18:01
    #39823655
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
alexeyvgAlexander UsВариант с try catch работает, но я думал что без try catch должен произойти окат из за ошибки.
Или я заблуждаюсь?С try catch тоже не откатывает
Откат происходит, если вы вызвали rollback, либо если установлена опция xact abortЛибо severity у ошибки такое, что отстреливается сессия.
...
Рейтинг: 0 / 0
06.06.2019, 19:05
    #39823694
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
Гавриленко Сергей Алексеевичalexeyvgпропущено...
С try catch тоже не откатывает
Откат происходит, если вы вызвали rollback, либо если установлена опция xact abortЛибо severity у ошибки такое, что отстреливается сессия.А, ну это да, я про нужды автора, про обработку обычных ошибок, которые оставляют транзакцию в обычном состоянии, и можно ещё много-много чего в базе наменять...
...
Рейтинг: 0 / 0
06.06.2019, 19:58
    #39823710
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
Всем спасобо, разобрался благодаря вашим комментам.

Хотя странно, что XACT_ABORT по умолчанию в OFF.
...
Рейтинг: 0 / 0
06.06.2019, 20:40
    #39823731
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
Alexander UsХотя странно, что XACT_ABORT по умолчанию в OFF.
А что странного? Чем ON в данном случае лучше/логичнее чем OFF?
...
Рейтинг: 0 / 0
07.06.2019, 10:24
    #39823888
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
msLexAlexander UsХотя странно, что XACT_ABORT по умолчанию в OFF.
А что странного? Чем ON в данном случае лучше/логичнее чем OFF?Действительно ON по умолчанию смотрелся бы лучше. Есть ошибка - прекратили, откатили. А если нужно другое поведение, то можно и поменять.

Но вот в Sybase так решили в далёких 80-х, а ломать совместимость с предыдущими версиями никто не будет.
...
Рейтинг: 0 / 0
07.06.2019, 13:23
    #39824009
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
alexeyvgЕсть ошибка - прекратили, откатили.
Из-за ошибки в одном запросе откатывать целую транзакцию? Это к PostgreSQL.
...
Рейтинг: 0 / 0
07.06.2019, 14:01
    #39824035
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
Dimitry SibiryakovalexeyvgЕсть ошибка - прекратили, откатили.
Из-за ошибки в одном запросе откатывать целую транзакцию?Да, для поведения по умочанию, когда обработка ошибок не предусмотрена, это очень даже разумно.
...
Рейтинг: 0 / 0
07.06.2019, 14:25
    #39824057
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
alexeyvgmsLexпропущено...

А что странного? Чем ON в данном случае лучше/логичнее чем OFF?Действительно ON по умолчанию смотрелся бы лучше. Есть ошибка - прекратили, откатили. А если нужно другое поведение, то можно и поменять.

Но вот в Sybase так решили в далёких 80-х, а ломать совместимость с предыдущими версиями никто не будет.Я тут как-то повозмущался по этому поводу, - так мне сказали, что в последних версиях сервера это исправили.
Опять обманули? :((
...
Рейтинг: 0 / 0
07.06.2019, 15:01
    #39824087
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
iapтак мне сказали, что в последних версиях сервера это исправили.
Опять обманули? :((Исправили в последних версиях SSMS - появилась соответствующая настройка.
...
Рейтинг: 0 / 0
07.06.2019, 20:21
    #39824307
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
invmiapтак мне сказали, что в последних версиях сервера это исправили.
Опять обманули? :((Исправили в последних версиях SSMS - появилась соответствующая настройка.Имеется в виду, что настройка XACT_ABORT на свежеустановленном SSMS по умолчанию в ON?
В 2016 этого нет, может, позже сделали...

И более важно, какая настройка в созданном коннекте, если этот параметр явно не задан (SSMS же его задаёт явным образом). Для 2019 написано, что "OFF — установка по умолчанию"
...
Рейтинг: 0 / 0
07.06.2019, 21:37
    #39824319
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
alexeyvgИмеется в виду, что настройка XACT_ABORT на свежеустановленном SSMS по умолчанию в ON?Нет. Имеется в виду, что можно настроить значение по-умолчанию для SSMS.
...
Рейтинг: 0 / 0
07.06.2019, 23:10
    #39824339
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
invmalexeyvgИмеется в виду, что настройка XACT_ABORT на свежеустановленном SSMS по умолчанию в ON?Нет. Имеется в виду, что можно настроить значение по-умолчанию для SSMS.А, ну это понятно, это же называется "по умолчанию"
Смысл то в том, что начинающему лучше ставить по умолчанию XACT_ABORT, в свежеинсталлированном сиквеле, а потом уже пусть делает, как ему нужно, когда разберётся. Это же логично.
...
Рейтинг: 0 / 0
07.06.2019, 23:11
    #39824340
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
alexeyvgэто же называется "по умолчанию"это же не называется
...
Рейтинг: 0 / 0
07.06.2019, 23:13
    #39824341
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
invmalexeyvgИмеется в виду, что настройка XACT_ABORT на свежеустановленном SSMS по умолчанию в ON?Нет. Имеется в виду, что можно настроить значение по-умолчанию для SSMS.Вот, ТС, с сиквелом работает с 2005 года, и для него откровение.
Для него (и миллиона других) установка XACT_ABORT ON до тех пор, пока явно не послал команду XACT_ABORT OFF, было бы более правильным.
...
Рейтинг: 0 / 0
08.06.2019, 00:16
    #39824350
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
alexeyvgДля него (и миллиона других) установка XACT_ABORT ON до тех пор, пока явно не послал команду XACT_ABORT OFF, было бы более правильным.

Согласен.
К тому же это более подходило бы под определение транзакции (всё или ничего).
XACT_ABORT ON может и иногда нужная опция, но это уже наворот для знатоков.
Но имеем что имеем. Просто надо (было) это знать.

Что касается стандартных установок, самой "интересной" была установка приращения файлов по 1 МБ.
...
Рейтинг: 0 / 0
08.06.2019, 13:42
    #39824418
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
alexeyvgдля поведения по умочанию, когда обработка ошибок не предусмотрена, это очень даже разумно.
В сочетании с автоматическим стартом следующей транзакции на следующем запросе, это посылает лесом единственное полезное свойство транзакции - атомарность. С тем же успехом транзакции можно вообще выкинуть.
...
Рейтинг: 0 / 0
08.06.2019, 19:28
    #39824481
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не откатывается транзакция?
Dimitry Sibiryakovalexeyvgдля поведения по умочанию, когда обработка ошибок не предусмотрена, это очень даже разумно.
В сочетании с автоматическим стартом следующей транзакции на следующем запросе, это посылает лесом единственное полезное свойство транзакции - атомарность. С тем же успехом транзакции можно вообще выкинуть.Когда установлен XACT_ABORT ON, то при возникновении ошибки откатывается весь пакет.
А приложение уходит на обработчик ошибок (по умолчанию - падает)

Конечно, в приложении может быть пустой трай-кетч, и тогда оно будет долбить запросами, корёжа базу. Но это ИМХО менее распространённая ситуация, понятно, что, как в поговорке, сдуру можно и транзакцию сломать.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / почему не откатывается транзакция? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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