|
|
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
martin_bishop Или в Оракле как-то по-другому? Ага :) В Oracle по умолчанию READ COMMITTED SERIALIZABLE нужно выставлять явно (и на то есть причины) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2009, 16:29 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
Коллеги! Я прочитал только 10 страниц этого жуткого холивара, в которых идет речь о том, правильно ли откатывать всю транзакцию в триггере или неверно. В итоге обсуждения (ну не в самом итоге, но странице на 8й:) ), аргументация уважаемого pkarklin свелась к тому, что он не допускает ветвления выполнения кода транзакции в зависимости от выброшенных исключений. То есть, транзакция должна представлять из себя: Код: plaintext 1. 2. 3. 4. 5. 6. 7. а не Код: plaintext 1. 2. 3. 4. 5. 6. 7. Я несколько страниц недоумевал, чем же так не угодила pkarklin обработка исключений. И тут меня осенило! В MSSQL Server же не такого понятия как TRY-CATCH или BEGIN-EXCEPTION-END. Это же все объясняет! Нецелесообразно каждый раз проверять IF @@ERROR, ведь действительно проще проверить целостность явно. Прошу прощения, не стал дочитывать и решил запостить это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2009, 23:24 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
dbdev___И тут меня осенило! В MSSQL Server же не такого понятия как TRY-CATCH или BEGIN-EXCEPTION-END. Это же все объясняет! Нецелесообразно каждый раз проверять IF @@ERROR, ведь действительно проще проверить целостность явно. Бред, если честно. как в части try-catch, так и в частях IF @@ERROR и явных проверок. И, как следствие - бредовый выводу. Извини, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 00:18 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
locky, Сорри, плохо изложил, до 2005-го MSSQL TRY-CATCH в T-SQL не было как такового. Была проверка IF @error и все. Я так понимаю, что многие T-SQL программисты работали с SQL Server начиная с 7/2000, и некоторые привычки остались еще со времен старых версий, такие например, как явная проверка целостности (не вставить случайно существующее значение туда где PK/UK). Ну не будешь же if @error после каждой вставки проверять? Я вот что подразумевал. Ладно, брежу уже ночью... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 02:04 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
dbdev___locky, Сорри, плохо изложил, до 2005-го MSSQL TRY-CATCH в T-SQL не было как такового. Была проверка IF @error и все. Я так понимаю, что многие T-SQL программисты работали с SQL Server начиная с 7/2000, и некоторые привычки остались еще со времен старых версий, такие например, как явная проверка целостности (не вставить случайно существующее значение туда где PK/UK). Ну не будешь же if @error после каждой вставки проверять? Я вот что подразумевал. Ладно, брежу уже ночью... Выделенное болдом - бред. Причем туту "явная проверка целостности" к проверке @@error после каждого стейтмента? второе включает, но не ограничивается первым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 09:05 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
Отложил удочки в сторону... dbdev___Я так понимаю, что многие T-SQL программисты работали с SQL Server начиная с 7/2000, Вы не поверите, что некоторые из многих "застали" еще 6.5, и, даже, 4.2. dbdev___не допускает ветвления выполнения кода транзакции в зависимости от выброшенных исключений. Ага, ага... В моем понимании - исключение в транзакции - необходимое и достаточное условие для ее отката. Несмотря на их наличие, сэйвпоинтами ни разу не пользовался. dbdev___И тут меня осенило! И тут Остапа понесло... ((с) Ильф и Петров, 12 стульев) dbdev___как явная проверка целостности (не вставить случайно существующее значение туда где PK/UK). Давайте так...Декларативные ограничения ни в жисть не дадут их нарушить, хотим мы этого или нет. Можно, конечно, придумать сценарий, когда отлов такой ИС м.б. обработан внутри транзакции. НО... Раз мы знаем, как обработать, ТО, значит, мы знаем, КАК должны развиваться события, не приводя к ИС. Поэтому грубо <явная проверка> = <обработка исключительной ситуации>. Если Вам так будет угодно. dbdev___Ну не будешь же if @error после каждой вставки проверять? Кмк, существует два возможных варианта: 1. Монопенисуальная обработка любой ИС - читай откат транзакции; 2. Индивидуальная обработка ИС после каждой инструкции. Не так ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 13:54 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
pkarklinОтложил удочки в сторону... Ага, ага... В моем понимании - исключение в транзакции - необходимое и достаточное условие для ее отката. Несмотря на их наличие, сэйвпоинтами ни разу не пользовался. dbdev___ как явная проверка целостности (не вставить случайно существующее значение туда где PK/UK). Давайте так...Декларативные ограничения ни в жисть не дадут их нарушить, хотим мы этого или нет. Можно, конечно, придумать сценарий, когда отлов такой ИС м.б. обработан внутри транзакции. НО... Раз мы знаем, как обработать, ТО, значит, мы знаем, КАК должны развиваться события, не приводя к ИС. Поэтому грубо <явная проверка> = <обработка исключительной ситуации>. Если Вам так будет угодно. Да я же с этим не спорю. Мне просто почему-то кажется, что именно отсутствие TRY-CATCH в старых версиях mssql диктует этот стиль программирования. Согласны со мной? Работая с теми же pg или oracle у меня рука не поднимается делать лишний запрос. Зачем? Лучше отловить конкретное исключение, и работать быстрее будет (один запрос вместо двух), и нагляднее (про нагляднее - это имхо). pkarklin dbdev___Ну не будешь же if @error после каждой вставки проверять? Кмк, существует два возможных варианта: 1. Монопенисуальная обработка любой ИС - читай откат транзакции; 2. Индивидуальная обработка ИС после каждой инструкции. Не так ли? Ага, все именно так. И возвращаясь к теме Rollback'а в триггере, не обрубаете ли вы напрочь вариант №2 с таким подходом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 14:40 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
pkarklinАга, ага... В моем понимании - исключение в транзакции - необходимое и достаточное условие для ее отката. Несмотря на их наличие, сэйвпоинтами ни разу не пользовался. (пожав плечами) Мне что-то вспомнились программы, считающие исключение необходимым и достаточным условием для того, чтобы упасть. pkarklinРаз мы знаем, как обработать, ТО, значит, мы знаем, КАК должны развиваться события, не приводя к ИС. Поэтому грубо <явная проверка> = <обработка исключительной ситуации>. Нет. Совершенно не так. Допустим, у нас есть обычная учётная система, снабжённая доп. фенечкой: при некоторых операциях (скажем, когда товар готовится к отгрузке) пишется емейл клиенту. Допустим, база даёт ошибку на попытку сделать insert в таблицу отправленных емейлов. Почему - ну, например, кончилась дисковая квота для этой таблицы. Или сбой диска в очередном её блоке. Или ещё что-нибудь "объективно-неожиданное". Что мы имеем в итоге. Как Вы "явно проверите" такие ситуации - хотел бы я посмотреть. По Вашему предложению транзакция откатывается, как и все следующие подобные. Работа фирмы просто встаёт. Тем временем клиент, получивший емейл, приезжает за товаром и получает фигу. И всё из-за мелочи, которую вполне можно было бы просто игнорировать с сообщением администратору "разберись на досуге". dbdev___Ну не будешь же if @error после каждой вставки проверять? Без исключений - другого варианта просто нет. pkarklinКмк, существует два возможных варианта: 1. Монопенисуальная обработка любой ИС - читай откат транзакции; 2. Индивидуальная обработка ИС после каждой инструкции. Подход "чёрное или белое". pkarklinНе так ли? (глядя на окружающий мир) Да-да, конечно, два цвета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 14:54 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
dbdev___Да я же с этим не спорю. Мне просто почему-то кажется, что именно отсутствие TRY-CATCH в старых версиях mssql диктует этот стиль программирования. Согласны со мной? Работая с теми же pg или oracle у меня рука не поднимается делать лишний запрос . Зачем? Лучше отловить конкретное исключение, и работать быстрее будет (один запрос вместо двух), и нагляднее (про нагляднее - это имхо). Еще раз. "Лишний запрос" я буду делать только в том случае, если мне по условиям бизнес-логики необходимо выполнить ту или иную проверку и выдать пользователю вразумительное сообщение об ошибке, вместо Unique Constraint Violation. Во всех остальных случаях я тупо откачу транзакцию в случае нарушение какого-либо ограничения, пусть, декларативного, пусть в следствии ROLLBACK в триггере. dbdev___И возвращаясь к теме Rollback'а в триггере, не обрубаете ли вы напрочь вариант №2 с таким подходом? Вариант № 2 предполагает использование разработчиком, который использует логику (ROLLBACK в триггере), созданную проектировщиком бд. Поэтому, как решил проектировщик (Померла, значит померла ((с) Вий, Гоголь), значит так тому и быть. И чтобы Вы не сказали на более верхнем уровне, уровень целостности бд раставит все точки над Й. По-моему, я это уже в 958 раз повторяю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 15:21 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
pkarklinсуществует два возможных варианта: 1. Монопенисуальная обработка любой ИС - читай откат транзакции; 2. Индивидуальная обработка ИС после каждой инструкции. Не так ли?Не так. Есть ещё структурная обработка исключений. Не в basic'ах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 16:10 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
pkarklinПо-моему, я это уже в 958 раз повторяю...Вы можете повторить это еще столько же раз, но всегда найдется когорта сомневающихся, которая будет талдычить о частичном подтверждении результатов транзакции и суперсложной бизнес-логике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 17:17 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
Senya_LpkarklinПо-моему, я это уже в 958 раз повторяю...Вы можете повторить это еще столько же раз, но всегда найдется когорта сомневающихся, которая будет талдычить о частичном подтверждении результатов транзакции и суперсложной бизнес-логике. Собственно, они будут не настолько неправы. Потому как случаи - бывают разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 17:32 |
|
||
|
Нужна помощь
|
|||
|---|---|---|---|
|
#18+
lockySenya_LpkarklinПо-моему, я это уже в 958 раз повторяю...Вы можете повторить это еще столько же раз, но всегда найдется когорта сомневающихся, которая будет талдычить о частичном подтверждении результатов транзакции и суперсложной бизнес-логике. Собственно, они будут не настолько неправы. Потому как случаи - бывают разные .Бывают. Но с каждым надо предметно разбираться, а не устраивать войны "чиста из принципа". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 20:05 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=36042413&tid=1552930]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 155ms |

| 0 / 0 |
