Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 buggy puzzle: select count(*) = no rows selected  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
Как получить:

SQL> select count(*) from t;

no rows selected

Это точно воспроизводится на Oracle EE 10.2.0.2/10.2.0.3

P.S. Это wrong results issue но с интересной (на мой взгляд) причиной.
P.P.S. При отсутсвии прогресса я буду делать подсказки.
31 янв 07, 12:00    [3718335]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
Первая подсказка.

SQL> select count(*) from t;

no rows selected

SQL> alter session set query_rewrite_enabled=false;

Session altered.

SQL> select count(*) from t;

  COUNT(*)
----------
         0

SQL> show parameter query_rewrite_integrity

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
query_rewrite_integrity              string      ENFORCED
31 янв 07, 12:13    [3718454]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
кто такой t?
31 янв 07, 13:51    [3719253]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116100
alex-ls
кто такой t?


Ответив на этот вопрос, мы решим задачку .
31 янв 07, 13:54    [3719281]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
dmidek
alex-ls
кто такой t?


Ответив на этот вопрос, мы решим задачку .

А какая разница,какая таблица?
SQL>  create table t(id number)
  2  /

Table created.

SQL> select count(*) from t;

  COUNT(*)
----------
         0
SQL> select banner from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Release 9.2.0.5.0 - Production
31 янв 07, 14:05    [3719364]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
наверное енто вьюха все же какая-то... Может матвью всему виной... Хотя все равно непонятно почему no rows selected :(
31 янв 07, 14:05    [3719365]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
miksoft
Member

Откуда:
Сообщений: 38540
а функция COUNT не переопределена?
31 янв 07, 14:17    [3719452]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
TIM@test>select count(*) from t;

no rows selected


Execution Plan
----------------------------------------------------------
Plan hash value: 139569370

-------------------------------------------------------------------------------------
| Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |      |     1 |    13 |     2   (0)| 00:00:01 |
|   1 |  MAT_VIEW REWRITE ACCESS FULL| T_MV |     1 |    13 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------
31 янв 07, 14:19    [3719473]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
все я понял :) создали матвью содержащее COUNT(*) оракл решил, что запрос может переписать через него. ENFORCED ему это позволил...
31 янв 07, 14:24    [3719520]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Andrew Max
Member

Откуда:
Сообщений: 1045
Q u a d r o
Как получить...

Александр, второго релиза десятки под рукой нет.
В 9.2.0.6.0, увы, смог получить "нужный результат" только в режиме TRUSTED:

SQL> select * from v$version where rownum = 1;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production

SQL>  create table t(x) as
  2   select rownum
  3     from dual
  4  connect by level <= 1000;

Таблица создана.

SQL> exec dbms_stats.gather_table_stats(user, 'T')

Процедура PL/SQL успешно завершена.

SQL> create table mv_t(cnt number);

Таблица создана.

SQL> create materialized view mv_t
  2  on prebuilt table
  3  refresh complete on demand
  4  enable query rewrite as
  5  select count(*) cnt from t;

Материализованное представление создано.

SQL> alter session set query_rewrite_integrity = TRUSTED;

Сеанс изменен.

SQL> select count(*) from t;

  COUNT(*)
----------
      1000

SQL> alter session set query_rewrite_enabled = TRUE;

Сеанс изменен.

SQL> select count(*) from t;

строки не выбраны

SQL>
31 янв 07, 14:29    [3719557]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
Timm
TIM@test>select count(*) from t;

no rows selected


Execution Plan
----------------------------------------------------------
Plan hash value: 139569370

-------------------------------------------------------------------------------------
| Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |      |     1 |    13 |     2   (0)| 00:00:01 |
|   1 |  MAT_VIEW REWRITE ACCESS FULL| T_MV |     1 |    13 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------


Хорошо.

Последняя миля - что у вас в...

SQL> show parameter query_rewrite_integrity
31 янв 07, 14:30    [3719568]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
Andrew Max
Александр, второго релиза десятки под рукой нет.
В 9.2.0.6.0, увы, смог получить "нужный результат" только в режиме TRUSTED:

В режиме trusted это не будет "wrong results issue". Нужен enforced. До него на самом деле от вашего примера не так уж и далеко.
31 янв 07, 14:32    [3719583]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Grami
Member

Откуда: Москва
Сообщений: 451
Q u a d r o
Как получить:

SQL> select count(*) from t;

no rows selected

Это точно воспроизводится на Oracle EE 10.2.0.2/10.2.0.3

P.S. Это wrong results issue но с интересной (на мой взгляд) причиной.
P.P.S. При отсутсвии прогресса я буду делать подсказки.


о, нифига!
31 янв 07, 14:33    [3719590]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
я правда не знаю есть ли этот баг в 9.2.0.6
31 янв 07, 14:33    [3719595]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Andrew Max
Member

Откуда:
Сообщений: 1045
Q u a d r o
Andrew Max
Александр, второго релиза десятки под рукой нет.
В 9.2.0.6.0, увы, смог получить "нужный результат" только в режиме TRUSTED:

В режиме trusted это не будет "wrong results issue". Нужен enforced. До него на самом деле от вашего примера не так уж и далеко.

Я бы повозился еще, но, честно говоря, лень :)

К тому же: Вы уверены, что этот wrong result можно получить в девятке? Если нет - я ведь могу только напрасно потерять время. А 10.2, к сожалению, под рукой нет.
31 янв 07, 14:35    [3719610]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
Andrew Max
Q u a d r o
Andrew Max
Александр, второго релиза десятки под рукой нет.
В 9.2.0.6.0, увы, смог получить "нужный результат" только в режиме TRUSTED:

В режиме trusted это не будет "wrong results issue". Нужен enforced. До него на самом деле от вашего примера не так уж и далеко.

Я бы повозился еще, но, честно говоря, лень :)

К тому же: Вы уверены, что этот wrong result можно получить в девятке? Если нет - я ведь могу только напрасно потерять время. А 10.2, к сожалению, под рукой нет.


Не уверен, но присоединение обладателей 9i было бы интересным.

e-mail в провиле валидный? Я могу выслать test case, вы его прогоните и скажете действует это на 9 или нет. Это в любом случае полезно так как я сейчас пойду заводить SR.
31 янв 07, 14:39    [3719651]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Andrew Max
Member

Откуда:
Сообщений: 1045
Q u a d r o
e-mail в провиле валидный? Я могу выслать test case, вы его прогоните и скажете действует это на 9 или нет.
Да, присылайте.
31 янв 07, 14:47    [3719707]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
Andrew Max
Q u a d r o
e-mail в провиле валидный? Я могу выслать test case, вы его прогоните и скажете действует это на 9 или нет.
Да, присылайте.


Выслал, напишите здесь действует или нет :)
31 янв 07, 14:51    [3719738]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Andrew Max
Member

Откуда:
Сообщений: 1045
Q u a d r o
Выслал, напишите здесь действует или нет :)

Действует-действует :) И в 9.2.0.6.0, и в 10.1.0.3.0.
Сказать нечего, бага красивая... И testcase крайне прост.
31 янв 07, 15:05    [3719912]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Andrew Max
Member

Откуда:
Сообщений: 1045
SQL> show parameter query_rewrite

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------
query_rewrite_enabled                string      TRUE
query_rewrite_integrity              string      enforced
SQL>
SQL> set autot on explain
SQL>
SQL> select count(*) from t;

строки не выбраны


План выполнения
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=327 Bytes=4251)
   1    0   TABLE ACCESS (FULL) OF 'T_CNT' (Cost=2 Card=327 Bytes=4251)



SQL> set autot off
SQL>
SQL> select * from v$version where rownum = 1;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

SQL>

Видимо, тянется с давних времен...
31 янв 07, 15:20    [3720052]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
Q u a d r o
Timm
TIM@test>select count(*) from t;

no rows selected


Execution Plan
----------------------------------------------------------
Plan hash value: 139569370

-------------------------------------------------------------------------------------
| Id  | Operation                    | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |      |     1 |    13 |     2   (0)| 00:00:01 |
|   1 |  MAT_VIEW REWRITE ACCESS FULL| T_MV |     1 |    13 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------


Хорошо.

Последняя миля - что у вас в...

SQL> show parameter query_rewrite_integrity

TIM@test>show parameter query_rewrite_integrity

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------
query_rewrite_integrity              string      enforced
10.2.0.1 Win

drop table t;

create table t (id int);

exec dbms_stats.gather_table_stats(user, 'T', cascade => true);

create materialized view log on t with rowid including new values;

drop materialized view t_mv;
create materialized view t_mv build immediate refresh fast on commit as select count(*) from t;
alter materialized view t_mv enable query rewrite;

alter session set query_rewrite_enabled=true;
alter session set query_rewrite_integrity=enforced;

select count(*) from t;

delete from t;
commit;

select count(*) from t;

31 янв 07, 15:23    [3720072]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
RA\/EN
Member

Откуда:
Сообщений: 3658
9.2.0.7:
после скрипта:
drop table t

ORA-03113: end-of-file on communication channel
Timm - мерзкий пакостник!
31 янв 07, 15:35    [3720179]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
Timm - Это был мой test case! :)
31 янв 07, 15:37    [3720205]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
Я не пакостник, я просто разместил тест кейс
31 янв 07, 15:42    [3720264]     Ответить | Цитировать Сообщить модератору
 Re: buggy puzzle: select count(*) = no rows selected  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
RA\/EN
9.2.0.7:
после скрипта:
drop table t

ORA-03113: end-of-file on communication channel
Timm - мерзкий пакостник!


О, кстати, хотите ещё один buggy puzzle? :)

Что надо добавить к MV, чтобы при commit сессия застрелилась?
31 янв 07, 15:47    [3720322]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить