|
|
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
В хранимой процедуре открывается транзакция, из нее запускаются другие хранимые процедуры. Если запускаемая ХП вернула ошибочный результат, происходит откат транзакции и выход из ХП. Но откат почему-то не происходит. Перед ROLLBACK TRANSACTION и после, функция @@trancount показывает одно и то же количество открытых транзакций. Естественно в результате остаются открытые транзакции и клиента клинет. Программа выдает следующий набор ошибок. В чем может быть проблема? Server: Msg 6401, Level 16, State 1, Procedure JournalServiceNewService, Line 81 Cannot roll back TRA_SERV_NEW. No transaction or savepoint of that name was found. Server: Msg 266, Level 16, State 1, Procedure JournalServiceNewService, Line 87 Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 2. Server: Msg 266, Level 16, State 1, Procedure ManAllocate, Line 65535 Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 2. Server: Msg 266, Level 16, State 1, Procedure ManRegistrate, Line 208 Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 20:16:49 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Где-то в коде ошибка. Вот и все, что известно на текущий момент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2002, 10:38:44 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Всё же написано Cannot roll back TRA_SERV_NEW. No transaction or savepoint of that name was found. Если в процедуре стоит ROLLBACK TRA_SERV_NEW то где-то перед ней должно быть BEGIN TRAN TRA_SERV_NEW Что в данном случае не выполняется по причине наверно кривизны кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2002, 10:51:20 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Я сам бы сказал, что код где-то кривой, но вот он код. Или я чего-то не понимаю. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2002, 15:50:46 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Поменяйте порядок следования Raiserror и Rollback Transaction. Т.е. должно быть примерно так: IF (bla-bla-bla) BEGIN ROLLBACK TRANSACTION TRA_SERV_NEW RAISERROR ('Бла-бла-бла...',16,1) RETURN END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2002, 16:04:44 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
>Поменяйте порядок следования Raiserror и Rollback Transaction Нет, я уже неоднократно убеждался что от порядка следования не зависет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2002, 17:40:02 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
EXEC JournalServiceCharge @UIDJournalService, @UIDPayer, 1, @Discount, @Summ OUT, @UIDSub01, @UIDSub02, @UIDSub03, @UIDSub04, @UIDSub05, @UIDSub06, @UIDSub07, @UIDSub08, @UIDSub09, @UIDSub10 -- Менно этот роллбэк не срабатывает. Можа в JournalServiceCharge какой глюк? Типа там транзакция начинается и при ошибке не откатытавается? @@TRANCOUNT проанализируй ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2002, 17:52:03 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Наименование транзакции придется убрать. Это только для точки сохранения работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2002, 17:52:24 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Может во внутренних процедурах есть вложенные транзакции и там происходит неименованный откат который автоматический откатывает и внешнюю транзакцию, если нет то пусть меня поправят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2002, 17:56:21 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Вопрос по поводу наименований транзакций. Чем отличаются именованные и неименовынные транзакции? Чем это черевато? У меня все транзакции проименованы. Я уже двадцать раз проверил, имена есть везде и ошибки в именах не обнаружил. PS: Я заступорелся с этими транзакциями, уже не знаю что делать. Вообщем все эти процедуры достаточно большие, в той же JournalServiceCharge 600 строк. Может есть какие рекомендации по правильной организации транзакций. У меня есть вложенные транзакции, и избавиться от этого не нарушая логики программы нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2002, 19:21:44 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Попробуй всем открываемым в вызываемых процедурах транзакциям дать разные имена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2002, 19:31:06 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
>Попробуй всем открываемым в вызываемых процедурах транзакциям дать разные имена. У меня для каждой транзакции свое имя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2002, 09:53:05 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Вот это требование BOL вы учли? When nesting transactions, transaction_name must be the name from the outermost BEGIN TRANSACTION statement. т.е. имя в ROLLBACK должно быть именем самой верхней транзакции и ничем другим. Как раз поэтому нет никакого смысла именовать транзакции. Вложенные транзакции в MSSQL - чисто декларативные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2002, 11:17:54 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Create procedure MyProc1 as begin tran MyTran1 select @@version exec MyProc2 commit tran MyTran1 GO Create procedure MyProc2 as begin tran MyTran2 save tran MyTran2 select @@version rollback tran MyTran2 commit tran MyTran2 GO exec MyProc1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2002, 11:37:39 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
В огороде бузина, в Киеве - rommi. Твой пример совсем ни к месту, так как речь не идет о точках сохранения и откате к ним, а идет речь об откате транзакции. А вот в этом-то и должно быть соблюдено то самое требование BOL, которое я процитировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2002, 11:42:04 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
В процедуре А я открываю транзакцию и в ней вызываю процедуру Б, в которой я тоже открываю транзакцию. Затем в процедуре Б я делаю откат транзакции и возвращаюсь в процедуру А, которая получив информацию что процедура Б не отработала до конца тоже в свою очередь делает откат своей транзакции. Если я во всех этих процедурах уберу имя транзакции в ROLLBACK, этот будет работать правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2002, 12:03:44 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Не будет, так как ROLLBACK откатывает все транзакции сразу и на следующем ROLLBACK выскочит ошибка, что попытка откатить неоткрытую транзакцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2002, 12:29:18 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Жаль, придется наверно делать проверки на предмет наличия открытых транзакций. Или как можно поступить, когда головная процедура должна иметь транзакцию, и вызываемая процедура тоже, ибо в другой ситуации она может быть вызвана сама по себе и являться головной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2002, 12:36:48 |
|
||
|
Не могу понять, что за ошибка с транзакцией.
|
|||
|---|---|---|---|
|
#18+
Ты прав придется наверно делать проверки Но если у тебя всегда откатываются все транзакции по ROLLBACK, то можно проверку вынести в отделную просиду и вызывать её вместо ROLLBACK, если лень скопировать три строчки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2002, 13:06:03 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32045000&tid=1820930]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 300ms |

| 0 / 0 |
