powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
9 сообщений из 9, страница 1 из 1
MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
    #40034860
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, подскажите плз как докопаться до причин того, что 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
MATERIALIZED VIEW после каждождого DBMS_MVIEW.refresh становится INVALID
    #40034868
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

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

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

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

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

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


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

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


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

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

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

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

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

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

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


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