Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Странный баг при left outer join (v 12.1.0.2.0) / 16 сообщений из 16, страница 1 из 1
29.09.2016, 22:15
    #39318195
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
ДВС !

Заранее прошу не считать бредом сумасшедшего :)

ситуация:
главная таблица содержит кроме прочих полей два разных ID из одной таблицы-справочника.
полностью приводить не буду, просто для понимания:

справочник:

dct_t(
dct_id number,
dct_name varchar2(100)
)

главная:

main_t(
m_id number,
m_name varchar2(100),
dct_id_1 number,
dct_id_2 number
)

запрос типа такого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    insert into report_table (  m_id,  m_name,  dct_id_1,  dct_id_2,  name_1 , name_2 )
    select     
              m.m_id, 
              m.m_name, 
              m.dct_id_1, 
              m.dct_id_2,   
              d1.dct_name  name_1,   
              d2.dct_name  name_2
    from
          main_t  m,
          dct_t    d1,
          dct_t    d2
   where 
                m.dct_id_1 = d1.dct_id(+)
          and m.dct_id_2 = d2.dct_id(+)
   ;



Естественно, все несколько сложнее
- полей больше и доп. условий достаточно,
- таблиц других, которые по left outer join присоединяются больше(но они дважды не используются при присоединении)

Чаще всего запрос срабатывает правильно :)
Однако, иногда значения name_1 и name_2 - строго наоборот (меняются местами !) во всем результате ... :)
Причем dct_id_1 и dct_id_2 - выдаются в требуемых позициях правильно (не удивительно - берутся из главной).

т.е. вместо name_1 name_2 я получаю в результате name_2 name_1

Первой мыслью было, что кто-то меняет справочник :) . Полный аудит любых изменений данных в справочнике показал, что никто не изменяет.

логирование самих запросов (процедура, динамический sql) доказывает, что исполняется один и тот же запрос.
дублей процедуры с другим набором параметров нет. Она одна. исполняется в JOB.

повторить неправильный результат простым многократным исполнением запроса не удается.
если запустить тот же JOB, то скорее всего будет правильный результат.

Никто с подобным не сталкивался ?
Пока отключили распараллеливание при исполнении и ждем повторения...
...
Рейтинг: 0 / 0
30.09.2016, 10:37
    #39318389
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
Igor-65,

есть подозрение, что изобретая запрос типа такого, вы полностью замаскировали причину чудес
...
Рейтинг: 0 / 0
30.09.2016, 12:32
    #39318538
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
orawish,
допускаю, что замаскировано ...

более подробно:

система отчетов по трафику.

отчет формируется запросом:
заданы бинд-переменные
:l_Date_From :l_Date_To
все остальные переменные = null.
При динамическом формировании запроса добавляется условие AND (PHONEA LIKE '%111111111%' ESCAPE '\')

В результате иногда меняются местами данные в полях ORIGINATOR, TERMINATOR.

т.е. в двух отчетах с одним и тем же запросом:
IDCDR (уникальный ID CDR-а) одинаковый но значения ORIGINATOR, TERMINATOR строго "наоборот" ...
при этом
запись CDR-а так же гарантированно не меняется с момента ее insert-a.
справочник DIMTRANKGROUPS так же не меняется.

Запрос из вьюхи STAT_DETAIL_V (формирование данных отчета. В обоих случаях (правильно/неправильно)текст запроса один и тот же. лог подтверждает):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
INSERT INTO STAT.RPT_R_DETAIL_CDR ( 
       REPORT_ID, ANSTIME, I_TRUNK_GROUP_IN, I_TRUNK_GROUP_OUT, CONVERSATIONTIME, IDCDR, SOFTX, GATE, 
       CALLER_CATEG, INTELLI_TYPE, 
       PH_A_NATURE, PHONEA, PH_B_NATURE, PHONEB, PHONEDIAL, 
       MGMN_SIGN, ORIGINATOR, TERMINATOR, 
       CODE_TERM_HUAWEI, NAME_TERM_HUAWEI, NAMETERMREASON, CODE_TERM_Q, NAME_TERM_Q, 
       REGION_NAME, CODEPREFIXMIN, CODEPREFIXMAX, 
       PDD, SERVICE_TYPE, ADD_SERVICE, 
       PH_ORIG_NATURE, PHONEORIG, PH_REDIR_NATURE, PHONEREDIR, PH_CONN_NATURE, CONNECTED_NUMBER) 

SELECT /*+ parallel(6) */        :p_Report_Id,         ANSTIME,                  I_TRUNK_GROUP_IN,         I_TRUNK_GROUP_OUT,        CONVERSATIONTIME,         IDCDR,                    SOFTX,                    GATE,                     CALLER_CATEG,             INTELLI_TYPE,             PH_A_NATURE,              PHONEA,                   PH_B_NATURE,              PHONEB,                   PHONEDIAL,                MGMN_SIGN,                ORIGINATOR,               TERMINATOR,               CODE_TERM_HUAWEI,         NAME_TERM_HUAWEI,         NAMETERMREASON,           CODE_TERM_Q,              NAME_TERM_Q,              REGION_NAME,              CODEPREFIXMIN,            CODEPREFIXMAX,            PDD,                      SERVICE_TYPE,             ADD_SERVICE,              PH_ORIG_NATURE,           PHONEORIG,                PH_REDIR_NATURE,          PHONEREDIR,               PH_CONN_NATURE,           CONNECTED_NUMBER  
 FROM STAT_DETAIL_V v 
WHERE v.anstime BETWEEN :l_Date_From AND :l_Date_To 
  AND (v.conversationtime >= :l_Dur_Min OR :l_Dur_Min IS NULL) 
  AND (v.conversationtime <= :l_Dur_Max OR :l_Dur_Max IS NULL) 
  AND (v.pdd >= :l_PDD_Min OR :l_PDD_Min IS NULL) 
  AND (v.pdd <= :l_PDD_Max OR :l_PDD_Max IS NULL)
  AND (v.idnumbernaturea <= :l_Norm_A  OR :l_Norm_A IS NULL)
  AND (v.idnumbernatureb <= :l_Norm_B  OR :l_Norm_B IS NULL)
  AND (v.idnumbernatureorig <= :l_Norm_Orig  OR :l_Norm_Orig IS NULL)
  AND (v.idnumbernatureredir <= :l_Norm_Redir  OR :l_Norm_Redir IS NULL)
  AND (v.idnumbernatureconnected <= :l_Norm_Conn  OR :l_Norm_Conn IS NULL)
 AND (PHONEA LIKE '%111111111%' ESCAPE '\')




сама вьюха STAT_DETAIL_V:
Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
CREATE OR REPLACE FORCE VIEW STAT_DETAIL_V
(
   IDCDR,
   IDSWITCH,
   SOFTX,
   GATE,
   CALLER_CATEG,
   INTELLI_TYPE,
   ANSTIME,
   PH_A_NATURE,
   PHONEA,
   PH_B_NATURE,
   PHONEB,
   PHONEDIAL,
   MGMN_SIGN,
   CONVERSATIONTIME,
   ORIGINATOR,
   TERMINATOR,
   CODE_TERM_HUAWEI,
   NAME_TERM_HUAWEI,
   NAMETERMREASON,
   CODE_TERM_Q,
   NAME_TERM_Q,
   REGION_NAME,
   CODEPREFIXMIN,
   CODEPREFIXMAX,
   PDD,
   I_TRUNK_GROUP_IN,
   I_TRUNK_GROUP_OUT,
   SERVICE_TYPE,
   ADD_SERVICE,
   PH_ORIG_NATURE,
   PHONEORIG,
   PH_REDIR_NATURE,
   PHONEREDIR,
   PH_CONN_NATURE,
   CONNECTED_NUMBER,
   IDCALLERCATEGORY,
   IDTGA,
   IDTGB,
   IDTERM,
   IDTERMREASON,
   IDBEARERSERVICE,
   IDSUPSERVTYPE,
   IDNUMBERNATUREA,
   IDNUMBERNATUREB,
   IDNUMBERNATUREORIG,
   IDNUMBERNATUREREDIR,
   IDNUMBERNATURECONNECTED,
   IDDIRECTION,
   IDGATE
)
AS
   SELECT f.idcdr,
          f.idswitch,
          TO_CHAR (ds.codeswitch) || ' ' || ds.nameswitch SoftX,
          TO_CHAR (dsg.codeswitch) || ' ' || dsg.nameswitch Gate,
          dc.namecallercategory Caller_Categ,
          dis.nameiservice Intelli_Type,  
          f.anstime,
          f.ph_a_nature,
          f.phonea,
          f.ph_b_nature,
          f.phoneb,
          f.phonedial,
          f.isintername mgmn_sign,
          conversationtime,
          dtga.nametg originator,
          dtgb.nametg terminator,
          dth.codetermh code_term_huawei,
          dth.nametermh name_term_huawei,
          dr.nametermreason,
          dth.codetermq code_term_q,
          dth.nametermq name_term_q,
          NVL (NVL (dd.namedirection, dd.namezone), dd.namecountry) region_name,
          dd.codeprefixmin,
          dd.codeprefixmax,
          f.pdd,
          f.i_trunk_group_in,
          f.i_trunk_group_out,
          db.namebearerservice service_type,  
          dsp.namesupservicetype Add_Service,     
          f.ph_orig_nature,
          f.phoneorig,    
          f.ph_redir_nature,
          f.phoneredir,   
          f.ph_conn_nature,
          f.connected_number,  
          f.idcallercategory,
          f.idtga,
          f.idtgb,
          f.idterm,
          f.idtermreason,
          f.idbearerservice,
          F.idsupservtype,
          f.idnumbernaturea,
          f.idnumbernatureb,
          f.idnumbernatureorig,
          f.idnumbernatureredir,
          f.idnumbernatureconnected,
          f.iddirection,
          f.idgate
     FROM 
          fact_cdr f,
          DIMSWITCHES ds,
          DIMSWITCHES dsg,
          DIMCALLERCATEGORIES dc,
          DIMISERVICES dis,
          DIMSUPSERVICETYPES dsp,
          DIMTRANKGROUPS dtga,
          DIMTRANKGROUPS dtgb,
          DIMTERMINATIONCODES dth,
          DIMTERMINATIONREASONS dr,
          DIMDIRECTIONS dd,
          DIMBEARERSERVICES db
    WHERE     
                 f.idswitch = ds.idswitch(+)
          AND f.idgate = dsg.idswitch(+)
          AND f.idcallercategory = dc.idcallercategory(+)
          AND f.idiservice = dis.idiservice(+)
          AND F.IDSUPSERVTYPE = dsp.IDSUPSERVICETYPE(+)
          AND f.idtga = dtga.idtg(+)
          AND f.idtgb = dtgb.idtg(+)
          AND f.idterm = dth.idterm(+)
          AND f.idtermreason = dr.idtermreason(+)
          AND f.iddirection = dd.iddirection(+)
          AND f.idbearerservice = db.idbearerservice(+)
...
Рейтинг: 0 / 0
30.09.2016, 13:00
    #39318577
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
В догонку

вчера еще изменили: _rowsets_enable=false
был true.

пока ждем повторения.
...
Рейтинг: 0 / 0
30.09.2016, 13:01
    #39318580
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
Igor-65
Код: plsql
1.
SELECT /*+ parallel(6) */


Сталкивались, 12.1.0.2, но немножко в другом контексте - integrated replicat голденгейтовый в режиме insertallrecords иногда путается в полях.
Полагал, что проблема в репликате.
В нашем случае нашли паллиатив - установка параметра, запрещающего репликату пакетные операции.
...
Рейтинг: 0 / 0
30.09.2016, 13:04
    #39318584
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
Из биндов к запросу еще задан, естественно :p_Report_Id
...
Рейтинг: 0 / 0
30.09.2016, 13:28
    #39318606
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
andrey_anonymous,

никаких репликаций нет.
...
Рейтинг: 0 / 0
30.09.2016, 13:37
    #39318624
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
Igor-65никаких репликаций нет.
Я ж говорю - у нас другой контекст.
Но похожее поведение - путались (или смещались) поля, причем очень изредка, запрет пакетных операций помог - уже пару месяцев не стреляет.
Увидел у Вас ins-sel parallel с идентичными симптомами - решил, что, похоже, дело не в GG.
...
Рейтинг: 0 / 0
30.09.2016, 13:47
    #39318633
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
andrey_anonymous,

Я выше писал, что так же выключили /*+ parallel(6) */ и ждем повторения.

Как у Вас был установлен _rowsets_enable до исчезновения проблемы и после ?
...
Рейтинг: 0 / 0
30.09.2016, 13:53
    #39318642
GGовец
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
offtopic:
andrey_anonymous,
авторВ нашем случае нашли паллиатив - установка параметра, запрещающего репликату пакетные операции.
Параметр не подскажете?
...
Рейтинг: 0 / 0
30.09.2016, 14:19
    #39318677
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
Igor-65В догонку

вчера еще изменили: _rowsets_enable=false
был true.

пока ждем повторения.

вполне вероятно - "правильное решение".
неправильный результат на left join - похоже на баг Bug 20960570
советуют отключать hash join или задирать arraysize до самого Марса
Но ваш вариант действий больше других похож на правильный - выключить нежданную красоту.


https://blogs.oracle.com/UPGRADE/entry/switch_off_rowsets_enabled_in
https://blogs.oracle.com/UPGRADE/entry/update_for_switch_off_rowsets
https://jonathanlewis.wordpress.com/2015/11/09/wrong-results/
...
Рейтинг: 0 / 0
30.09.2016, 14:21
    #39318680
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
Igor-65Чаще всего запрос срабатывает правильно :)
Однако, иногда значения name_1 и name_2 - строго наоборот (меняются местами !) во всем результате ... :)У меня был еще более дикий случай - значение строкового поля обрезалось для определенной колонки и некоторого подмножества строк.

Предусловия были следующие
Код: plaintext
1.
2.
Parallel execution
Data must be not in the buffer cache. So without cleaning up the cache it’s not reproduced.

Помогло
Код: plaintext
execute immediate 'alter session set optimizer_features_enable =''10.2.0.4''';

Также не воспроизводилось если убрать из запроса все бинды.
...
Рейтинг: 0 / 0
30.09.2016, 14:22
    #39318681
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
Igor-65В догонку

вчера еще изменили: _rowsets_enable=false
был true.

пока ждем повторения.Чтоб повторить делайте
Код: plaintext
alter session set events 'immediate trace name flush_cache';
...
Рейтинг: 0 / 0
30.09.2016, 14:26
    #39318684
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
booby,

тут еще пишут по поводу доступных патчсетов
https://blogs.oracle.com/UPGRADE/entry/update_for_switch_off_rowsets
...
Рейтинг: 0 / 0
30.09.2016, 14:38
    #39318702
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный баг при left outer join (v 12.1.0.2.0)
dbms_photoshopЧтоб повторить делайте
Код: plaintext
alter session set events 'immediate trace name flush_cache';


Спасибо, я не хочу повторения :). (если я правильно понял совет... :) )
Если повторений в течении недели не будет, то считаем, что пока вылечили.
Ранее хотя бы 1 раз в 3 дня происходило стабильно...
...
Рейтинг: 0 / 0
30.09.2016, 15:34
    #39318764
Странный баг при left outer join (v 12.1.0.2.0)
GGовецПараметр не подскажете?
Код: plaintext
1.
DBOPTIONS INTEGRATEDPARAMS (..., _array_operation N)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Странный баг при left outer join (v 12.1.0.2.0) / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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