Size: a a a

2021 December 09

IG

Ildar Garaev in Oracle RU
источник

IG

Ildar Garaev in Oracle RU
источник

IG

Ildar Garaev in Oracle RU
некоторые статьи для Postgres но там есть общие принцыпы
источник

KL

Kirill Leontev in Oracle RU
в смысле, просто держать открытый курсор и делать фетч следующих N строк?
источник

x

xtender in Oracle RU
Ни одной про оракл
источник

DS

Dmitriy Sergeevich in Oracle RU
даже не знаю как объяснить. Вчера что то произошло с ораклом. Попробуй абстрактно рассказать:
Есть апи на asp net core. У него есть put метод который дергает процедуру на оракле с одним параметром (ид документа).
Этот метод дергается в цикле клиентского приложения (проходя по каждому документу и передавая его ид).
На оракле эта процедура берет по ид, выбирает из базы документ, смотрит на его статус, если он равен к примеру 1, то она выполняет списание средств и обновляет статус на 2. Так вот по логам в 30 секундный период, у сотни документов статус был проставлен 2 раза и списаны средства тоже 2 раза. Причем в одну секунду (для каждого док.).
Т.е. это выглядит примерно так: в одной транзакции мы выбираем статус он равен 1 и тут же как будто параллельно данная процедура выполняется еще раз и делает тоже самое при этом первая еще не завершилась. В итоге получается у каждого док. в одну секунду был проставлен статус 2 и списаны дважды средства.
Приложение работает несколько лет, отлажено все до блеска. т.е. проблема явно в оракле. В этот момент на другой ноде выполнялся инкрементный бэкап
источник

x

xtender in Oracle RU
Да
источник

KL

Kirill Leontev in Oracle RU
ну это далеко не везде применимо
источник

x

xtender in Oracle RU
Если речь про обычный. А ещё есть двухсторонний
источник

x

xtender in Oracle RU
Scrollable cursor
источник

x

xtender in Oracle RU
Увы, это аргументация из разряда "мамой клянусь"
источник

DS

Dmitriy Sergeevich in Oracle RU
т.е. в оракле нет ничего такого что могло бы привести к данной ситуации? рассинхронизация между кластерами, баг, зависла сессия и он ее выполнил заново или еще что то ...
источник

Z

ZhekaPPP in Oracle RU
>Т.е. это выглядит примерно так: в одной транзакции мы выбираем статус он равен 1
просто выбираете или select for update? все дальше делается в рамках одной транзакции?
источник

DS

Dmitriy Sergeevich in Oracle RU
да документ выбирается через select for update, но в данной процедуре выполняется еще куча всего связанного с данным документом т.е. обновляются другие таблички
источник

x

xtender in Oracle RU
не надо гадать. Берете в руки логмайнер и разбираете все.
источник

Z

ZhekaPPP in Oracle RU
если все корректно написано, то дважды не должно отрабатывать
источник

DS

Dmitriy Sergeevich in Oracle RU
за лет 5 это первый косяк
источник

KL

Kirill Leontev in Oracle RU
даже если и могло, всегда сначала ищется баг в прикладе. оракл это априори более надежная система
источник

IG

Ildar Garaev in Oracle RU
Думаю что проблема в софте а не в БД.
источник

DS

Dmitriy Sergeevich in Oracle RU
Я бы так и думал, если бы не одно НО. Статус документа проставился два раза в одно и тоже время, т.е. не так что процедура отработала на коллекцию доков один раз а потом еще раз. А оно отрабатывало по два раза на каждый док. И самое странное что в этой пачке док. не все задвоились, а только примерно 90%
источник