powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Забавный баг на Oracle 19: create or replace view .. (...) as
21 сообщений из 21, страница 1 из 1
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066528
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: 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.
-- по ошибке указали неправильный порядок столбцов (b,a) вместо (a,b):
SQL> create or replace view v1(b,a) as select 'a' a,'b' b from dual;

View created.

SQL> select * from v1;

B A
- -
a b

1 row selected.


-- пытаются исправить:
SQL> create or replace view v1(a,b) as select 'a' a,'b' b from dual;

View created.

-- но ничего не меняется:
SQL> select * from v1;

B A
- -
a b

1 row selected.

-- пробуем другой вариант:
SQL> alter view v1 compile;

View altered.


-- все равно ничего не меняется:
SQL> select * from v1;

B A
- -
a b

1 row selected.

-- приходится менять текст запроса:
SQL> create or replace view v1(a,b) as select 'a' a,'b' b from dual/*just to change query text*/;

View created.

-- наконец, все ок:
SQL> select * from v1;

A B
- -
a b

1 row selected.
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066530
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
точно так же и с другими именами стобцов
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> create or replace view v1(a,c) as select 'a' a,'b' b from dual;

View created.

SQL> select * from v1;

A C
- -
a b

1 row selected.

SQL> create or replace view v1(a,b) as select 'a' a,'b' b from dual;

View created.

SQL> select * from v1;

A C
- -
a b

1 row selected.



на 19.9 баг есть, на 18.5 и 11.2 - нет. Остальное не проверял
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066568
most23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov,
вот вам забавно, а я столкнулся с диким глюком - utl_file при попытке создать файл с расширением, содержащим букву "l", т.е. .xml например, эту букву 'l' просто игнорировал, т.е. расширение получалось '.xm' и можете застрелиться. Причем что характерно, воспроизводилось на _некоторых_ environments, т.е. у нас есть например OADEV1, OADEV2...OADEV6, и на 4х из 6ти это воспроизводилось, на остальных - нет. И все эти environments были подняты на одной и той же машине, иначе я бы заподозрил глюк операционки. Oracle 19, на линуксе. Причем я прогнал весь алфавит - глючило только на букве l (ну, строчной L).
Было подтверждено другими девелоперами.
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066598
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sayan Malakshinov
Код: plsql
1.
create or replace view v1(a,b) as select 'a' a,'b' b from dual/*just to change query text*/;


Завабно. А в вариантах
Код: plsql
1.
2.
create or replace view v1 as select 'a' a,'b' b from dual;
create or replace view v1(a,b) as select 'a','b' from dual;


глюк сохраняется?
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066757
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andrey_anonymous
Код: plsql
1.
create or replace view v1 as select 'a' a,'b' b from dual;

да


andrey_anonymous
Код: plsql
1.
create or replace view v1(a,b) as select 'a','b' from dual;

нет, т.к. текст запроса меняется
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066758
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
most23
Sayan Malakshinov,
вот вам забавно, а я столкнулся с диким глюком - utl_file при попытке создать файл с расширением, содержащим букву "l", т.е. .xml например, эту букву 'l' просто игнорировал, т.е. расширение получалось '.xm' и можете застрелиться. Причем что характерно, воспроизводилось на _некоторых_ environments, т.е. у нас есть например OADEV1, OADEV2...OADEV6, и на 4х из 6ти это воспроизводилось, на остальных - нет. И все эти environments были подняты на одной и той же машине, иначе я бы заподозрил глюк операционки. Oracle 19, на линуксе. Причем я прогнал весь алфавит - глючило только на букве l (ну, строчной L).
Было подтверждено другими девелоперами.
баг зарегистрировали? есть его номер?
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066791
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sayan Malakshinov
andrey_anonymous
Код: plsql
1.
create or replace view v1 as select 'a' a,'b' b from dual;


да

Хочешь сказать, что последовательность команд
Код: plsql
1.
2.
create or replace view v1 as select 'a' b,'b' a from dual;
create or replace view v1 as select 'a' a,'b' b from dual;


приведет к неверному результату?
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066792
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andrey_anonymous,

нет же... речь про неизменный текст запроса: если изменяется описание столбцов вьюхи в ее определении, но не изменяется текст запроса, то оракл игнорит изменения.
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066794
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sayan Malakshinov
если изменяется описание столбцов вьюхи в ее определении, но не изменяется текст запроса, то оракл игнорит изменения.

...а ответил "да", я и удивился.
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066795
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andrey_anonymous,

Я думал ты имел ввиду добавить их к моему тест кейсу, а не сравнить между собой :)
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066872
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sayan Malakshinov,

1. ожидаемо, что проблема не воспроизводится с minimal supplemental logging в 19.9-19.11.
2. проблему можно воспроизвести в 11.2 с event 10520 level 1. Возможно, кто-то решил сделать это новым default. Отключение в новых версиях не помогает избежать проблемы.
Код: 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.
SQL> conn tc/tc
Connected.
SQL>
SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

SQL>
SQL> alter session set events '10520 level 1';

Session altered.

SQL>
SQL> select supplemental_log_data_min from v$database;

SUPPLEME
--------
NO

SQL>
SQL> drop view v1;

View dropped.

SQL> create or replace view v1(b,a) as select 'a' a,'b' b from dual;

View created.

SQL>
SQL> select * from v1;

B A
- -
a b

SQL>
SQL> -- пытаются исправить:
SQL>
SQL> create or replace view v1(a,b) as select 'a' a,'b' b from dual;

View created.

SQL>
SQL> -- но ничего не меняется:
SQL> select * from v1;

B A
- -
a b

SQL>
SQL> -- пробуем другой вариант:
SQL> alter view v1 compile;

View altered.

SQL>
SQL> -- все равно ничего не меняется:
SQL> select * from v1;

B A
- -
a b

SQL>
SQL> -- приходится менять текст запроса:
SQL> create or replace view v1(a,b) as select 'a' a,'b' b from dual/*just to change query text*/;

View created.

SQL>
SQL> -- наконец, все ок:
SQL> select * from v1;

A B
- -
a b

SQL>
SQL> select value from v$diag_info where name='Default Trace File';

VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/ora11/ora111/trace/ora111_ora_8959.trc

SQL>
SQL> !$ORACLE_HOME/OPatch/opatch lspatches
27735020;OCW Patch Set Update : 11.2.0.4.181016 (27735020)
28204707;Database Patch Set Update : 11.2.0.4.181016 (28204707)

OPatch succeeded.

SQL> !oerr ora 10520
10520, 00000, "recreate view only if definition has changed"
// *Cause:
// *Action:  Set this event only under the supervision of Oracle development
// *Comment: Changes behaviour of create or replace view,
//           comparing the new definition to the old prior to recreating the
//           object.  Creation is skipped if old and new definitions match
//           (ie. object has not changed).  No level number required.

...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066884
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SeaGate
в 11.2 с event 10520 level 1. Возможно, кто-то решил сделать это новым default.
шикарно :D отпишись мне в твиттере https://twitter.com/dbms_xtender/status/1387181063735320579
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066932
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeaGate
1. ожидаемо, что проблема не воспроизводится с minimal supplemental logging в 19.9-19.11.

Не догнал. При чем здесь supplemental logging?
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066989
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousНе догнал. При чем здесь supplemental logging?
С:
Код: 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.
SQL> conn / as sysdba
Connected.
SQL>
SQL> alter database add supplemental log data;

Database altered.

SQL>
SQL> alter session set container=pdb1;

Session altered.

SQL>
SQL> drop user tc cascade;

User dropped.

SQL>
SQL> grant create session, select_catalog_role, create view to tc identified by tc;

Grant succeeded.

SQL>
SQL> conn tc/tc@rac1:1522/pdb1
Connected.
SQL>
SQL> select banner_full from v$version;

BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0


SQL>
SQL> select supplemental_log_data_min from v$database;

SUPPLEME
--------
YES

SQL>
SQL> create or replace view v1(b,a) as select 'a' a,'b' b from dual;

View created.

SQL>
SQL> select * from v1;

B A
- -
a b

SQL>
SQL> -- пытаются исправить:
SQL>
SQL> create or replace view v1(a,b) as select 'a' a,'b' b from dual;

View created.

SQL>
SQL> -- но ничего не меняется:
SQL> select * from v1;

A B
- -
a b

SQL>
SQL> -- пробуем другой вариант:
SQL> alter view v1 compile;

View altered.

SQL>
SQL> -- все равно ничего не меняется:
SQL> select * from v1;

A B
- -
a b

SQL>
SQL> -- приходится менять текст запроса:
SQL> create or replace view v1(a,b) as select 'a' a,'b' b from dual/*just to change query text*/;

View created.

SQL>
SQL> -- наконец, все ок:
SQL> select * from v1;

A B
- -
a b

SQL>
SQL> !$ORACLE_HOME/OPatch/opatch lspatches
32579761;OCW RELEASE UPDATE 19.11.0.0.0 (32579761)
32545013;Database Release Update : 19.11.0.0.210420 (32545013)
32067171;OJVM RELEASE UPDATE: 19.10.0.0.210119 (32067171)

OPatch succeeded.


Без:
Код: 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.
SQL> conn / as sysdba
Connected.
SQL>
SQL> alter database drop supplemental log data;

Database altered.

SQL>
SQL> alter session set container=pdb1;

Session altered.

SQL>
SQL> drop user tc cascade;

User dropped.

SQL>
SQL> grant create session, select_catalog_role, create view to tc identified by tc;

Grant succeeded.

SQL>
SQL> conn tc/tc@rac1:1522/pdb1
Connected.
SQL>
SQL> select banner_full from v$version;

BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0


SQL>
SQL> select supplemental_log_data_min from v$database;

SUPPLEME
--------
NO

SQL>
SQL> create or replace view v1(b,a) as select 'a' a,'b' b from dual;

View created.

SQL>
SQL> select * from v1;

B A
- -
a b

SQL>
SQL> -- пытаются исправить:
SQL>
SQL> create or replace view v1(a,b) as select 'a' a,'b' b from dual;

View created.

SQL>
SQL> -- но ничего не меняется:
SQL> select * from v1;

B A
- -
a b

SQL>
SQL> -- пробуем другой вариант:
SQL> alter view v1 compile;

View altered.

SQL>
SQL> -- все равно ничего не меняется:
SQL> select * from v1;

B A
- -
a b

SQL>
SQL> -- приходится менять текст запроса:
SQL> create or replace view v1(a,b) as select 'a' a,'b' b from dual/*just to change query text*/;

View created.

SQL>
SQL> -- наконец, все ок:
SQL> select * from v1;

A B
- -
a b

SQL>
SQL> !$ORACLE_HOME/OPatch/opatch lspatches
32579761;OCW RELEASE UPDATE 19.11.0.0.0 (32579761)
32545013;Database Release Update : 19.11.0.0.210420 (32545013)
32067171;OJVM RELEASE UPDATE: 19.10.0.0.210119 (32067171)

OPatch succeeded.


Мое "ожидаемо" относилось к тому факту, что некоторые оптимизации отключаются при supplemental logging.
Классический пример, это downgrade некоторых операций к блокирующим при supplemental logging: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Automatic-and-Manual-Locking-Mechanisms-During-SQL-Operations.html#GUID-0304C4AA-BD28-4C2A-B7F5-267532FB9499

Судя по тестам выше, CREATE OR REPLACE VIEW также работает по-разному в зависимости от supplemental logging.
Для чего CREATE VIEW в репликации?
Например, Logical Standby поддерживает CREATE VIEW: https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/data-type-ddl-support-on-logical-standby-databases.html#GUID-1595A660-6790-436A-BB84-D74C9187D8AE
В целом, это выглядит как некоторое ограничение существующей имплементации, что CREATE OR REPLACE VIEW не использует ряд "оптимизаций" при включенном minimal supplemental logging.
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40066996
most23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov
most23
Sayan Malakshinov,
вот вам забавно, а я столкнулся с диким глюком - utl_file при попытке создать файл с расширением, содержащим букву "l", т.е. .xml например, эту букву 'l' просто игнорировал, т.е. расширение получалось '.xm' и можете застрелиться. Причем что характерно, воспроизводилось на _некоторых_ environments, т.е. у нас есть например OADEV1, OADEV2...OADEV6, и на 4х из 6ти это воспроизводилось, на остальных - нет. И все эти environments были подняты на одной и той же машине, иначе я бы заподозрил глюк операционки. Oracle 19, на линуксе. Причем я прогнал весь алфавит - глючило только на букве l (ну, строчной L).
Было подтверждено другими девелоперами.
баг зарегистрировали? есть его номер?

Я не регистрирую баги. Чтобы этим занялся Oracle, нужно создавать test case с воспроизводимостью, а у нас даже на одной машине он не всегда воспроизводится. Мне за эти хлопоты не платят, я плюнул и написал обход, создавал файл с другим расширением а потом из скрипта его переименовывал.
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40067035
most23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот специально перерыл свои старые файлы, нашёл про этот баг.
Я запамятовал когда писал что глючит буква 'l', на самом деле это буква 's' (строчная, прописная S без проблем)
баг проявляется лишь в extension, имя файла всегда создается правильное, включая и букву 's'
Простейший код:

Код: plsql
1.
2.
3.
4.
5.
declare output utl_file.file_type;
BEGIN
   output:=utl_file.fopen('TMP_DIR','abcd.slk','W',32000);
   utl_file.fclose(output);
END;



Вот сейчас проверил,
на одном из трех environments создаётся файл abcd.lk, на остальных - abcd.slk

все три базы на одной машине, TMP_DIR у всех тоже одна и та же общая на всех.
У всех трех одинаковые параметры:
Oracle 12c Enterprise 12.1.0.2.0 64 bit
port_string x86_64/Linux 2.4.xx
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40067041
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
most23,

что strace на проблемном инстансе на это показывает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
declare 
  output utl_file.file_type;
  fname varchar2(20):='abcd.slk';
BEGIN
   output:=utl_file.fopen('TMP_DIR',fname,'W',32000);
   utl_file.put_line(output, fname);
   utl_file.fclose(output);
END;


и что в файлик записалось?

и так, просто на всякий случай, еще бы трассу 10046 и вывод dbms_hprof.
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40067042
most23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov
most23,

и что в файлик записалось?

и так, просто на всякий случай, еще бы трассу 10046 и вывод dbms_hprof.

код посмотрите, файл создается пустым.
нафиг мне копаться в трассировках,
в production это не воспроизводится, да и хер с ним. У меня между прочим timeframe есть и тратить время на эту дичь.
А DBA этим заниматься не будет в принципе, он для такого слишком велик (да и туп к тому же).
Оказалось, что .slk файлы там и не нужны, новый ексель перестал их понимать и теперь сейвим просто .xls
баг вылез просто в процессе разборки почему .slk не открываются, это потому что говна из MS убрали эти файлы из Excel по умолчанию. Чтобы значить девелоперы не дай бог без работы не сидели.
Просто пример диких оракловских багов.
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40067045
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
most23
пример диких оракловских багов.
нет, не пример. Так просто сплетня, какие-то неподтвержденные слухи...
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40068782
leonx2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov,

Bug 32743290 - CREATE OR REPLACE VIEW DOESN'T WORK PROPERLY IN ORACLE DATABASE 19.9
...
Рейтинг: 0 / 0
Забавный баг на Oracle 19: create or replace view .. (...) as
    #40068783
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
leonx2
Sayan Malakshinov,

Bug 32743290 - CREATE OR REPLACE VIEW DOESN'T WORK PROPERLY IN ORACLE DATABASE 19.9
класс! Очередной непубличный баг, но хоть патчики доступны, причём с 19.7 по 19.11, и в бандлы включать не хотят наверное тоже фиксед в 21
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Забавный баг на Oracle 19: create or replace view .. (...) as
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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