powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление материализованного представления
4 сообщений из 4, страница 1 из 1
Обновление материализованного представления
    #39560392
RomanCFT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Не могу победить МВ

Задача. Создать МВ с определёнными полями. Он должен обновляется каждый день. Выборка из Table1 должна идти из партиции текущего месяца(если запрос идет из всей таблицы, выборка идет день), в МВ должны сохранятся данные с период в пол года т.е. нельзя дропать и создавать МВ раз в месяц.

Написал вот такой вот запрос, на тестовой БД все отработало.
Когда попытался развернуть на боевой базе, админы серверов, сообщили что Oracle'овые джобы могут
плохо обновлять МВ, и нужно переписать запрос на обновление с помощью скрипта для unix


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create materialized view MV_Table
refresh force on demand
start with to_date('01-11-2017', 'dd-mm-yyyy') next TRUNC(SYSDATE+1)
SELECT value1
       ,number1||'.'||number2
       ,create_date
FROM Table1 
WHERE create_date >= trunc (sysdate,'MM') +3/24  
      AND create_date < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1)
      and summ = 0
      and (number1||'.'||number2 in ('00.02','00.22')) 
      and trunc(PASS_DATE) >= '01/11/2017';



Пееребуровил кучу инструкций, не получается. Из того что я понял, нужно сперва создать Журнал МВ,
потом изменить саму МВ
Судя по инструкции нужно сделать примерно так.
Потом отдельным скриптом обновлять значения в таблице, но не получается создать МВ вот с такой вот ошибкой
ORA-30353: expression not supported for query rewrite
Не могу понять в чем проблема.


Код: 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.
column dt new_value dt
select trunc (sysdate,'MM') +3/24 dt 
from dual;
column adt new_value adt
select ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1) adt 
from dual;
spool mrebuild_mview.sql.lst
-- создание
CREATE MATERIALIZED VIEW MV_Table
ON PREBUILT TABLE
USING NO INDEX
REFRESH FAST ON DEMAND
ENABLE QUERY REWRITE
AS
SELECT value1
	,number1||'.'||number2
	,create_date
	,DBMS_MVIEW.PMARKER(ROWID)     
FROM Table1  
WHERE create_date >= ':dt' AND create_date < ':adt' and summ = 0
		and summ = 0
      and (number1||'.'||number2 in ('00.02','00.22')) 
      and trunc(PASS_DATE) >= '01/11/2017';
/
spool off
exit



Может есть какой то более простой способ обновления МВ без использования REFRESH FAST и прочего?
Возможно зря залез в какие то дебри и все можно сделать проще.

Поршу помочь разобраться.
...
Рейтинг: 0 / 0
Обновление материализованного представления
    #39560409
RomanCFTНе могу понять в чем проблема.Ты добавил query rewrite и предваряя следующую ошибку - заменил refresh force на fast.
...
Рейтинг: 0 / 0
Обновление материализованного представления
    #39560421
RomanCFT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
текст ошибки,

Спасибо, МВ создалось

Можете подсказать как будет выглядеть скрипт для обновления?
...
Рейтинг: 0 / 0
Обновление материализованного представления
    #39560430
зачем mv?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RomanCFTкак будет выглядеть скрипт для обновления?truncate/delete+insert
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление материализованного представления
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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