Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Оракл путает местами подзапросы  [new]
Valergrad
Member

Откуда:
Сообщений: 697
Очень странный баг встретили в оракле. Происходит очень редко - только 3й раз за год ( при том, что процедура вызывается сотни раз в день ). Но суть в том, что оракл ( версии 11.2.0.4 ) путает местами колонки - и значение для одной колонки результата записывает в другую и наоборот. Да, понимаю, выглядит донельзя нелепо и невозможно, поэтому каждый из трех раз разные разработчики расследовали и забрасывали это с комментарием "мистика". Но баг который потенциально корраптит данные, причем возможно и тысячи строк - неприятен, и хотелось бы понять в чем дело.

Более подробно:
Есть запрос который написан вот таким путем схематично:
INSERT INTO some_table ( 
   key_attr,
   value_first,
   value_second,
   value_third,
  value_fourth
)
with 
base as (
	SELECT * from some_view1 
),
cst_party_rel AS
(
  SELECT key_attr, code, label_value
    FROM some_view2
   WHERE code                                          IN ( 'LABEL_FIRST'
                                                            , 'LABEL_SECOND'
                                                            , 'LABEL_THIRD'
                                                            , 'LABEL_FOURTH'
                                                          )
)
SELECT base.key_attr, 
	cst_first.label_value      as value_first,
	cst_second.label_value     as value_second,
	cst_third.label_value      as value_third,
	cst_fourth.label_value     as value_fourth
FROM     some_trash.base   
         LEFT OUTER JOIN
         some_trash.cst_party_rel                                    cst_first
         ON (     cst_first.key_attr                               = base.key_attr
              AND cst_first.code                                   = 'LABEL_FIRST'
            )
         LEFT OUTER JOIN
         some_trash.cst_party_rel                                    cst_second
         ON (    cst_second.key_attr                              = base.key_attr
              AND cst_second.code                                  = 'LABEL_SECOND'
            )
         LEFT OUTER JOIN
         some_trash.cst_party_rel                                    cst_third
         ON (      cst_third.key_attr                               = base.key_attr
              AND cst_third.code                                     = 'LABEL_THIRD'
            )
         LEFT OUTER JOIN
         some_trash.cst_party_rel                                    cst_fourth
         ON (   cst_fourth.key_attr                               = base.key_attr
              AND cst_fourth.code                                  = 'LABEL_FOURTH'
            )


Так вот - очень редко ( один раз на тысячи ) происходит то, что оракл вставляет данные которые должны быть, например, во второй колонке - в четвертую, а то, что должно быть в четвертой - во вторую. А иногда первую в третью и наоборот. А иногда и то и то. Абсолютно идиотская ситуация, и непонятно почему. Единственная гипотеза - это дело в метке some_trash перед каждым подзапросом. Это не имя схемы как могло бы показаться - как оказалось ораклу все равно что вы напишете перед именем подзапроса, хоть "dfdsfsdfавыа2121!3".cst_party_rel прекрасно работает.
Например:
with x as (select sysdate from dual)
select * from utter_bollocks.x;


Что делает там эта метка - не спрашивайте, она там была всегда. Это имя какой-то старой схемы, которое забыли удалить при какой-то миграции. Возможно именно она приводит к тому, что оракл просто .... путает местами подзапросы.
Никто не сталкивался с подобным?
25 мар 20, 23:31    [22106014]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 715
Valergrad,

А plan hash value для кривого запуска поменялось?
Есть что-то подозрительное в "Column Projection Information" в плане?

PS. Почему бы не переписать 4 внешних соединения на одно?
26 мар 20, 00:09    [22106020]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
xtender
Member

Откуда: Мск
Сообщений: 5370
Valergrad,

В запросе точно литералы, а не бинды? А то у меня похожее было, правда на 12.х если правильно помню
26 мар 20, 00:29    [22106027]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
xtender
Member

Откуда: Мск
Сообщений: 5370
И, да - метка не причём. Это старое известное поведение

Сообщение было отредактировано: 26 мар 20, 00:36
26 мар 20, 00:29    [22106028]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
xtender
Member

Откуда: Мск
Сообщений: 5370
Valergrad,

Тут я писал об этом: http://orasql.org/2017/11/24/oracle-issues-after-upgrade-to-12-2/
Основные симптомы: оракловый клиент или дблинк с базой 12+ и хоть один бинд с clob, blob или xmltype: оракловый клиент переносил такие бинды в конец.
Был похожий баг:
OCI Application Fails With ORA-01483/ORA-01461 When Inserting VARCHAR2 Field From 12.2 Database Using Database Link To Lower Database Version. (Doc ID 2309285.1)

Нам помогло установить "_qkslvc_extended_bind_sz"=0
26 мар 20, 00:40    [22106034]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
Valergrad
Member

Откуда:
Сообщений: 697
xtender,

ну, у меня нет ни биндов ни дблинков. Так что это вероятно что-то другое.


Кобанчег
Valergrad,

А plan hash value для кривого запуска поменялось?
Есть что-то подозрительное в "Column Projection Information" в плане?

PS. Почему бы не переписать 4 внешних соединения на одно?


sql_id и plan_hash_value у кривого запуска точно такой же как и у остальных.
Поэтому и запись в dba_hist_sql_plan одна на всех у них...
26 мар 20, 00:44    [22106041]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
xtender
Member

Откуда: Мск
Сообщений: 5370
Valergrad,

cursor_sharing?
26 мар 20, 00:46    [22106042]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
xtender
Member

Откуда: Мск
Сообщений: 5370
а вообще, в любом случае, лучше переписать эту хрень, чем упорно заниматься "мистикой"
26 мар 20, 00:50    [22106043]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
Alexander Anokhin
Member

Откуда: Хабаровск
Сообщений: 475
Valergrad
Очень странный баг встретили в оракле.
...
суть в том, что оракл ( версии 11.2.0.4 ) путает местами колонки - и значение для одной колонки результата записывает в другую и наоборот.
...
Никто не сталкивался с подобным?


Существует класс дефектов wrong result. Есть документы Things To Consider, где эти баги как-то собраны
для 11.2 - 12.1 точка входа вот (Doc ID 1904820.1). Для 11.2.0.4 это
Things to Consider to Avoid Poor Performance or Wrong Results on 11.2.0.4 (Doc ID 1645862.1)

Но и в этих документах не все баги, вот этих, например, существующих в 11.2.0.4
Bug 23273859 - Wrong result with join predicate pushed and correlated subquery using ANSI syntax (Doc ID 23273859.8)
Bug 22170948 - Wrong results with view merging of view with a select list subquery, and subquery referenced multiple times (Doc ID 22170948.8)
Bug 20233824 - Wrong results from outer joined view having a subquery in the select list (Doc ID 20233824.8)
Bug 18034871 - Wrong results for query with ANSI join (Doc ID 18034871.8)
как, и многих других, там нет.

Для 12.2 есть такой документ
Things to Consider to Avoid Prominent Wrong Result Problems on 12.2.0.1 Proactively (Doc ID 2595291.1)

Чтобы уменьшить шанс наступить wrong result, стоит вовремя накатывать свежие патчсеты. А ещё лучше и версии rdbms свежие. В свежих версиях есть новые баги, но их могут пофиксить и включить фикс в следующий патчсет, тогда как для 11.2.0.4 новых патчсетов уже не будет.
26 мар 20, 02:13    [22106058]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
Alexander Anokhin
Member

Откуда: Хабаровск
Сообщений: 475
Alexander Anokhin
Для 11.2.0.4 это ...

Things to Consider to Avoid Poor Performance or Wrong Results on 11.2.0.4 (Doc ID 1645862.1)
26 мар 20, 02:41    [22106061]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
Valergrad
Member

Откуда:
Сообщений: 697
xtender
а вообще, в любом случае, лучше переписать эту хрень, чем упорно заниматься "мистикой"


Мысль здравая, но вьюха которую нужно переписать принадлежит другой команде.
И нужно будет писать им официальное письмо с объяснением того, почему их вьюха неправильно работает.
И сейчас это письмо будет выглядеть как-то не очень - "я подозреваю что есть какой-то оракл баг, не знаю какой, но на всякий случай потратьте время и перепишите".
26 мар 20, 13:15    [22106282]     Ответить | Цитировать Сообщить модератору
 Re: Оракл путает местами подзапросы  [new]
-2-
Member

Откуда:
Сообщений: 15294
Valergrad
И сейчас это письмо будет выглядеть как-то не очень - "я подозреваю что есть какой-то оракл баг, не знаю какой, но на всякий случай потратьте время и перепишите".
Вместо подозрений можно высказать гипотезу. Это уже научный поход.
26 мар 20, 13:33    [22106293]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить