|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
Adaptive Server Enterprise/15.0.2/EBF Хочется в случае ошибки откатить не всю транзакию, а вложенную транзакцию до savepoint. Однако происходит откат до самого первого коммита. Даже print ничего не выводит. Имеем : Код: 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. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96.
После exec p_TEST Код: plaintext 1. 2. 3. 4. 5. 6. 7.
После Код: plaintext
И print 'Error' не происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2010, 17:01 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
Сорри за повторение. Были тормоза с форумом и я думал, что сообщение не ушло. Просьба модераторам подредактировать моё первое сообщение. Модератор: Что повторилось ? Что редактировать ? Может быть лучше ты повторишь пост в нормальном виде, а этот удалим ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2010, 17:31 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
JenyaD, I don't think you can catch that error at all, Likewise divide-by-zero. Likewise arithmetic overflow, but at least these can be constrained with SET ARITHABORT ... and SET ARITHIGNORE ... It will abort sp immediately, then implicit rollback I think -> empty table. Try something else. Regarding begin tran, save tran: no need to have different names for tran and savepoint: I think the best template is (something like below example): Код: 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.
For checking after delete/upd/insert stmt: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
For checking after sp execution: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2010, 07:57 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
Sorry, formatting and color gone ... Модератор: Just whistle ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2010, 07:59 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
Уже ответили на сообщение, удаление приведёт к удалению и ответа тоже увы. Глюк был в том, что я в одном посте продублировал своё сообщение несколько раз. Я сообщение отправлял, а браузер писал ошибку и так по новой пару раз. Модератор: Дублей сообщений я не вижу, но если ты в эту ветку запостишь ещё одно сообщение, которое должно представлять первое сообщение в нормальном виде, я смогу заменить содержимое первого сообщения на содержимое нового, а новое удалю. Спасибо за улучшеный шаблончик. ZhoraI don't think you can catch that error at all, Likewise divide-by-zero. Likewise arithmetic overflow, but at least these can be constrained with SET ARITHABORT ... and SET ARITHIGNORE ... It will abort sp immediately, then implicit rollback I think -> empty table. Try something else. Это поможет, но не во всех случаях. Я пробовал имитировать ошибку и так : Код: plaintext 1. 2. 3. 4. 5. 6.
Тоже откатило всё, а вот вставка в not null column null значения действительно откатилась так как надо. Видать severity level таких ошибок sybase считает настолько серьёзным, что откатывает всё не зависимо от моего анализа ошибок. Код: plaintext
@PREV_STMT_ABORTED - имеется ввиду @tran_state 2 Statement aborted: the previous statement was aborted; no effect on the transaction. Ещё Код: plaintext 1. 2. 3. 4. 5.
Выводит : Код: plaintext 1. 2. 3. 4.
Нужно так : Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2010, 11:54 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
JenyaD Я пробовал имитировать ошибку и так : Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Это как раз тот же случай, что и Женя говорил. Обламывается в ctcommon и процесс выполнения запроса просто убивается вместе с транзакцией. TSQL при этом не получает управление вообще. Попробуй имитировать ошибку нарушениями констрейнтов, вставкой дублирующего ключа или нарушение рула, что-то в этом роде. Ты можешь проверить будет ли эффект, поместив невалидный оператор в один батч с ещё каким-то опреатором типа select 'error detected' , идущим за ним. Если получишь на клиенте 'error detected', то всё ОК, а если нет -- ошибка обламывает весь батч. Кстати странно, что ты изначально напоролся именно на эти самые грабли. Вообще очень плохо, что в ASE до сих пор эти проблемы не устаканили. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2010, 12:23 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
MasterZiv Вообще очень плохо, что в ASE до сих пор эти проблемы не устаканили. Совершенно согласен с Ильей. Даже описания обработки ошибок приличного нет. Когда Я делал стандарты кодирования процедур для своей бывшей маленькой фирмы (собственно самого себя , теперь (в большой) приходится использовать другие стандарты ), то перечитал/браузил массу всякой литературы и в основном использовал книгу (the best one !) http://www.amazon.com/Sybase-SQL-Server-11-Unleashed/dp/0672309092 и 2 (уже почти 3) статьи по MSSQL (!) ( http://www.sommarskog.se/error-handling-I.html ) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2010, 09:18 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
JenyaD Нужно так : Код: plaintext 1.
Ну чтобы понятнее было (извините за длину неохота разбираться, один подбный пример их есть у меня сотни ) Код: 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. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2010, 10:21 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
Zhora, стиль оформления текста вашей ХП чем делаете, руками или через какую-то тулзу прогоняете? Просто так руками форматить наверное быстро надоест. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2010, 16:33 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
Да все ручками и табомб а там копируй да все (да надобы модератору вырезать середину, а то ешо пришьют шпионаж какой да и не по теме там да и @rc в этом примере неудачно ипользуется - обычно я только 0 или 1 - Success, Fail пользовал). Сейчас правда использую (так требуют) - SQLBrowser (Очень оригинальная штука) - там форматирование - одной клавишей (да и в DBARTISAN - тоже), но мне результат не нравится может можно настроть но я чего то не нахожу как мне бы хотелось, к тому же требуют все эти правые "Added, Deleted ..." - убирать, мол SVN пользуем (может оно и правильно, просто я еще с "ассемблерных IBM 360 времен" привык к ясному колоночнму формату и комментариям на каждой строке - правда более осмысленным. Надо бы конечно иметь хорошие template, вроде в PL/SQL Oracle (в новой редакции /настройке/project SQL Develpora by Steven Feuerstein) - есть такое, может и в TSQL MSSQL - но я не в курсе или плохо смотрел) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2010, 18:23 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
Zhora да и не по теме там да и @rc в этом примере неудачно ипользуется - обычно я только 0 или 1 - + стараюсь не писать DML вместе c execami в одной sp ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2010, 19:54 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
Zhora wrote: > Success, Fail пользовал). Сейчас правда использую (так требуют) - > SQLBrowser (Очень оригинальная штука) Он жив ещё ? Сколько стоит ? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2010, 20:06 |
|
Откат вложенных транзакций при ошибке ASE
|
|||
---|---|---|---|
#18+
MasterZiv, Я не знаю. Может это Open Source. See http://www.sqlbrowser.com. Во всяком случае для нашей фирмы вроде бесплатно. Его автор у нас работает ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2010, 22:43 |
|
|
start [/forum/topic.php?fid=55&msg=36893630&tid=2010512]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 315ms |
total: | 459ms |
0 / 0 |