|
|
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Решил задействовать механизм 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 ? Заранее благодарен за оказанную помощь. /Алексей/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 09:37:32 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
>Вопрос 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 ? Посмотри сам на блоктровки, происходящие в системе во время обновления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 11:28:40 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
>>Вопрос 2: До создания Materialized View Log было точно так же. >Думаю, нужен, если ты собирешься пользоваться FAST REFRESH. Впрочем, >попробуй удалить его, и наверняка наткнешься на невозможность FAST >REFRESH'а. Я ж и говорю, до того, как я создал Log, все выглядело точно так же как и после его создания. То бишь якобы view Fast_Refreshable и спокойно проходил Fast Refresh. При наличии Лога -- точно так же. Только вот статус -- Stale. Почему не Fresh ?? >>Вопрос 3: Кто и когда чистит этот самый Log ? >Лог чистится при обновлении мат.представлений, причем каждое >зарегестрированное мат.представление при обновлении удаляет только >относящиеся к нему записи лога. После Fast Refresh в Логе все по-прежнему осталось и продолжает пугающе быстро накапливаться... >> Вопрос 6: Что и когда блокирует DBMS_REFRESH ? Откуда DeadLock ? > Посмотри сам на блоктровки, происходящие в системе во время обновления. Обновление происходит слишком быстро -- не успеваю. Ну а ошибки у юзеров успевают появиться... Может так и должно быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 11:59:17 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
А можешь привести запросы на создание таблиц, логов, мат.представлений? Может быть, усеченные до тестового варианта, достаточного для требуемой функциональности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 12:14:46 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Хочется иметь Fast Refresh вот этой мат.вью Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Созданы Логи: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 12:47:34 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Не совсем понял. Как выглядят таблицы WARE_SERIES, SERIA и мат.представление mview_ws1? Вроде в такой последовательности все двигается, и потом уже строится mview_ws0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 13:03:04 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Пардон, не ту mView показал... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Я вот что вспомнил: мне вроде бы нужно соответствующий Primary Key в мат.вью создать? Я делаю все это впервые, пока еще не прочувствовал взаимосвязи разных запчастей... Ну а таблицы выглядят так: SERIA Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 13:21:09 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
А первичные ключи в таблицах какие? По поводу создания первичного ключа в мат.представлении думаю так, эта тема перекликается с вопросом, какие поля включать в лог: в нем должны быть все поля, используемые в агрегатах и джойнах запроса. Если ПК есть, то можно создать лог WITH PRIMARY KEY; тогда поля, входящие в него, дополнительно перечислять не надо. Если ПК у таблицы нет, тогда следует создавать лог WITH ROWID с перечислением всех требуемых полей. Как хочешь, в общем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 14:01:51 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Конечно, PK есть -- это простой ID. Итак, как я это понял: я пишу в лог все поля, которые используются во вью, на вью делаю собственный PK -- все поля по которым я делаю group by, вот тогда и становится возможным Fast Refresh. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 14:18:11 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Как оказалось Oracle 8.1.6i сам создал индекс: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Так почему же не происходит Fast Refresh ? А он все-таки не происходит, mView остается в статусе Stale. Да и из Лога ничто не удаляется... Сейчас установил для вью Refresh Complete и выполнил Refresh (подтолкнул Job обновления) -- теперь она Fresh. Какой еще "танец с бубном" мне следует разучить ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 14:32:12 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Как оказалось Oracle 8.1.6i сам создал индекс: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Так почему же не происходит Fast Refresh ? А он все-таки не происходит, mView остается в статусе Stale. Да и из Лога ничто не удаляется... Сейчас установил для вью Refresh Complete и выполнил Refresh (подтолкнул Job обновления) -- теперь она Fresh. Какой еще "танец с бубном" мне следует разучить ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 14:33:06 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
<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> </TD> <TD> </TD> <TD> </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> </TD> <TD> </TD> <TD> </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> </TD> <TD> </TD> <TD> </TD> <TD> </TD> <TD> </TD> <TD>DEMAND</TD> <TD>FORCE</TD> <TD>IMMEDIATE</TD> <TD>NO</TD> <TD> </TD> <TD> </TD> <TD> </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> </TD> <TD> </TD> <TD> </TD> <TD> </TD> <TD> </TD> <TD>DEMAND</TD> <TD>FORCE</TD> <TD>IMMEDIATE</TD> <TD>NO</TD> <TD> </TD> <TD> </TD> <TD> </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> </TD> <TD> </TD> <TD> </TD> <TD> </TD> <TD> </TD> <TD>DEMAND</TD> <TD>FORCE</TD> <TD>IMMEDIATE</TD> <TD>NO</TD> <TD> </TD> <TD> </TD> <TD> </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> </TD> <TD> </TD> <TD> </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> </TD> <TD> </TD> <TD> </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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 14:35:09 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Да нет, не совсем. Кстати, и твое мат.представление у меня на FAST REFRESH не уходит. Есть такая глава в документации: General Restrictions on Fast Refresh , надо искать случай про мат.представления, содержащие джойны и агрегаты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 14:41:31 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Ознакомился с указанной ссылкой. Все это я уже штудировал у себя локально. Так и не догнал, чем ему моя вью не нравится. Будет пока Refresh Complete, пока не поумнею... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 17:20:07 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
ИМХО во-первых, даже если убрать таблицу SERIA из твоего мат.предсталения, то все равно не соблюдаются условия для FAST REFRESH'а, с "только агрегатами", а именно: - лог создавался без WITH SEQUENCE, ROWID; - нет count(*). А для джойна недостает ROWID'а обеих таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 17:35:19 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Чуть подробнее, плиз. ИМХО во-первых, даже если убрать таблицу SERIA из твоего мат.предсталения, то все равно не соблюдаются условия для FAST REFRESH'а, с "только агрегатами", а именно: - лог создавался без WITH SEQUENCE, ROWID; - нет count(*). А для джойна недостает ROWID'а обеих таблиц. Я не понял, что за SEQUENCE . Создавал Логи из DBA Studio (у меня SQLnav v4.02c [build 148] вообще про Логи ничего не знает :) и в документации я этот момент как-то упустил... я и так навтыкал на все SUM() соответствующие COUNT() как сказано в документации (мне они не нужны), но про COUNT(*) не понял -- это где и зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 18:18:08 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
И все-таки очень странно, что Dependencies показывает зависимость мат.вью только от таблицы SERIA. Это мне кажется более чем странно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2003, 18:26:52 |
|
||
|
Materialized View & Log
|
|||
|---|---|---|---|
|
#18+
Про 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2003, 10:19:52 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32175585&tid=1990193]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 495ms |

| 0 / 0 |
