Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5873
-- по ошибке указали неправильный порядок столбцов (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.
28 апр 21, 02:09    [22315382]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5873
+ точно так же и с другими именами стобцов
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 - нет. Остальное не проверял
28 апр 21, 02:21    [22315384]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
most23
Member

Откуда:
Сообщений: 17
Sayan Malakshinov,
вот вам забавно, а я столкнулся с диким глюком - utl_file при попытке создать файл с расширением, содержащим букву "l", т.е. .xml например, эту букву 'l' просто игнорировал, т.е. расширение получалось '.xm' и можете застрелиться. Причем что характерно, воспроизводилось на _некоторых_ environments, т.е. у нас есть например OADEV1, OADEV2...OADEV6, и на 4х из 6ти это воспроизводилось, на остальных - нет. И все эти environments были подняты на одной и той же машине, иначе я бы заподозрил глюк операционки. Oracle 19, на линуксе. Причем я прогнал весь алфавит - глючило только на букве l (ну, строчной L).
Было подтверждено другими девелоперами.

Сообщение было отредактировано: 28 апр 21, 09:42
28 апр 21, 09:48    [22315444]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 19050
Sayan Malakshinov
create or replace view v1(a,b) as select 'a' a,'b' b from dual/*just to change query text*/;

Завабно. А в вариантах
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;

глюк сохраняется?
28 апр 21, 10:56    [22315482]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5873
andrey_anonymous
create or replace view v1 as select 'a' a,'b' b from dual;
да


andrey_anonymous
create or replace view v1(a,b) as select 'a','b' from dual;
нет, т.к. текст запроса меняется
28 апр 21, 15:05    [22315683]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5873
most23
Sayan Malakshinov,
вот вам забавно, а я столкнулся с диким глюком - utl_file при попытке создать файл с расширением, содержащим букву "l", т.е. .xml например, эту букву 'l' просто игнорировал, т.е. расширение получалось '.xm' и можете застрелиться. Причем что характерно, воспроизводилось на _некоторых_ environments, т.е. у нас есть например OADEV1, OADEV2...OADEV6, и на 4х из 6ти это воспроизводилось, на остальных - нет. И все эти environments были подняты на одной и той же машине, иначе я бы заподозрил глюк операционки. Oracle 19, на линуксе. Причем я прогнал весь алфавит - глючило только на букве l (ну, строчной L).
Было подтверждено другими девелоперами.
баг зарегистрировали? есть его номер?
28 апр 21, 15:06    [22315684]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 19050
Sayan Malakshinov
andrey_anonymous
create or replace view v1 as select 'a' a,'b' b from dual;

да

Хочешь сказать, что последовательность команд
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;

приведет к неверному результату?
28 апр 21, 16:00    [22315729]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

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

нет же... речь про неизменный текст запроса: если изменяется описание столбцов вьюхи в ее определении, но не изменяется текст запроса, то оракл игнорит изменения.
28 апр 21, 16:03    [22315730]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 19050
Sayan Malakshinov
если изменяется описание столбцов вьюхи в ее определении, но не изменяется текст запроса, то оракл игнорит изменения.

...а ответил "да", я и удивился.
28 апр 21, 16:10    [22315734]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

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

Я думал ты имел ввиду добавить их к моему тест кейсу, а не сравнить между собой :)
28 апр 21, 16:12    [22315735]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1701
Sayan Malakshinov,

1. ожидаемо, что проблема не воспроизводится с minimal supplemental logging в 19.9-19.11.
2. проблему можно воспроизвести в 11.2 с event 10520 level 1. Возможно, кто-то решил сделать это новым default. Отключение в новых версиях не помогает избежать проблемы.
+
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.
28 апр 21, 18:15    [22315829]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5873
SeaGate
в 11.2 с event 10520 level 1. Возможно, кто-то решил сделать это новым default.
шикарно :D отпишись мне в твиттере https://twitter.com/dbms_xtender/status/1387181063735320579
28 апр 21, 18:24    [22315843]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 19050
SeaGate
1. ожидаемо, что проблема не воспроизводится с minimal supplemental logging в 19.9-19.11.

Не догнал. При чем здесь supplemental logging?
28 апр 21, 19:07    [22315895]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1701
andrey_anonymous
Не догнал. При чем здесь supplemental logging?

С:
+
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.

Без:
+
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.
28 апр 21, 21:13    [22315968]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
most23
Member

Откуда:
Сообщений: 17
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 с воспроизводимостью, а у нас даже на одной машине он не всегда воспроизводится. Мне за эти хлопоты не платят, я плюнул и написал обход, создавал файл с другим расширением а потом из скрипта его переименовывал.
28 апр 21, 21:37    [22315981]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
most23
Member

Откуда:
Сообщений: 17
вот специально перерыл свои старые файлы, нашёл про этот баг.
Я запамятовал когда писал что глючит буква 'l', на самом деле это буква 's' (строчная, прописная S без проблем)
баг проявляется лишь в extension, имя файла всегда создается правильное, включая и букву 's'
Простейший код:

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

Сообщение было отредактировано: 29 апр 21, 00:33
29 апр 21, 00:34    [22316053]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

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

что strace на проблемном инстансе на это показывает:
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.
29 апр 21, 02:00    [22316067]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
most23
Member

Откуда:
Сообщений: 17
Sayan Malakshinov
most23,

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

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

код посмотрите, файл создается пустым.
нафиг мне копаться в трассировках,
в production это не воспроизводится, да и хер с ним. У меня между прочим timeframe есть и тратить время на эту дичь.
А DBA этим заниматься не будет в принципе, он для такого слишком велик (да и туп к тому же).
Оказалось, что .slk файлы там и не нужны, новый ексель перестал их понимать и теперь сейвим просто .xls
баг вылез просто в процессе разборки почему .slk не открываются, это потому что говна из MS убрали эти файлы из Excel по умолчанию. Чтобы значить девелоперы не дай бог без работы не сидели.
Просто пример диких оракловских багов.

Сообщение было отредактировано: 29 апр 21, 02:13
29 апр 21, 02:19    [22316069]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5873
most23
пример диких оракловских багов.
нет, не пример. Так просто сплетня, какие-то неподтвержденные слухи...
29 апр 21, 02:32    [22316072]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
leonx2
Member

Откуда:
Сообщений: 55
Sayan Malakshinov,

Bug 32743290 - CREATE OR REPLACE VIEW DOESN'T WORK PROPERLY IN ORACLE DATABASE 19.9
6 май 21, 16:38    [22319286]     Ответить | Цитировать Сообщить модератору
 Re: Забавный баг на Oracle 19: create or replace view .. (...) as  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5873
leonx2
Sayan Malakshinov,

Bug 32743290 - CREATE OR REPLACE VIEW DOESN'T WORK PROPERLY IN ORACLE DATABASE 19.9
класс! Очередной непубличный баг, но хоть патчики доступны, причём с 19.7 по 19.11, и в бандлы включать не хотят наверное тоже фиксед в 21
6 май 21, 16:44    [22319288]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить