Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID / 9 сообщений из 9, страница 1 из 1
11.01.2021, 14:17
    #40034860
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
Приветствую, подскажите плз как докопаться до причин того, что MATERIALIZED VIEW после каждого вызова DBMS_MVIEW.refresh становится INVALID?
Приходится сразу же вызывать компиляцию.

Думал, подготовлю тестовый пример с вьюхой, созданной и обновляемой как боевая, что бы понять на простом SQL-запросе, а нет. С тестовой вьюхой (смотри ниже) всё в порядке, она не становится INVALID.

Oracle 9.2

Код: 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.
create table test(ID int PRIMARY KEY);


-- с точно такими же опциями создана и проблемная вьюха
CREATE MATERIALIZED VIEW view_test
NOCACHE
NOPARALLEL
BUILD IMMEDIATE
REFRESH COMPLETE
ON DEMAND
DISABLE QUERY REWRITE
AS
select *
from test
where test.ID < 100;


-- проверяю вьюхи на INVALID'ность
select ao.owner, ao.object_name, ao.status
from sys.all_objects ao
where
   ao.owner = 'MY_USER_NAME' and
   ao.object_type = 'MATERIALIZED VIEW' and   
   status = 'INVALID';
   

-- актуализирую данные
begin
  DBMS_MVIEW.refresh(
     list => 'MY_USER_NAME.VIEW_TEST', 
     method  => 'C',
     refresh_after_errors => true,
     parallelism => 0
     );  
end;   


-- для данной тестовой вьюхи ничего нет, проблемные же стабильно появляются
select ao.owner, ao.object_name, ao.status
from sys.all_objects ao
where
   ao.owner = 'MY_USER_NAME' and
   ao.object_type = 'MATERIALIZED VIEW' and   
   status = 'INVALID';


-- для реальной, не-тестовой вьюхи бы вызвал сейчас:
ALTER MATERIALIZED VIEW MY_USER_NAME.VIEW_TEST COMPILE



Заранее спасибо ответившим
...
Рейтинг: 0 / 0
11.01.2021, 14:30
    #40034868
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
Кроик Семён,

это ожидаемое поведение
...
Рейтинг: 0 / 0
11.01.2021, 14:32
    #40034869
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
Кроик Семён
Oracle 9.2

А поддерживаемую вендором версию использовать не получается?

В реальной вьюхе есть outer join?
...
Рейтинг: 0 / 0
11.01.2021, 14:35
    #40034870
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
Кроик Семён,

И как часто собственно меняются данные в исходных таблицах? Если чаще обновления мат вью, то это ожидаемое поведение, в user_mviews при этом будет статус needs_compile.
...
Рейтинг: 0 / 0
11.01.2021, 14:47
    #40034873
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
env
В реальной вьюхе есть outer join?

нет, только LEFT JOIN. Но в одной из других тоже проблемных есть. Почему это плохо?


env
И как часто собственно меняются данные в исходных таблицах?

По нескольку раз в минуту. А её рефреш длится около минуты. Но почему это проблема, я не понял. База же транзакционная.


Кстати, сейчас заменил в SQL вьюхи вызов функции из пакета, совершенно простой, к тому же еще и DETERMINISTIC на аналогичную, не из пакета и по крайней мере после первого рефреша вьюха INVALID не стала.
...
Рейтинг: 0 / 0
11.01.2021, 14:59
    #40034879
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
  • проверил, и после последующих рефрешей вьюха INVALID перестала быть.
  • заметил, после рефреша некоторых из MATERIALIZED VIEW становятся невалидными и некоторые из нормальных VIEW
  • ...
    Рейтинг: 0 / 0
    11.01.2021, 15:40
        #40034886
    env
    env
    Участник
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
    Кроик Семён,

    Кроик Семён
    нет, только LEFT JOIN

    Собственно, это и есть outer join. Одна из разновидностей подобных багов(?) как раз была связана с наличием внешних соединений, вроде как исправлено в свежих версиях.
    ...
    Рейтинг: 0 / 0
    11.01.2021, 15:44
        #40034888
    env
    env
    Участник
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
    Кроик Семён
    Но почему это проблема, я не понял.

    Был какой-то прикол с обработкой зависимостей
    ...
    Рейтинг: 0 / 0
    11.01.2021, 15:44
        #40034889
    Кроик Семён
    Участник
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
    env

    Янет, только LEFT JOIN

    Собственно, это и есть outer join. Одна из разновидностей подобных багов(?) как раз была связана с наличием внешних соединений, вроде как исправлено в свежих версиях.

    интересная инфа, спасибо
    ...
    Рейтинг: 0 / 0
    Форумы / Oracle [игнор отключен] [закрыт для гостей] / MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID / 9 сообщений из 9, страница 1 из 1
    Целевая тема:
    Создать новую тему:
    Автор:
    Найденые пользователи ...
    Разблокировать пользователей ...
    Читали форум (0):
    Пользователи онлайн (0):
    x
    x
    Закрыть


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