powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Materialized Views
18 сообщений из 18, страница 1 из 1
Materialized Views
    #32101016
Есть куча таблиц, из них строится сложное представление,
как на их осное создать Materialized View , посоветовали сказали что очень поможет
...
Рейтинг: 0 / 0
Materialized Views
    #32101023
Ekuku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MV бывают разные..
и в Oracle 9 более продвинутые чем в Oracle 8
---
какой у Вассервер и какой тип соединения источников -таблиц?
...
Рейтинг: 0 / 0
Materialized Views
    #32101028
Бор.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
8.1.7 Соединение - просто берется одна таблица из нее берется ID затем по этому ID ведется ряд расчетов (

select id,f_1(id),f_2(id),f_3(id)....
from tab 1
...
Рейтинг: 0 / 0
Materialized Views
    #32101078
Ekuku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из Oracle doc :
Oracle8i SQL Reference Release 3 (8.1.7) Part Number A85397-01
--------------------
..если вы хотите чтобы MV обновлялось непосредственно на commit
то примерно так :
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE MATERIALIZED VIEW mv1 REFRESH FAST ON COMMIT
   BUILD IMMEDIATE
   AS SELECT t.month, p.prod_name, SUM(f.sales) AS sum_sales
      FROM time t, product p, fact f
      WHERE f.curDate = t.curDate AND f.item = p.item
      GROUP BY t.month, p.prod_name;


..если вы хотите чтобы MV обновлялось по расписанию, то примерно так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE MATERIALIZED VIEW all_emps 
   PCTFREE  5  PCTUSED  60  
   TABLESPACE users 
   STORAGE INITIAL 50K NEXT 50K 
   USING INDEX STORAGE (INITIAL 25K NEXT 25K)
   REFRESH START WITH ROUND(SYSDATE +  1 ) +  11 / 24  
   NEXT NEXT_DAY(TRUNC(SYSDATE, 'MONDAY') +  15 / 24  
   AS SELECT * FROM fran.emp@dallas 
         UNION
      SELECT * FROM marco.emp@balt; 
...
Рейтинг: 0 / 0
Materialized Views
    #32101085
Ekuku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..хотел еще добавить,что в,принципе,MV вещь очень хорошая и полезная,но весьма капризная при создании.. ( может только у меня ? )
Наверно,только в 9.2-ом они ее стабилизировали,развили и довели до соответствия ожидаемому по описанию в доке..
...
Рейтинг: 0 / 0
Materialized Views
    #32101092
Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Б.
Гость
я пишу:

CREATE MATERIALIZED VIEW m_v1
REFRESH fast on commit
AS
SELECT
sum(n) from aaa


а оно выдает
The following error has occurred:

ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view
...
Рейтинг: 0 / 0
Materialized Views
    #32101105
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО refresh fast on commit для снапшотов, содержащих агрегаты, не бывает, только refresh complete или, что в этом случае одно и тоже, refresh force:
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96525/e9858.htm#82578
Во-вторых, on commit возможен только для таблицы и снапшота в одной БД:
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96524/c11schem.htm#23282
...
Рейтинг: 0 / 0
Materialized Views
    #32101124
Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Б.
Гость
А не подскажите как тогда написать в данном случае, что бы оно каждый раз обновляло при закоммиченном изменении в табл. ааа
...
Рейтинг: 0 / 0
Materialized Views
    #32101149
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут бы надо знать точный вид мат. представления. Поскольку у меня получилость следующее:
Код: plaintext
1.
2.
3.
4.
5.
create table test (
    test_id integer
  , value number( 9 )
  , constraint pk_test primary key (test_id)
)

Вот такой снапшот создается:
Код: plaintext
1.
2.
3.
4.
5.
6.
create materialized view mv_test
refresh complete on commit
as
select sum(value) sum_value
from test;
/

Вот такой нет (группировку добавил):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create materialized view mv_test
refresh complete on commit
as
select sum(value) sum_value
from test
group by test_id;
/

Говорит:
ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view

А вот такой создается (поле группировки вытащил):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create materialized view mv_test
refresh complete on commit
as
select test_id, sum(value) sum_value
from test
group by test_id;
/


Вот почему-то брезжит мысль, что ему требуется в снапшоте иметь потенциальный ключ, по которому он бодро строит уникальный индекс. Может от этого и стоит отталкиваться.

А может стоит уйти он refresh on commit на обновление по заданию, или достоверность данных настолько критична?
...
Рейтинг: 0 / 0
Materialized Views
    #32101216
Iva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Iva
Гость
проблема в том, что при использовании в снапшоте агрегатов или достаточно сложных функций вы получите рефреш комплит,как справедливо заметил один из предыдущих ораторов, что, как правило, неприемлемо. А не лучше ли создать табличку результатов вместо матвью, а на базовые таблицы прикрутить по триггеру, которые будут пересчитывать изменения? Query rewrit'а при этом, естественно, не будет.
...
Рейтинг: 0 / 0
Materialized Views
    #32101407
Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Б.
Гость
Честно говоря попробовал каждый из примеров и не один не проходит -пишет

ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view

(короче так ничего и не получилось)
...
Рейтинг: 0 / 0
Materialized Views
    #32101413
Ekuku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--> Павел, не надо отчаиваться, в системах OracleDB всегда все решается.
К сожалению, иногда только с привлечением опытных администраторов Oracle DBA. Я Вам рекомендую опубликовать полный текст Вашего SQL и добрые люди Вам помогут.. :)
...
Рейтинг: 0 / 0
Materialized Views
    #32101428
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что сказать... не все тут так просто. Кстати, я, похоже, ошибался, говоря, что refresh fast для агрегатов невозможен. В Oracle8i Data Warehousing Guide эта тема специально упоминается:
http://download-west.oracle.com/docs/cd/A87860_01/doc/server.817/a76994/mv.htm#42151
У меня Oracle 9.2.0.1, может быть в нем что-то поменялось. А попробуй выполнить пример из документации на тему " Single-Table Aggregate Materialized Views":
http://download-west.oracle.com/docs/cd/A87860_01/doc/server.817/a76994/mv.htm#42194

К сожалению, я не знаю, откуда взять скрипт на создание тестовых таблиц типа FACT (может, кто подскажет?), но следующий скрипт у меня прошел без проблем:
Код: plaintext
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.
create table fact (
    store_key number( 9 )
  , time_key  number( 9 )
  , dollar_sales number( 15 ,  4 )
  , unit_sales number( 15 ,  4 )
  , constraint pk_fact primary key (store_key, time_key)
)
/

create materialized view log on fact
  with rowid (store_key, time_key, dollar_sales, unit_sales)
  including new values;
/
create materialized view sum_sales
  parallel
  build immediate
  refresh fast on commit
  as
  select f.store_key, f.time_key,
         count(*) as count_grp,
  sum(f.dollar_sales) as sum_dollar_sales,
        count(f.dollar_sales) as count_dollar_sales,
  sum(f.unit_sales) as sum_unit_sales,
        count(f.unit_sales) as count_unit_sales
  from fact f
  group by f.store_key, f.time_key;
/ 
...
Рейтинг: 0 / 0
Materialized Views
    #32101429
Ekuku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...хотел еще напомнить ,что прежде чем создавать собственно MV надо предварительно на таблицы-источники создать журналы MV LOG
примерно так
Код: plaintext
1.
CREATE MATERIALIZED VIEW LOG ON emp WITH PRIMARY KEY; 

Oracle8i SQL Reference
Release 3 (8.1.7)
Part Number A85397-01
...
Рейтинг: 0 / 0
Materialized Views
    #32101465
Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Б.
Гость
Спасибо ДЕНИС, ваши скрипты прошли без проблем,
вроде даже немного начал разбираться.

Только вот такой вопрос, при коммите значительно больше времени
(перестаривает представление) можно ли что бы это перестроение происходи-
ло в другой сессии (иными словами говоря) что бы пользователь не змечал это.

(Очень презнателен, пиво или коньяк с меня гарантирован)
...
Рейтинг: 0 / 0
Materialized Views
    #32101482
new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати да лажа полная с такими представлениями
во посмотрел что Денис делает, все получается
а вот сам начал так вообще нефига не проходит:

create table tab_1
(id number (6) primary key ,col number(6));

create materialized view log on tab_1
with rowid (id,col)
including new values;

create materialized view tab_1_1
parallel
build immediate
refresh fast on commit
as
select f.id,count(*) as col_1,sum(f.col) as sum_1
from tab_1 f
group by f.id ;

ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view

(Може кто подскажет причину, что бы наконец то раз и навсегда разобраться
-- да и с меня Денису тоже пиво и коньяк....)
...
Рейтинг: 0 / 0
Materialized Views
    #32101496
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На refresh on commit вряд ли. Он ИМХО на то и рассчитан, чтобы все изменения шли в одной транзакции, которая потом либо зафиксируется, либо откатится. "В другой сессии" - это значит переходить на refresh on demand, соответственно с уменьшением достоверности.

2new one: к сожалению, я пока помочь не могу. У меня Oracle 9.2, так на нем твой скрипт прокатывает без проблем. Может, попозже из синтаксиса чего пойму, а пока для меня самого явилось открытием, что можно фаст-рефрешить снапшоты с агрегатами. Дока-рулез, чес-с-слово:)
...
Рейтинг: 0 / 0
Materialized Views
    #32101500
new one
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Денис, буду ждать...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Materialized Views
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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