powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оракл путает местами подзапросы
12 сообщений из 12, страница 1 из 1
Оракл путает местами подзапросы
    #39941135
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень странный баг встретили в оракле. Происходит очень редко - только 3й раз за год ( при том, что процедура вызывается сотни раз в день ). Но суть в том, что оракл ( версии 11.2.0.4 ) путает местами колонки - и значение для одной колонки результата записывает в другую и наоборот. Да, понимаю, выглядит донельзя нелепо и невозможно, поэтому каждый из трех раз разные разработчики расследовали и забрасывали это с комментарием "мистика". Но баг который потенциально корраптит данные, причем возможно и тысячи строк - неприятен, и хотелось бы понять в чем дело.

Более подробно:
Есть запрос который написан вот таким путем схематично:
Код: plsql
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.
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 прекрасно работает.
Например:
Код: plsql
1.
2.
with x as (select sysdate from dual)
select * from utter_bollocks.x;



Что делает там эта метка - не спрашивайте, она там была всегда. Это имя какой-то старой схемы, которое забыли удалить при какой-то миграции. Возможно именно она приводит к тому, что оракл просто .... путает местами подзапросы.
Никто не сталкивался с подобным?
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941138
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,

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

PS. Почему бы не переписать 4 внешних соединения на одно?
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941139
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Valergrad,

В запросе точно литералы, а не бинды? А то у меня похожее было, правда на 12.х если правильно помню
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941140
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
И, да - метка не причём. Это старое известное поведение
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941144
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
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
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941147
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

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


Кобанчег
Valergrad,

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

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


sql_id и plan_hash_value у кривого запуска точно такой же как и у остальных.
Поэтому и запись в dba_hist_sql_plan одна на всех у них...
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941148
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Valergrad,

cursor_sharing?
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941149
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
а вообще, в любом случае, лучше переписать эту хрень, чем упорно заниматься "мистикой"
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941156
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 новых патчсетов уже не будет.
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941158
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941320
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender
а вообще, в любом случае, лучше переписать эту хрень, чем упорно заниматься "мистикой"


Мысль здравая, но вьюха которую нужно переписать принадлежит другой команде.
И нужно будет писать им официальное письмо с объяснением того, почему их вьюха неправильно работает.
И сейчас это письмо будет выглядеть как-то не очень - "я подозреваю что есть какой-то оракл баг, не знаю какой, но на всякий случай потратьте время и перепишите".
...
Рейтинг: 0 / 0
Оракл путает местами подзапросы
    #39941331
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad
И сейчас это письмо будет выглядеть как-то не очень - "я подозреваю что есть какой-то оракл баг, не знаю какой, но на всякий случай потратьте время и перепишите".
Вместо подозрений можно высказать гипотезу. Это уже научный поход.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оракл путает местами подзапросы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]