powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
16 сообщений из 16, страница 1 из 1
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557541
PSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь создать материальное представление с инкриментальным обновлением:



Создаю логи для обновления :


Код: plsql
1.
2.
3.
CREATE MATERIALIZED VIEW LOG ON WORKTASK WITH PRIMARY KEY INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW log ON ASSIGNMENTS WITH PRIMARY KEY INCLUDING NEW VALUES;



Пытаюсь создать само представление:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE  MATERIALIZED VIEW REPORT_DATA_MV_INC
BUILD IMMEDIATE
REFRESH FAST ON DEMAND START WITH sysdate NEXT SYSDATE+1
DISABLE QUERY REWRITE
AS
SELECT t1.id, t2.id   FROM WORKTASK T1 
INNER JOIN ASSIGNMENTS T2 ON T1.SPEC_ID = T2.SPEC_ID 



Получаю ошибку ORA-12015: cannot create a fast refresh materialized view from a complex query


SPEC_ID в PRIMARY KEY у обоих таблиц.

Что не так?
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557556
PSD,

Ты ограничения-то на запрос в фаст-рефреш вьюхе читал? там допускается только линейный запрос по одной таблице, никаких джойноф. Тебе ж и сообщение об ошибке говорит об этом. А у тебя чего в запросе записано?
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557558
PSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения не верно указал ошибку.
Выскакивает ORA-12052 Не возможна быстрая регенерация материального представления ...
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557567
PSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхPSD,

Ты ограничения-то на запрос в фаст-рефреш вьюхе читал? там допускается только линейный запрос по одной таблице, никаких джойноф. Тебе ж и сообщение об ошибке говорит об этом. А у тебя чего в запросе записано?



Можно можно подсказать где в явном виде написано что inner/left join нельзя? Специально полдня искал не нашел(может и нашел но английский подвел).

Меня тыкают в https://docs.oracle.com/cd/B10501_01/server.920/a96520/mv.htm#42277 там есть пример эквивалентный INNER JOIN и говорят что руки кривые.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Example 8-4 Materialized View Containing Only Joins

CREATE MATERIALIZED VIEW LOG ON sales
  WITH ROWID;
 
CREATE MATERIALIZED VIEW LOG ON times
  WITH ROWID;
 
CREATE MATERIALIZED VIEW LOG ON customers
  WITH ROWID;
 
CREATE MATERIALIZED VIEW detail_sales_mv 
       PARALLEL BUILD IMMEDIATE
       REFRESH FAST
       AS
       SELECT
       s.rowid "sales_rid", t.rowid "times_rid", c.rowid "customers_rid",
       c.cust_id, c.cust_last_name, s.amount_sold,
       s.quantity_sold, s.time_id
       FROM sales s, times t, customers c 
       WHERE  s.cust_id = c.cust_id(+) AND
              s.time_id = t.time_id(+);
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557570
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSD,

И где в твоем коде rowid? Ты рестрикшены на матвью внимательней почитай.
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557573
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557576
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс
Увидел SYSDATE и возбудился
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557578
PSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex__kKPSD,

И где в твоем коде rowid? Ты рестрикшены на матвью внимательней почитай.

В таком варианте получаю туже ORA-12056

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE MATERIALIZED VIEW LOG ON WORKTASK WITH ROWid;

CREATE MATERIALIZED VIEW log ON  ASSIGNMENTS WITH ROWID;

CREATE  MATERIALIZED VIEW REPORT_DATA_MV_INC
BUILD IMMEDIATE
REFRESH FAST ON DEMAND START WITH sysdate NEXT SYSDATE+1
DISABLE QUERY REWRITE
AS
SELECT t1.triidtx   FROM WORKTASK T1 
, ASSIGNMENTS T2 WHERE  T1.SPEC_ID = T2.SPEC_ID 
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557580
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rowid в списке SELECT
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557584
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSD,

Чукча не читатель, чукча писатель (с)

Ты дальше то хоть тобой приведенный пример посмотри внимательно
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557597
PSD,

КРС, слегка попутал. Чего-то про он комит подумалось. Ну а тебе уже дали правильный ответ - rowid-Ы всех таблиц, участвуюших в запросе, должны быть представлены в селект-листе запроса.
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557757
PSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - ЭхPSD,

КРС, слегка попутал. Чего-то про он комит подумалось. Ну а тебе уже дали правильный ответ - rowid-Ы всех таблиц, участвуюших в запросе, должны быть представлены в селект-листе запроса.


Затупил конкретно, в место того чтобы задать простой вопрос.

Конструкции вида:

select <> from table1
Left join table2 on table1.pk1=table2.pk2

и

select <> from table1
inner join table2 on table1.pk1=table2.pk2
inner join table3 on table3.pk1=table2.s_pk2

в принципе можно заставить работать в материальном представлении с REFRESH FAST?
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557770
PSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSDДобрый Э - ЭхPSD,

КРС, слегка попутал. Чего-то про он комит подумалось. Ну а тебе уже дали правильный ответ - rowid-Ы всех таблиц, участвуюших в запросе, должны быть представлены в селект-листе запроса.


Затупил конкретно, в место того чтобы задать простой вопрос.

Конструкции вида:

select <> from table1
Left join table2 on table1.pk1=table2.pk2

и

select <> from table1
inner join table2 on table1.pk1=table2.pk2
inner join table3 on table3.pk1=table2.s_pk2

в принципе можно заставить работать в материальном представлении с REFRESH FAST?

Опять туплю .
select <> from table1
inner join table2 on table1.pk1=table2.pk2
inner join table3 on table3.pk1=table2.s_pk2

Конечно можно заменяешь inner join запятой а условия on выносишь в where через and.
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39557976
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSD,
не мучайся, сделай по документации по уже даденой ссылке:
- запрос MV перепиши в native
syntax , т.к. ANSI syntax не поддерживется для Fast (в 11R2 точно)
- добавь rowid-ы всех таблиц запроса, как в примере
- проверь запрос MV или созданное MV с помощью DBMS_MVIEW.EXPLAIN_MVIEW
( по ссылке на доку выше и/или
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_mview.htm#ARPLS67191 )
- проверить подходит ли инкрементальное обновление если изменение исходных данных задевает 75% и более объема MV
- колонки rowid-ов в MV, возможно, стоит проиндексировать

Если первый уровень пройден, посмотри, что из опций MV Log можно использовать для твой задачи: WITH Clause, NEW VALUES Clause, ...
https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_6003.htm#SQLRF01303

Imho.
- В доках не указано явно про несовместимость в 11R2 WITH PRIMARY KEY и ROWID. В режиме обновления on demand получал потери изменений MV если значения моняются циклически AA -> BB -> AA и т.д. В 12.1 исправили. Соответственно, если не 12 версия - либо WITH PRIMARY KEY илибо WITH ROWID
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39558159
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSDДобрый Э - ЭхPSD,

КРС, слегка попутал. Чего-то про он комит подумалось. Ну а тебе уже дали правильный ответ - rowid-Ы всех таблиц, участвуюших в запросе, должны быть представлены в селект-листе запроса.


Затупил конкретно, в место того чтобы задать простой вопрос.

Конструкции вида:

select <> from table1
Left join table2 on table1.pk1=table2.pk2

и

select <> from table1
inner join table2 on table1.pk1=table2.pk2
inner join table3 on table3.pk1=table2.s_pk2

в принципе можно заставить работать в материальном представлении с REFRESH FAST?
Уже написали, что нет. Join любой не поддерживается. Перепиши на оракловый синтаксис.
Для проверки возможности используй DBMS_MVIEW.explain_mview. Он покажет что мешает REFRESH FAST
Код: plsql
1.
SELECT capability_name,possible,msgtxt FROM mv_capabilities_table t WHERE capability_name LIKE 'REFRESH_FAST%';
...
Рейтинг: 0 / 0
Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
    #39558428
PSD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алымов Анатолий, Спасибо за разъяснения теперь боле менее понятно куда двигаться.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как создать CREATE MATERIALIZED VIEW REFRESH FAST в Оракл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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