powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Materialized View & Log
18 сообщений из 18, страница 1 из 1
Materialized View & Log
    #32174767
WAR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил задействовать механизм snapshots.

Одна вьюшка: join двух фактических таблиц с группировкой и суммированием.
Создал Materialized View Log на эти две фактические таблицы с указанием нужных полей.

Все вроде как надо, НО в user_mviews вижу:

1. Fast_Refreshable = DirLoad
2. Last_Refresh_Type = Fast
3. Staleness = Stale (!!)
4. After_Fast_Refresh = Stale (!!)

Вопрос 1: Почему Stale? Почему не Fresh ??

Вопрос 2: До создания Materialized View Log было точно так же. Может этот Log вовсе и не нужен в данной случае?

Вопрос 3: Кто и когда чистит этот самый Log ?

Далее: уже из этой две другие вьюшки также join с группировкой и суммированием.

Вопрос 4: Могут ли быть в принципе эти mViews Fast Refreshable?
Вопрос 5: Может быть лучше все mViews собирать из фактических таблиц?

Создал парочку Refresh Groups для обновления своих mViews.
Сразу же столкнулся с DeadLock у юзеров.

Вопрос 6: Что и когда блокирует DBMS_REFRESH ? Откуда DeadLock ?


Заранее благодарен за оказанную помощь.
/Алексей/
...
Рейтинг: 0 / 0
Materialized View & Log
    #32174876
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Вопрос 2: До создания Materialized View Log было точно так же. Может этот Log вовсе и не нужен в данной случае?

Думаю, нужен, если ты собирешься пользоваться FAST REFRESH. Впрочем, попробуй удалить его, и наверняка наткнешься на невозможность FAST REFRESH'а.

>Вопрос 3: Кто и когда чистит этот самый Log ?

Лог чистится при обновлении мат.представлений, причем каждое зарегестрированное мат.представление при обновлении удаляет только относящиеся к нему записи лога.

>Вопрос 4: Могут ли быть в принципе эти mViews Fast Refreshable?

В Oracle9i Advanced Replication упоминаются Multitier Materialized Views: http://technet.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a96567/wnrep.htm#969701 По идее, почему бы им не быть Fast Refreshable. На "простых" такое прокатывает, а с использованием агрегирующих фукций надо проверить.

Вопрос 5: Может быть лучше все mViews собирать из фактических таблиц?

ИМХО чем проще мат.представление и чем меньше содержит агрегатов и джойнов - тем легче ее заставить обновляться через FAST REFRESH.

> Вопрос 6: Что и когда блокирует DBMS_REFRESH ? Откуда DeadLock ?

Посмотри сам на блоктровки, происходящие в системе во время обновления.
...
Рейтинг: 0 / 0
Materialized View & Log
    #32174938
>>Вопрос 2: До создания Materialized View Log было точно так же.
>Думаю, нужен, если ты собирешься пользоваться FAST REFRESH. Впрочем,
>попробуй удалить его, и наверняка наткнешься на невозможность FAST
>REFRESH'а.

Я ж и говорю, до того, как я создал Log, все выглядело точно так же как и после его создания. То бишь якобы view Fast_Refreshable и спокойно проходил Fast Refresh. При наличии Лога -- точно так же. Только вот статус -- Stale. Почему не Fresh ??


>>Вопрос 3: Кто и когда чистит этот самый Log ?
>Лог чистится при обновлении мат.представлений, причем каждое
>зарегестрированное мат.представление при обновлении удаляет только
>относящиеся к нему записи лога.

После Fast Refresh в Логе все по-прежнему осталось и продолжает пугающе быстро накапливаться...


>> Вопрос 6: Что и когда блокирует DBMS_REFRESH ? Откуда DeadLock ?
> Посмотри сам на блоктровки, происходящие в системе во время обновления.

Обновление происходит слишком быстро -- не успеваю.
Ну а ошибки у юзеров успевают появиться...
Может так и должно быть?
...
Рейтинг: 0 / 0
Materialized View & Log
    #32174965
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можешь привести запросы на создание таблиц, логов, мат.представлений? Может быть, усеченные до тестового варианта, достаточного для требуемой функциональности.
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175006
Хочется иметь Fast Refresh вот этой мат.вью
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE SNAPSHOT mview_ws0
REFRESH FORCE
AS
select id_ware_card, id_holder, id_store, series, selling_price,
        sum(remain) remain, count(remain) remain_cnt,
        sum(reserved) reserved, count(reserved) reserved_cnt,
        sum(rcpt_number) rcpt_number, count(rcpt_number) rcpt_number_cnt,
        sum(rcpt_amt_i_price) rcpt_amt_i_price, count(rcpt_amt_i_price) rcpt_amt_i_price_cnt,
        max(date_prihod) date_prihod,
        min(min_expire) min_expire, min(DOC_QUALITY) DOC_QUALITY
from mview_ws1
group by id_ware_card, id_holder, id_store, series, selling_price


Созданы Логи:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE SNAPSHOT LOG ON  "COFLEX" . "WARE_SERIES" 
TABLESPACE  "SNAPSHOTS" 
WITH PRIMARY KEY
(date_prihod,id_holder,id_seria,id_store,id_ware_card,
postavshik_name,rcpt_amt_i_price,rcpt_number,remain,reserved,
selling_price,status,vip_price)
INCLUDING NEW VALUES


Код: plaintext
1.
2.
3.
4.
5.
CREATE SNAPSHOT LOG ON  "COFLEX" . "SERIA" 
TABLESPACE  "SNAPSHOTS" 
WITH PRIMARY KEY
(DOC_QUALITY,EXPIRE,SERIES)
INCLUDING NEW VALUES
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175054
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понял. Как выглядят таблицы WARE_SERIES, SERIA и мат.представление mview_ws1? Вроде в такой последовательности все двигается, и потом уже строится mview_ws0.
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175084
Пардон, не ту mView показал...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE SNAPSHOT coflex.mview_ws1
REFRESH FORCE
AS
select ws.id_ware_card, ws.id_holder, ws.id_store, s.series, ws.selling_price,
        ws.vip_price, ws.postavshik_name,
        sum(ws.remain) remain, count(ws.remain) remain_cnt,
        sum(ws.reserved) reserved, count(ws.reserved) reserved_cnt,
        sum(ws.rcpt_number) rcpt_number, count(ws.rcpt_number) rcpt_number_cnt,
        sum(ws.rcpt_amt_i_price) rcpt_amt_i_price, count(ws.rcpt_amt_i_price) rcpt_amt_i_price_cnt,
        max(ws.date_prihod) date_prihod,
        min(s.expire) min_expire, min(s.DOC_QUALITY) DOC_QUALITY
from ware_series ws, seria s
where ws.status='A' and (ws.remain<> 0  or ws.reserved<> 0 ) and s.id=ws.id_seria
group by ws.id_ware_card, ws.id_holder, ws.id_store, s.series, ws.selling_price, ws.vip_price, ws.postavshik_name


Я вот что вспомнил: мне вроде бы нужно соответствующий Primary Key в мат.вью создать? Я делаю все это впервые, пока еще не прочувствовал взаимосвязи разных запчастей...

Ну а таблицы выглядят так:

SERIA
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE coflex.seria
    (id                             NUMBER( 22 ) NOT NULL,
    version                        NUMBER( 2 ),
    owner                          NUMBER( 22 ) NOT NULL,
    short_name                     VARCHAR2( 50 ) DEFAULT '~' NOT NULL,
    id_ware_card                   NUMBER( 22 ) NOT NULL,
    series                         VARCHAR2( 50 ) DEFAULT '~' NOT NULL,
    gtd                            VARCHAR2( 30 ),
    id_gtd_country                 NUMBER( 22 ),
    expire                         DATE,
    doc_quality                    VARCHAR2( 50 )
  )


WARE_SERIES
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
CREATE TABLE coflex.ware_series
    (remain_amt_i_price             NUMBER( 22 , 2 ) DEFAULT  0  NOT NULL,
    rmn_invoice_amt                NUMBER( 22 , 2 ) DEFAULT  0  NOT NULL,
    remain_amt_r_price             NUMBER( 22 , 2 ) DEFAULT  0  NOT NULL,
    rcpt_amt_i_price               NUMBER( 22 , 2 ) DEFAULT  0  NOT NULL,
    rcpt_amt_r_price               NUMBER( 22 , 2 ) DEFAULT  0  NOT NULL,
    store_row                      VARCHAR2( 10 ),
    store_shelving                 VARCHAR2( 10 ),
    store_shelf                    VARCHAR2( 10 ),
    store_site                     VARCHAR2( 10 ),
    short_name                     VARCHAR2( 50 ) NOT NULL,
    nds_rate                       NUMBER( 7 , 2 ) DEFAULT  0  NOT NULL,
    id_holder                      NUMBER( 22 ) NOT NULL,
    stimul_rate                    NUMBER( 4 , 1 ) DEFAULT  0  NOT NULL,
    real                           CHAR( 1 ) DEFAULT  0  NOT NULL,
    invoice_amt                    NUMBER( 20 , 2 ) DEFAULT  0  NOT NULL,
    exp_amt_i_price                NUMBER( 20 , 2 ) DEFAULT  0  NOT NULL,
    exp_amt_r_price                NUMBER( 20 , 2 ) DEFAULT  0  NOT NULL,
    depreciated_cost               NUMBER( 20 , 2 ) DEFAULT  0  NOT NULL,
    id_seria                       NUMBER( 22 ) NOT NULL,
    owner                          NUMBER( 22 ) NOT NULL,
    id                             NUMBER( 22 ) NOT NULL,
    id_ware_card                   NUMBER( 22 ) NOT NULL,
    id_store                       NUMBER( 22 ) NOT NULL,
    remain                         NUMBER( 15 , 2 ) DEFAULT  0  NOT NULL,
    version                        NUMBER( 2 ),
    waiting_for_receipt            NUMBER( 1 ) DEFAULT  0  NOT NULL,
    rcpt_number                    NUMBER( 15 , 2 ) DEFAULT  0  NOT NULL,
    exp_number                     NUMBER( 15 , 2 ) DEFAULT  0  NOT NULL,
    reserved                       NUMBER( 15 , 2 ) DEFAULT  0  NOT NULL,
    commission                     NUMBER( 1 ) DEFAULT  0  NOT NULL,
    selling_price                  NUMBER( 9 , 3 ) DEFAULT  0  NOT NULL,
    max_price                      NUMBER( 9 , 3 ) DEFAULT  0  NOT NULL,
    vip_price                      NUMBER( 9 , 3 ) DEFAULT  0  NOT NULL,
    opt_price                      NUMBER( 9 , 3 ) DEFAULT  0  NOT NULL,
    min_price                      NUMBER( 9 , 3 ) DEFAULT  0  NOT NULL,
    id_valuta                      NUMBER( 22 ),
    price_in_valuta                NUMBER( 9 , 2 ) DEFAULT  0  NOT NULL,
    status                         CHAR( 1 ) DEFAULT 'N' NOT NULL,
    first_price                    NUMBER( 9 , 3 ) DEFAULT  0  NOT NULL,
    gtd                            VARCHAR2( 30 ),
    id_first_doc                   NUMBER( 22 ),
    id_gtd_country                 NUMBER( 22 ),
    id_first_doc_ret               NUMBER( 22 ),
    date_prihod                    DATE,
    postavshik_name                VARCHAR2( 50 ),
    id_postavshik                  NUMBER( 22 )
)
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175145
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А первичные ключи в таблицах какие?

По поводу создания первичного ключа в мат.представлении думаю так, эта тема перекликается с вопросом, какие поля включать в лог: в нем должны быть все поля, используемые в агрегатах и джойнах запроса. Если ПК есть, то можно создать лог WITH PRIMARY KEY; тогда поля, входящие в него, дополнительно перечислять не надо. Если ПК у таблицы нет, тогда следует создавать лог WITH ROWID с перечислением всех требуемых полей. Как хочешь, в общем.
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175170
Конечно, PK есть -- это простой ID.

Итак, как я это понял: я пишу в лог все поля, которые используются во вью, на вью делаю собственный PK -- все поля по которым я делаю group by, вот тогда и становится возможным Fast Refresh. Так?
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175195
Как оказалось Oracle 8.1.6i сам создал индекс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE UNIQUE INDEX coflex.i_snap$_mview_ws1 ON coflex.mview_ws1
  (
    id_ware_card                    ASC,
    id_holder                       ASC,
    id_store                        ASC,
    series                          ASC,
    selling_price                   ASC,
    vip_price                       ASC,
    postavshik_name                 ASC
  )


Так почему же не происходит Fast Refresh ?
А он все-таки не происходит, mView остается в статусе Stale.
Да и из Лога ничто не удаляется...

Сейчас установил для вью Refresh Complete и выполнил Refresh (подтолкнул Job обновления) -- теперь она Fresh.

Какой еще "танец с бубном" мне следует разучить ? :)
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175196
Как оказалось Oracle 8.1.6i сам создал индекс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE UNIQUE INDEX coflex.i_snap$_mview_ws1 ON coflex.mview_ws1
  (
    id_ware_card                    ASC,
    id_holder                       ASC,
    id_store                        ASC,
    series                          ASC,
    selling_price                   ASC,
    vip_price                       ASC,
    postavshik_name                 ASC
  )


Так почему же не происходит Fast Refresh ?
А он все-таки не происходит, mView остается в статусе Stale.
Да и из Лога ничто не удаляется...

Сейчас установил для вью Refresh Complete и выполнил Refresh (подтолкнул Job обновления) -- теперь она Fresh.

Какой еще "танец с бубном" мне следует разучить ? :)
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175201
<TABLE>
<TBODY>
<TR bgcolor=#afafaf>
<TD><B>OWNER</B></TD><TD><B>MVIEW_NAME</B></TD><TD><B>CONTAINER_NAME</B></TD><TD><B>QUERY</B></TD><TD><B>QUERY_LEN</B></TD><TD><B>UPDATABLE</B></TD><TD><B>UPDATE_LOG</B></TD><TD><B>MASTER_ROLLBACK_SEG</B></TD><TD><B>MASTER_LINK</B></TD><TD><B>REWRITE_ENABLED</B></TD><TD><B>REWRITE_CAPABILITY</B></TD><TD><B>REFRESH_MODE</B></TD><TD><B>REFRESH_METHOD</B></TD><TD><B>BUILD_MODE</B></TD><TD><B>FAST_REFRESHABLE</B></TD><TD><B>LAST_REFRESH_TYPE</B></TD><TD><B>LAST_REFRESH_DATE</B></TD><TD><B>STALENESS</B></TD><TD><B>AFTER_FAST_REFRESH</B></TD><TD><B>COMPILE_STATE</B></TD></TR><TR>
<TD>COFLEX</TD>
<TD>MVIEW_OST0</TD>
<TD>MVIEW_OST0</TD>
<TD>select wc.id, wc.name, ws.id_holder, wc.ed, wc.nds_rate, wc.pack, wc.builder_name PRODUCER_NAME,
st.id st_id, st.short_name store, ws.series, ws.date_prihod, ws.min_expire, ws.DOC_QUALITY,
ws.remain, ws.reserved, ws.rcpt_number, ws.rcpt_amt_i_price,
round(ws.selling_price*(100+wc.nds_rate)/100,2) selling_price_nds,
decode(ws.rcpt_number,0,0,round(ws.rcpt_amt_i_price/ws.rcpt_number*(100+wc.nds_rate)/100,2)) i_price
from mview_ws0 ws, ware_card wc, store st
where wc.id=ws.id_ware_card
and st.id=ws.id_store
and wc.is_service=0
and st.code='Ðàñõîä'
</TD>
<TD>584</TD>
<TD>N</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>N</TD>
<TD>TEXTMATCH</TD>
<TD>DEMAND</TD>
<TD>FORCE</TD>
<TD>IMMEDIATE</TD>
<TD>NO</TD>
<TD>COMPLETE</TD>
<TD>03-Èþí-2003</TD>
<TD>FRESH</TD>
<TD>NA</TD>
<TD>NEEDS_COMPILE</TD>
</TR>
<TR>
<TD>COFLEX</TD>
<TD>MVIEW_OST1</TD>
<TD>MVIEW_OST1</TD>
<TD>select wc.id, wc.name, ws.id_holder, wc.ed, wc.nds_rate, wc.pack, wc.builder_name PRODUCER_NAME,
st.id st_id, st.short_name store, ws.series, ws.date_prihod, ws.min_expire, ws.DOC_QUALITY,
ws.remain, ws.reserved, ws.rcpt_number, ws.rcpt_amt_i_price, ws.postavshik_name postavshik,
round(ws.vip_price*(100+wc.nds_rate)/100,2) vip_price_nds,
round(ws.selling_price*(100+wc.nds_rate)/100,2) selling_price_nds,
decode(ws.rcpt_number,0,0,round(ws.rcpt_amt_i_price/ws.rcpt_number*(100+wc.nds_rate)/100,2)) i_price
from mview_ws1 ws, ware_card wc, store st
where wc.id=ws.id_ware_card
and st.id=ws.id_store
and wc.is_service=0
and st.code='Ðàñõîä'
</TD>
<TD>681</TD>
<TD>N</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>N</TD>
<TD>TEXTMATCH</TD>
<TD>DEMAND</TD>
<TD>FORCE</TD>
<TD>IMMEDIATE</TD>
<TD>NO</TD>
<TD>COMPLETE</TD>
<TD>03-Èþí-2003</TD>
<TD>FRESH</TD>
<TD>NA</TD>
<TD>NEEDS_COMPILE</TD>
</TR>
<TR>
<TD>COFLEX</TD>
<TD>MVIEW_SVOD_OPLAT0</TD>
<TD>MVIEW_SVOD_OPLAT0</TD>
<TD>select gr.id_otdel id, gr.otdel manager, gr.id_otdel_parent,
cli_we.id id_we,
cli_we.name we_name,
round(sum(ss.otpisano)) otpisano,
round(sum(ss.dolg)) dolg,
round(sum(ss.prosroch)) prosroch,
round(sum(ss.pereplata)) pereplata,
round(sum(ss.calc_premia)) calc_premia,
round(sum(ss.calc_skidka)) calc_skidka,
round(sum(ss.summa)) summa,
round(sum(ss.oplata)) oplata,
round(sum(ss.nacenka)) nacenka,
round(sum(ss.oplata2002)) oplata2002,
round(sum(ss.skidka)) skidka,
round(sum(ss.predoplata)) predoplata,
round(sum(ss.prednacenka)) prednacenka
from view_super_otdel_sotr_list gr, ur_lico cli_we,
(
select d.id_cli_from id_we, d.id_ag_manager,
sum(d.eeusr+d.bedsr) otpisano,
sum(d.eeunr+d.bednr) dolg,
sum(decode(sign(d.doc_date_oplat-sysdate),
-1,d.eeunr+d.bednr,0)) prosroch,
sum(0) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(0) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, type_document td, vid_oplat v
where f.id=d.id_cli_from and c.id=d.id_cli_to
and td.id=d.id_doc_template
and v.id(+)=d.id_vid_oplat and nvl(v.notes,'?')<>'Âûïëàòà ñêèäêè'
and td.is_dolg=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
group by d.id_cli_from, d.id_ag_manager
union all
select d.id_cli_to id_we, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(d.eeunr+d.bednr) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(d.eeusr+d.bedsr) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, type_document td, vid_oplat vo
where f.id=d.id_cli_to and c.id=d.id_cli_from
and td.id=d.id_doc_template
and vo.id=d.id_vid_oplat
and td.is_dolg=1 and prihod_money=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
and d.eeusr+d.bedsr <> 0
and vo.name not like 'Íà÷àëüíîå ñàëüäî Ïîñòàâùèêè%'
group by d.id_cli_to, d.id_ag_manager
union all
select d.id_cli_from id_we, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(0) pereplata,
sum(sli.premia) calc_premia,
sum(sli.skidka) calc_skidka,
sum(0) summa,
sum(decode(year(sli.op_date),2002,0,
sli.distrib_sum+sli.nds)) oplata,
sum(decode(year(d.doc_date),2002,0,
(sli.distrib_sum+sli.nds)
*(1-d.biusr/d.eeusr))) nacenka,
sum(decode(year(d.doc_date),2002,
sli.distrib_sum+sli.nds,0)) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, shablon_link sl, shablon_link_inst sli
where f.id=d.id_cli_from and c.id=d.id_cli_to
and sli.id_rdoc=d.id and sl.id=sli.id_shb_lnk
and sl.is_dolg_update=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
and d.eeusr <> 0
and sli.distrib_sum+sli.nds <> 0
group by d.id_cli_from, d.id_ag_manager
union all
select d.id_cli_from id_we, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(0) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(0) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(d.eeunr+d.bednr) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, vid_oplat v
where v.id=d.id_vid_oplat and v.notes='Âûïëàòà ñêèäêè'
group by d.id_cli_from, d.id_ag_manager
) ss
where gr.id_sotrudnik=ss.id_ag_manager
and cli_we.id=ss.id_we
group by gr.id_otdel, gr.otdel, gr.id_otdel_parent,
cli_we.id,
cli_we.name


</TD>
<TD>3835</TD>
<TD>N</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>DEMAND</TD>
<TD>FORCE</TD>
<TD>IMMEDIATE</TD>
<TD>NO</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>NA</TD>
<TD>ERROR</TD>
</TR>
<TR>
<TD>COFLEX</TD>
<TD>MVIEW_SVOD_OPLAT1</TD>
<TD>MVIEW_SVOD_OPLAT1</TD>
<TD>select gr.id_sotrudnik id, gr.sotrudnik manager, cli_we.id id_we, cli_we.name we_name, gr.id_otdel,
round(sum(ss.otpisano)) otpisano,
round(sum(ss.dolg)) dolg,
round(sum(ss.prosroch)) prosroch,
round(sum(ss.pereplata)) pereplata,
round(sum(ss.calc_premia)) calc_premia,
round(sum(ss.calc_skidka)) calc_skidka,
round(sum(ss.summa)) summa,
round(sum(ss.oplata)) oplata,
round(sum(ss.nacenka)) nacenka,
round(sum(ss.oplata2002)) oplata2002,
round(sum(ss.skidka)) skidka,
round(sum(ss.predoplata)) predoplata,
round(sum(ss.prednacenka)) prednacenka
from view_super_otdel_sotr_list gr, ur_lico cli_we,
(
select d.id_cli_from id_we, d.id_ag_manager,
sum(d.eeusr+d.bedsr) otpisano,
sum(d.eeunr+d.bednr) dolg,
sum(decode(sign(d.doc_date_oplat-sysdate),
-1,d.eeunr+d.bednr,0)) prosroch,
sum(0) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(0) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, type_document td, vid_oplat v
where f.id=d.id_cli_from and c.id=d.id_cli_to
and td.id=d.id_doc_template
and v.id(+)=d.id_vid_oplat and nvl(v.notes,'?')<>'Âûïëàòà ñêèäêè'
and td.is_dolg=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
group by d.id_cli_from, d.id_ag_manager
union all
select d.id_cli_to id_we, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(d.eeunr+d.bednr) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(d.eeusr+d.bedsr) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, type_document td
where f.id=d.id_cli_to and c.id=d.id_cli_from
and td.id=d.id_doc_template
and td.is_dolg=1 and prihod_money=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
and d.eeusr+d.bedsr <> 0
group by d.id_cli_to, d.id_ag_manager
union all
select d.id_cli_from id_we, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(0) pereplata,
sum(sli.premia) calc_premia,
sum(sli.skidka) calc_skidka,
sum(0) summa,
sum(decode(year(sli.op_date),2002,0,
sli.distrib_sum+sli.nds)) oplata,
sum(decode(year(d.doc_date),2002,0,
(sli.distrib_sum+sli.nds)
*(1-d.biusr/d.eeusr))) nacenka,
sum(decode(year(d.doc_date),2002,
sli.distrib_sum+sli.nds,0)) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, shablon_link sl, shablon_link_inst sli
where f.id=d.id_cli_from and c.id=d.id_cli_to
and sli.id_rdoc=d.id and sl.id=sli.id_shb_lnk
and sl.is_dolg_update=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
and d.eeusr <> 0
and sli.distrib_sum+sli.nds <> 0
group by d.id_cli_from, d.id_ag_manager
union all
select d.id_cli_from id_we, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(0) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(0) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(d.eeunr+d.bednr) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, vid_oplat v
where v.id=d.id_vid_oplat and v.notes='Âûïëàòà ñêèäêè'
group by d.id_cli_from, d.id_ag_manager
) ss
where gr.id_sotrudnik=ss.id_ag_manager
and cli_we.id=ss.id_we
group by gr.id_sotrudnik, gr.sotrudnik, gr.id_otdel,
cli_we.id, cli_we.name
</TD>
<TD>3725</TD>
<TD>N</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>DEMAND</TD>
<TD>FORCE</TD>
<TD>IMMEDIATE</TD>
<TD>NO</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>NA</TD>
<TD>ERROR</TD>
</TR>
<TR>
<TD>COFLEX</TD>
<TD>MVIEW_SVOD_OPLAT2</TD>
<TD>MVIEW_SVOD_OPLAT2</TD>
<TD>select s.id, s.short_name manager, s.id_fiz_lico,
cli_we.id id_we, cli_we.name we_name,
cli_to.id id_cli, cli_to.name cli_name,
round(sum(ss.otpisano)) otpisano,
round(sum(ss.dolg)) dolg,
round(sum(ss.prosroch)) prosroch,
round(sum(ss.pereplata)) pereplata,
round(sum(ss.calc_premia)) calc_premia,
round(sum(ss.calc_skidka)) calc_skidka,
round(sum(ss.summa)) summa,
round(sum(ss.oplata)) oplata,
round(sum(ss.nacenka)) nacenka,
round(sum(ss.oplata2002)) oplata2002,
round(sum(ss.skidka)) skidka,
round(sum(ss.predoplata)) predoplata,
round(sum(ss.prednacenka)) prednacenka
from sotrudnik s, ur_lico cli_we, ur_lico cli_to,
(
select d.id_cli_from id_we, d.id_cli_to id_cli, d.id_ag_manager,
sum(d.eeusr+d.bedsr) otpisano,
sum(d.eeunr+d.bednr) dolg,
sum(decode(sign(d.doc_date_oplat-sysdate),
-1,d.eeunr+d.bednr,0)) prosroch,
sum(0) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(0) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, type_document td, vid_oplat v
where f.id=d.id_cli_from and c.id=d.id_cli_to
and td.id=d.id_doc_template
and v.id(+)=d.id_vid_oplat and nvl(v.notes,'?')<>'Âûïëàòà ñêèäêè'
and td.is_dolg=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
group by d.id_cli_from, d.id_cli_to, d.id_ag_manager
union all
select d.id_cli_to id_we, d.id_cli_from id_cli, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(d.eeunr+d.bednr) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(0) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, type_document td
where f.id=d.id_cli_to and c.id=d.id_cli_from
and td.id=d.id_doc_template
and td.is_dolg=1 and prihod_money=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
and d.eeunr+d.bednr <> 0
group by d.id_cli_to, d.id_cli_from, d.id_ag_manager
union all
select d.id_cli_to id_we, d.id_cli_from id_cli, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(0) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(d.eeunr+d.bednr) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, type_document td
where f.id=d.id_cli_to and c.id=d.id_cli_from
and td.id=d.id_doc_template
and td.is_dolg=1 and prihod_money=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
and d.eeunr+d.bednr <> 0
group by d.id_cli_to, d.id_cli_from, d.id_ag_manager
union all
select d.id_cli_from id_we, d.id_cli_to id_cli, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(0) pereplata,
sum(sli.premia) calc_premia,
sum(sli.skidka) calc_skidka,
sum(sli.distrib_sum+sli.nds) summa,
sum(decode(year(sli.op_date),2002,0,
sli.distrib_sum+sli.nds)) oplata,
sum(decode(year(d.doc_date),2002,0,
(sli.distrib_sum+sli.nds)
*(1-d.biusr/d.eeusr))) nacenka,
sum(decode(year(d.doc_date),2002,
sli.distrib_sum+sli.nds,0)) oplata2002,
sum(0) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, ur_lico f, ur_lico c, shablon_link sl, shablon_link_inst sli
where f.id=d.id_cli_from and c.id=d.id_cli_to
and sli.id_rdoc=d.id and sl.id=sli.id_shb_lnk
and sl.is_dolg_update=1
and f.is_we=1 and c.is_we=0 and c.is_pokupatel=1
and d.eeusr <> 0
and sli.distrib_sum+sli.nds <> 0
group by d.id_cli_from, d.id_cli_to, d.id_ag_manager
union all
select d.id_cli_from id_we, d.id_cli_to id_cli, d.id_ag_manager,
sum(0) otpisano,
sum(0) dolg,
sum(0) prosroch,
sum(0) pereplata,
sum(0) calc_premia,
sum(0) calc_skidka,
sum(0) summa,
sum(0) oplata,
sum(0) nacenka,
sum(0) oplata2002,
sum(d.eeunr+d.bednr) skidka,
sum(0) predoplata,
sum(0) prednacenka
from document d, vid_oplat v
where v.id=d.id_vid_oplat and v.notes='Âûïëàòà ñêèäêè'
group by d.id_cli_from, d.id_cli_to, d.id_ag_manager
) ss
where s.id=ss.id_ag_manager
and cli_we.id=ss.id_we
and cli_to.id=ss.id_cli
group by s.id, s.short_name, s.id_fiz_lico,
cli_we.id, cli_we.name, cli_to.id, cli_to.name
</TD>
<TD>4642</TD>
<TD>N</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>DEMAND</TD>
<TD>FORCE</TD>
<TD>IMMEDIATE</TD>
<TD>NO</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>NA</TD>
<TD>ERROR</TD>
</TR>
<TR>
<TD>COFLEX</TD>
<TD>MVIEW_WS0</TD>
<TD>MVIEW_WS0</TD>
<TD>select id_ware_card, id_holder, id_store, series, selling_price,
sum(remain) remain, count(remain) remain_cnt,
sum(reserved) reserved, count(reserved) reserved_cnt,
sum(rcpt_number) rcpt_number, count(rcpt_number) rcpt_number_cnt,
sum(rcpt_amt_i_price) rcpt_amt_i_price, count(rcpt_amt_i_price) rcpt_amt_i_price_cnt,
max(date_prihod) date_prihod,
min(min_expire) min_expire, min(DOC_QUALITY) DOC_QUALITY
from mview_ws1
group by id_ware_card, id_holder, id_store, series, selling_price

</TD>
<TD>534</TD>
<TD>N</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>N</TD>
<TD>GENERAL</TD>
<TD>DEMAND</TD>
<TD>FORCE</TD>
<TD>IMMEDIATE</TD>
<TD>NO</TD>
<TD>COMPLETE</TD>
<TD>03-Èþí-2003</TD>
<TD>FRESH</TD>
<TD>NA</TD>
<TD>NEEDS_COMPILE</TD>
</TR>
<TR>
<TD>COFLEX</TD>
<TD>MVIEW_WS1</TD>
<TD>MVIEW_WS1</TD>
<TD>select ws.id_ware_card, ws.id_holder, ws.id_store, s.series, ws.selling_price,
ws.vip_price, ws.postavshik_name,
sum(ws.remain) remain, count(ws.remain) remain_cnt,
sum(ws.reserved) reserved, count(ws.reserved) reserved_cnt,
sum(ws.rcpt_number) rcpt_number, count(ws.rcpt_number) rcpt_number_cnt,
sum(ws.rcpt_amt_i_price) rcpt_amt_i_price, count(ws.rcpt_amt_i_price) rcpt_amt_i_price_cnt,
max(ws.date_prihod) date_prihod,
min(s.expire) min_expire, min(s.DOC_QUALITY) DOC_QUALITY
from ware_series ws, seria s
where ws.status='A' and (ws.remain<>0 or ws.reserved<>0) and s.id=ws.id_seria
group by ws.id_ware_card, ws.id_holder, ws.id_store, s.series, ws.selling_price, ws.vip_price, ws.postavshik_name
</TD>
<TD>756</TD>
<TD>N</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>&nbsp</TD>
<TD>N</TD>
<TD>TEXTMATCH</TD>
<TD>DEMAND</TD>
<TD>COMPLETE</TD>
<TD>IMMEDIATE</TD>
<TD>DIRLOAD</TD>
<TD>COMPLETE</TD>
<TD>03-Èþí-2003</TD>
<TD>FRESH</TD>
<TD>FRESH</TD>
<TD>NEEDS_COMPILE</TD>
</TR>
</TBODY></TABLE>
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175211
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет, не совсем. Кстати, и твое мат.представление у меня на FAST REFRESH не уходит. Есть такая глава в документации: General Restrictions on Fast Refresh , надо искать случай про мат.представления, содержащие джойны и агрегаты.
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175495
Ознакомился с указанной ссылкой.
Все это я уже штудировал у себя локально.
Так и не догнал, чем ему моя вью не нравится.
Будет пока Refresh Complete, пока не поумнею... :)
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175517
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО во-первых, даже если убрать таблицу SERIA из твоего мат.предсталения, то все равно не соблюдаются условия для FAST REFRESH'а, с "только агрегатами", а именно:

- лог создавался без WITH SEQUENCE, ROWID;
- нет count(*).

А для джойна недостает ROWID'а обеих таблиц.
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175572
Чуть подробнее, плиз.

ИМХО во-первых, даже если убрать таблицу SERIA из твоего мат.предсталения, то все равно не соблюдаются условия для FAST REFRESH'а, с "только агрегатами", а именно:

- лог создавался без WITH SEQUENCE, ROWID;
- нет count(*).

А для джойна недостает ROWID'а обеих таблиц.

Я не понял, что за SEQUENCE . Создавал Логи из DBA Studio (у меня SQLnav v4.02c [build 148] вообще про Логи ничего не знает :) и в документации я этот момент как-то упустил...

я и так навтыкал на все SUM() соответствующие COUNT() как сказано в документации (мне они не нужны), но про COUNT(*) не понял -- это где и зачем?
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175585
И все-таки очень странно, что Dependencies показывает зависимость мат.вью только от таблицы SERIA. Это мне кажется более чем странно...
...
Рейтинг: 0 / 0
Materialized View & Log
    #32175902
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про COUNT(*) я прочитал в Restrictions on Fast Refresh on Materialized Views with Aggregates . Одно из требований там так и звучит: COUNT(*) must be specified . Далее, чуть выше: Specify the SEQUENCE clause if the table is expected to have a mix of inserts/direct-loads, deletes, and updates . Посмотри Example 8-1 Creating a Materialized View: Example 1 с указанием слова SEQUENCE при создании лога.

А теперь самое неприятное: требование на включение ROWID'ов всех таблиц в Materialized Views Containing Only Joins может помешать созданию мат.представления с REFRESH FAST, содержащего и джойны, и агрегаты. Потому что придется эти самые ROWID'ы указывать в GROUP BY.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Materialized View & Log
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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