|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
andrey_anonymous PetroNotC Sharp Вот вы также гасите как чел выше Да. Выкидываем на клиента и там гасим. Потому что это правильно и не создает ненужных проблем. Согласно приведенной Вами же цитате этот же поход позволил ТС решить свои проблемы с "перманентной 06508". 6508, Карл, а не 4068. Тему 6508 в этом топике поднимал Leonid Kudryavtsev и она на самом деле лежит в стороне от 4068, не являясь, таким образом, предметом обсуждения. Он отказался его гасить на своем уровне. С чего ты решил что в java порядки другие? Тут тоже try { } catch (Exception e) { Null Это плохой тон. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 21:55 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
andrey_anonymous PetroNotC Sharp В архитектуре сравнивают минимум два подхода. Так я и сравнил. - с технической точки зрения - с точки зрения эксплуатационных расходов - с точки зрения затрат на разработку/внедрение/сопровождение - с точки зрения удовлетворения требованиям непрерывности сервиса - с точки зрения расходов на необходимую инфраструктуру (это когда Вы предлагали вторую БД поставить) В вот что именно сравнивали Вы - осталось загадочной загадкой. Дано: условие задачи.... Вариант решенияА Вариант решенияБ Надо рассмотреть два варианта с этих всех точек зрения)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2021, 22:18 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
andrey_anonymous И вот теперь скажите мне, Андрей Панфилов, если бы я в ответ на Ваше " странное желание писать сомнительный код " отвечал Вам так же, как Вы мне - удостоился бы я 12082346 или нет, как полагаете? Спасибо за внимание. Андрей, вы в том топике дали профессиональный ответ, я вас отблагодарил, а здесь вы по какой-то причине всеми силами пытаетесь увернуться от точно такого же профессионального ответа. Конкретно в этом форуме у участников кругозор несколько шире, ввиду того что постоянно приходится работать с разными системами, поэтому юродствуете вы совершенно зря. Вот давайте разберем ситуацию с ошибкой более подробно: вы разрабатываете (или поддерживаете, не суть важно) некую систему, где было принято решение бизнес-логику зашить в хранимые процедуры (насколько это решение правильное и какие были мотивы мы не обсуждаем), т.е. вы (БД) клиенту (жава-приложению) помимо (или вместо) стандартных CRUD-операций предоставляете еще другой API в виде неких RPC-вызовов к БД, в какой-то момент времени происходит осознание того, что обновление реализации предоставляемого API для клиента происходит не так прозрачно как хотелось бы, вы идете к вендору (ораклу) и узнаете, что существует потенциальная возможность избежать проблем, однако стоимость "правильного решения" слишком высока (трудозатраты, злой заказчик, который хочет вчера, возможно стоимость лицензий и пр.), ну и в итоге вы оказываетесь на этом форуме с вопросом какбы в жаве побыстрому нагородить костылей... Вот есть ошибка: Код: plaintext 1.
что она по своей сути означает? Означает она следующее: реализация API, предоставляемого клиенту, поменялась и вероятнее всего, если повторно выполнить RPC то ошибки уже не будет, но вот вопрос: а насколько валидны вычисления, сделанные в текущей транзакции до возникновения этой ошибки? И здесь беда в том, что никто не знает, т.е.: - БД при обновлении хранимых процедур просто пометила, что у них реализация поменялась, и выкидывает ошибку - драйвер БД не уполномочен принимать решение о повторе RPC и поэтому делегирует решение клиенту (жава-приложению) и по хорошему здесь следует откатить транзакцию и повторить все вычисления заново (это ровно то, что все остальные фреймворки и делают, видимо за исключением MyBatis), однако тут возникаете вы с крамольной идеей, что можно перехватить вызов конкретного RPC и в случае довольно общей ошибки повторить, ну извините, раз этот RPC ваш и обладает свойством идемпотентности, а жава-приложение уже успело получить соединение, то и реализуйте повтор операций у себя, а не тащите его на клиента, т.е. не стоит размазывать крайне сомнительные решения по всему проекту - держите их в одном месте. Теперь давайте разберем то, чем вы гордитесь... andrey_anonymous стоило разово 2.5 часа времени разработчика + доставило мне несколько минут искреннего смеха в процессе чтения Ваших комментариев andrey_anonymous Код: java 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.
- во-первых, два с половиной часа для более-менее серьезной системы - это как-то мало, я бы только недели 2 писал бы интеграционные тесты - во-вторых, утверждение сделанное в приведенном коде примерно звучит так (здесь я понимаю что у вас с пониманием написанного возникают определенные затруднения): если второе исключение в цепочке исключений является исключением, связанным с обращением к БД, и в тексте этого исключения есть "ORA-04068", то повторить RPC. Проблема здесь в том, что подобный подход к решению проблемы разваливается при малейших изменениях как со стороны жава-кода, так и со стороны изменений в хранимых процедурах, например завтра в MyBatis решили добавить логирование вызовов, и исключение стало в цепочке уже не вторым, а третьим, или поменяли вы код на PL/SQL и ORA-04068 стало прилетать не от проблемной процедуры, а от совсем другой, или самой первой ошибкой была не ORA-04068, а какая-то другая. Вообщем код на самом деле так себе, а учитывая вот это: andrey_anonymous На ближайшем code review "гений", сотворивший эту пакость, получит по шапке. Я как-то удивлен, что для PL/SQL у вас ревью кода есть, а для жавы - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 05:26 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Андрей Панфилов, автор- БД при обновлении хранимых процедур просто пометила, что у них реализация поменялась, и выкидывает ошибку - драйвер БД не уполномочен принимать решение о повторе RPC и поэтому делегирует решение клиенту (жава-приложению) +1 Кроме того, насколько понял, оракле выбрасывает эту ошибку в самом конце proc call при передаче управления клиенту. На этом уровне у него нет полной информации и затрагиваются совершенно другие пакеты в сессии. "не надо править за два часа. Надо за две недели" - вполне хороший слоган) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 07:07 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
ТС, вы профи в бд. Почему даже не для себя а для нас тут, замалчиваете подробности вашей системы. Вашего контекста. - какой размер пула? - сколько активных сессий всего, так как только из за них ошибка? Только тех сессий которые тронули меняемый пакет. - почему не пошли по пути как тут авторА еще в большей части пакетов вообще удалось отказаться от глобальных переменных. В итоге теперь накатывание такого тела пакета вообще не приводит ни к каким последствиям типа ORA-04068. 22321827 ? То что пакеты не особо нужны при трехзвенке мы опустим. Не отвлекаемся. Вы в гостях. Будьте вежливы и делитесь информацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 07:19 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Как данные подробности влияют на вопрос затронутый в Subj ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 09:34 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Андрей Панфилов а насколько валидны вычисления, сделанные в текущей транзакции до возникновения этой ошибки? andrey_anonymous PetroNotC Sharp Вы гарантируете что банковская транзакция не сломается? Гарантирую. Сейчас вообще в моде девопс и накат изменений без перерыва сервиса. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 09:41 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev PetroNotC Sharp Как данные подробности влияют на вопрос затронутый в Subj ? Не? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 09:45 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Разве пул нельзя переинициализировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 09:48 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Повторюсь, на мой взгляд, у пробы минимум 3-и уровня и соответственно, на каждом из этих уровней проблема может решаться. 1. Организация/методика наката патчей. Если DevOps решил менять пакеты при работающем приложении и считает, что это безопасно - пусть и добивается решения проблемы на уровне своих скриптов. (средствами Oracle, тормозит app часть и сбрасывает пулы в ноль и так далее) 2. Не очень корректная работа с пулом При получении/отдачи соединения в пул, в соединение остаются чужие данные (в пакетах). По хорошему, их нужно было бы после себя очищаться. (хотя бы с точки зрения безопасности/конфиденциальности данных) 3. Программное решение. Обработка таких ситуаций в коде Как решать на конкретном проекте - наверное с проекта виднее. Решение попахивает костыльностью, но это и так всем понятно. Но не видел ни одного реального проекта, собранного без использования костылей и палок. Если на Вашем проекте Вы такого не знаете, значит, Вы плохо знаете свой проект ))) IMHO Как пример палок под серверными: Один заказчик после покупки 100500 техники, заказал аудит серверной. Ответ был, что вес очень большой, пол может не выдержать, здание на такую нагрузку не рассчитано, нужно укрепить пол (поставить снизу колонну, пол/потолок подпереть). Объявили тендер. Подрядчик установил колонну. Колонная хорошая - прочная. Только поставили ее.... (тут играют фанвара)... прямо поверх фальш-пола (лопата) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:01 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Согласен. Также согласен что везде есть костыли. Я например, не стесняюсь костыль назвать костылем если просят)) Вариант с погасить и "постучаться дважды" он тупой и неинтересный. Это индусский костыль. Мне лично интересны два вопроса - прав ли чел выше что можно решить без java - "как вам Илон Маск" решение с обнулением пула в связи с техническими работами. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:13 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
И по последней части, т.е. собственно повтор операции. Так же уже сказали, что опять таки возможно несколько уровней 1. На уровне транзакций на app сервере. Например, если это REST Full (без состояния) и запросы это HTTP-вызов, то просто повторяем вызов сервиса. (возможно даже ngnx этому обучить можно, на одном из пред. проекте переповторами занимался ровно балансировщих нагрузки) 2. На уровне транзакций СУБД Откатываем всю транзакцию, повторяем 3. На уровне statement СУБД ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:14 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
PetroNotC Sharp ... - "как вам Илон Маск" решение с обнулением пула в связи с техническими работами. Тут же не просто обнуление ПОСЛЕ технических работ. Как я понимаю, топик стартер хочет что бы не было ошибок ВО ВРЕМЯ технических работ. Т.ч. обнуление после не поможет. Я бы сказал, что по хорошему: нужно бить систему на мелкие модули (что бы при накатах небольших изменений не останавливать всю инфраструктуру), приостанавливать обновляемый модуль, быстро проводить накат изменений, возобновлять работу приостановленного модуля. Но "сейчас вообще в моде девопс и накат изменений без перерыва сервиса." ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:19 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, >Тут же не просто обнуление ПОСЛЕ технических работ. Как я понимаю, топик стартер хочет что бы не было ошибок ВО ВРЕМЯ технических работ. Т.ч. обнуление после не поможет. = -1 Обнуление не после работ. Выше давал юз кейс. Маша зашла и тронула пакет. Он оказался в кеше а коннект в пуле живой до вечера. Вечером ваня тронул пакет а он не бъет с тем из кеша. Получил райзе. Дак вот админ в обед накатывая изменения должен рестартануть пул. Всё! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:27 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Если ваше "во время" это время наката скриптов. То на боевой системе так делать без зеркала вообще дикость. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:31 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Второй вариант. Мне кажется есть такая галка в пуле. Перед накатом скриптов выставить время жизни в пуле соединений равное минуте. Потом ждать пока длинный коннект не освободится)). Все живут на минутных соединениях. Потом вернуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:45 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Если ваше "во время" это время наката скриптов. Ну по крайне мере я так понял топик стартера. "сейчас вообще в моде девопс и накат изменений без перерыва сервиса." Вашей категоричности, что дикость - не разделяю ))) но да, несколько странное и рискованное решение IMHO Пусть остается на совести того, кто такое решение принял. Тут некоторые считают, что за критику архитекторов программисты должны заявления об увольнении писать 22321029 . Т.ч. опасная тема, по опасности приближается к миганию фонариками под подушкой (уголовно наказуемое в РФ деяние). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:49 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
PetroNotC Sharp равное минуте Эту минуту клиенты будут получать ошибку. Т.ч. "сейчас вообще в моде девопс и накат изменений без перерыва сервиса." не получится По хорошему нужно тормозить (pause) службы на время наката. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:52 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Ну и вы говорили про долности вокруг СУБД Есть кроме Elic еще профи в ветке - Ааз АазОба правы, ибо не фиг непредсказуемое навешивать. - Разработчик на своей девелоперской БД (например, очень недавний бэкап промышленной) отладил скрипт. - DBA на тестовой (куда девелоперам доступа нет) тупо запустил скрипт и проверил отсутствие ошибок. Запустил туда админа приложения для проверки функционала - запланировали downtime или ограниченную доступность сервисов. DBA подготовил возможность отката (standby с задержкой наката redo подойтёт). - В момент Ч DBA прогнал проверенный скрипт и пустил админа приложения проверить основной функционал. Если ОК - пущаем в продакшн. Если не Ок, откатываемся на запасные путя и предоставляем начальству удовольствие оттрахать разработчика или администратора приложений (по выбору). Всего Неужели все изменилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:54 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, >сейчас вообще в моде девопс = угу. Профи мельчают просто. Разработчик бд пишет пакеты без состояния и не имеет зеркала. Конечно скушно будет. Писать то что? Пакетировать select в пачку? )) А че мы тут с сервисами мучаемся если организация не может его рестартануть? Микросервис тоже через try гасить будем? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 10:59 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev ... Тут некоторые считают, что за критику архитекторов программисты должны заявления об увольнении писать .... Что за мода передергивать. Код-то кто писать будет, если программистам разрешить заявление об увольнении писать? Вы не передергивайте пожалуйста. А дела обстоят так: Программист должен безусловно жестко наказываться за - любую попытку думать, в том числе: - желание писать или оптимизировать код с любой точки зрения, не описанной в "стандартных правилах" - любую форму борьбы за производительность - любые формы личного "творческого велосипедостроения", выражающиеся, например, в отказе от предписанного использования вмененных библиотек. И не его собачье дело, если архитектор зависимости в проект с полинтернета собирает. Вот и все, а вы ещё собираетесь увольнение разрешить... Наказать выговором с записью в трудовую и лишить премии/надбавки, вот и всё. Копать-то от забора до рассвета кто будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 11:01 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
booby, Полностью не согласен. Все что Вы перечислили, можно описать одной фразой: - Следовать стандартам разработки, принятым на проекте Соответствие кода стандартам разработки (писанным и не писанным) обычно выясняется на коде ревью и последующей meeting'е. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 11:18 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
booby, Это вообще большая тема. Прогер ведь тоже делится на кодировщика и программиста)) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 11:24 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
Остался пустяк. Спрашивать всех вопрошающих их роль на проекте. Я думаю - потеряем всех мемберов тогда ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 11:30 |
|
Mybatis vs Ora-04068
|
|||
---|---|---|---|
#18+
booby Копать-то от забора до рассвета кто будет? Самый эпичные ТЗ на разработку, которые я видел: - Нам в системе не хватает 400 полей, но мы не знаем, какие именно было реализовано !!! программиста взяли на испытательный срок и он боялся написать консультантам отписку предыдущих программистов "мы не против добавить 400 полей, но напишите, какие именно полей не хватает, мы их добавим" - Нам нужна ф-ция массового удаления всех выставленных счетов за год. Пользователи руками (!) выставляют счета на год вперед (!), в конце года их невозможно удалить (разумеется, т.к. периоды закрыты, документы отданы в налоговую). Нужно реализовать массовое удаление. на отписку программистов "объясните, занафига пользователи так делают?" в течении 3-х (!!!) лет, аналитики ответить не сумели. Задача была не реализовано (т.к. гениальные программисты на испытательном сроке уже закончились) P.S. Т.з. приведены почти ДОСЛОВНО. Примерно так и звучали на совещании с участием директоров фирмы. И таки да... первое ТЗ было даже успешно реализовано, всем понравилось и внедрено в продакшен.... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 11:34 |
|
|
start [/forum/topic.php?fid=59&msg=40070244&tid=2120449]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 296ms |
0 / 0 |