
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
25.05.2018, 13:49
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
Использую SDAC 7.3.12. При возникновении ошибки меняется номер транзакции. Это приводит к тому, что данные из предыдущей транзакции исчезают. Код: pascal 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. На скрине из Profiler ниже видно, что после use [qweqasdasd] стартует другая транзакция (191006), у которой TransactionId отличается от той, что я стартовал (190848). Возможно ли изменить такое поведение? Хотелось бы, чтобы весь код выполнялся в рамках одной транзакции (190848), которую я стартовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.05.2018, 13:52
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
Что-то картинка не вставилась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.05.2018, 13:53
|
|||
|---|---|---|---|
|
|||
SDAC Сброс транзакции |
|||
|
#18+
Автокоммит?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.05.2018, 14:29
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
Dimitry Sibiryakov, У соединения AutoCommit выключен. Из опций у con: TMSConnection KeepDesignConnected = false. Всё остальное - по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.05.2018, 14:32
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
Тут скорее такое поведение: при ошибке происходит роллбак всей транзакции, но т.к. дальше идут операции то стартует новая транзакция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.05.2018, 22:56
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
да и не грех проверять InTransaction при коммитах и роллбэках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.05.2018, 22:59
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
ну и как финал, что мешает в msqry2 выполнить и хранимку и сразу вернуть резалтсет? тогда у вас будет нормальный контроль транзакции внутри хранимки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.05.2018, 00:23
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
энди, приведённый пример -- тестовый. На самом деле очень много действий выполняется в рамках одной транзакции. И работа ориентирована на некий флаг - существование записи в определенной таблице. А флаг InTransaction я проверю после ошибки. и xact_abort тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.05.2018, 13:30
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
лучше чтобы транзакция не выполнялась долго, в ее контексте и блокировки и бог его знает что еще происходит. как вариант выполнять запрос не через коннекшн, а через запрос, там тогда можно нормально обработать ошибку и вернуть ее через return, а не райзеррор на клиента как фактически скорее всего срабатывает тут. Попробуйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2018, 12:25
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
Флаг InTransaction у соединения после ошибки - true. Т.е. ориентироваться на этот флаг нельзя. xact_abort тоже не устраивает. Работа с базой происходит через запрос. В рамках транзакции происходит изменение конфигурации системы. Короткую транзакцию (на одно действие) сделать нельзя, т.к. конфигурация системы не может быть частично измененной. При накатывании конфигурации фиксируются ошибки. И если ошибки присутствуют, транзакция откатывается (TMSConnection.Rollback), а список ошибок показывается клиенту для устранения. Конфигурация может накатываться как вызовом процедур, так и вызовом скриптов. И если в вызовах процедур есть return, то при выполнении скриптов return реализовать не получится. Проблема в том, что после ошибки, полученной в ходе выполнения скрипта, где-то под капотом SDAC стартует новая транзакция, а предыдущая откатывается полностью. Поведение, что транзакция полностью откатывается, меня устраивает. Не устраивает, что стартует новая. Я не проверял, но думаю, что если подтвердить транзакцию, то в базе будут только те данные, которые попали в неё в рамках новой транзакции. Возможно, это фича SDAC. Тогда возможно есть какой-то флаг у соединения, который изменяет такое поведение (старт новой транзакции, если предыдущий запрос завершился по ошибке райзеррор). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.05.2018, 20:04
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
попробуй выполнять Код: pascal 1. не через TMSConnection, а через TMSQuery ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 09:21
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
энди, если использовать TMSQuery, а не TMSConnection, то ситуация не меняется, т.к. ошибка в скрипте вызывает raiseerror. И следующий запрос к базе также начинает новую транзакцию. Код: pascal 1. 2. Буду ждать devart. Может быть он прояснит ситуацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 09:54
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
что-то мне подсказывает что возможно транзакцию откатывает прямо на сервере столкнувшись с raiseerror. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 10:05
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
эндичто-то мне подсказывает что возможно транзакцию откатывает прямо на сервере столкнувшись с raiseerror. То, что транзакция откатывается, это нормально. Странно то, что следующим запросом новая транзакция начинается. И номер у неё новый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 12:29
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
goldmi45, так если старая откачена - то как бы всё. её больше нет. она закончилась откатом. ну и, соответственно, при новом запросе новая поднимается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 13:13
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
махаон скорее всего имеет ввиду что не бывает запросов вне контекста транзакции и если старая у тебя завершилась при Raiseerror то новая просто автоматически будет запущена в момент выполнения следующего запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 13:54
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
хмм. Тогда как определить, что началась новая транзакция? Анализировать Exception? Или же есть явный признак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2018, 17:08
|
|||
|---|---|---|---|
SDAC Сброс транзакции |
|||
|
#18+
я имею в виду, что после коммита или роллбэка транзакция больше не существует. это два возможных её логических конца. чем бы и где бы эти действия не вызваны. за SDAC не скажу, но IBX номер текущей транзакции возвращает здесь: TIBTransaction.TransactionID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=58&tablet=1&tid=2040759]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
191ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 538ms |

| 0 / 0 |
