Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Materialized view, refresh 
:(
    Опции темы
KaKTyCc
Дата 26.3.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



Есть matview, которое необходимо обновлять например каждые 15 минут

Код

CREATE MATERIALIZED VIEW TEST.IP$LOT$OFFER2REQ 
TABLESPACE USERS1
NOCACHE
LOGGING
NOCOMPRESS
NOPARALLEL
BUILD IMMEDIATE
REFRESH COMPLETE
START WITH TO_DATE('26-мар-2007 14:30:00','dd-mon-yyyy hh24:mi:ss')
NEXT TRUNC(SYSDATE,'HH24') + (FLOOR(EXTRACT(MINUTE FROM (SYSDATE - TRUNC(SYSDATE)) DAY TO SECOND)/15)+1)*15 / 24 / 60   
WITH PRIMARY KEY
AS 
select distinct(req.id)       req_id
     , offer.id     ofr_id
     , 0            OVERFLOWED

  from ip$lots$offer    offer
     , ip$lot$request   req
     , exsu$date        d_req
     , exsu$date        d_offer
     , new$hier$cache   hc_offer
     , new$nt           nt
     , table(nt.t#id)   h1 
   , new$val      v1
   , new$val      v2
   , new$reestr    r1
   , new$reestr    r2
 where  r1.id = req.id
   and r2.id = offer.id
   and r1.pid != r2.pid
   and hc_offer.sid = offer.id 
   and hc_offer.pwr = 1
   and nt.id = req.id
   and nt.code = 'h1'
   and d_req.id         = req.id
   and d_req.pubdate    >= sysdate
   and d_offer.id       = offer.id
   and d_offer.pubdate  >= sysdate
   and hc_offer.mid   = h1.column_value
  and (    v1.id   = offer.LOT_TYPE
       and v2.id   = req.LOT_TYPE
       and v1.val  = v2.val
       )

   and (    (    req.price_actual_min <= offer.price_actual
             and req.price_actual_max >= offer.price_actual
            )
         or (    req.price_actual_min <= offer.price_internal
             and req.price_actual_max >= offer.price_internal
            )
       );


для этого matview создается regresh group 
Код

DECLARE
  SnapArray SYS.DBMS_UTILITY.UNCL_ARRAY;
BEGIN
  SnapArray(1) := 'TEST.IP$LOT$OFFER2REQ';
  SnapArray(2) := NULL;
  SYS.DBMS_REFRESH.MAKE (
    name => 'TEST.IP$LOT$OFFER2REQ'
    ,tab  => SnapArray
    ,next_date => TO_DATE('03/26/2007 14:30:00', 'MM/DD/YYYY HH24:MI:SS')
    ,interval  => 'TRUNC(SYSDATE,''HH24'') + (FLOOR(EXTRACT(MINUTE FROM (SYSDATE - TRUNC(SYSDATE)) DAY TO SECOND)/15)+1)*15 / 24 / 60   '
    ,implicit_destroy => TRUE
    ,lax => TRUE
    ,job => 0
    ,rollback_seg => NULL
    ,push_deferred_rpc => TRUE
    ,refresh_after_errors => FALSE
    ,purge_option => 1
    ,parallelism => 0
    ,heap_size => 0
  );
Commit;
END;
/


и job

Код

DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => 'dbms_refresh.refresh(''"TEST"."IP$LOT$OFFER2REQ"'');'
     ,next_date => to_date('26.03.2007 14:30:00','dd/mm/yyyy hh24:mi:ss')
     ,interval  => 'TRUNC(SYSDATE,''HH24'') + (FLOOR(EXTRACT(MINUTE FROM (SYSDATE - TRUNC(SYSDATE)) DAY TO SECOND)/15)+1)*15 / 24 / 60   '
     ,no_parse  => TRUE
    );
  SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
END;
/

commit;


Но после  job'a, matview становиться инвалидным объектом :-(
Не понимаю, что не так  smile , помогите 
--------------------
Мой блог
PM MAIL WWW   Вверх
KaKTyCc
Дата 26.3.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



если принудительно выполнить job, всё ок, сам же job в инвалид скидывает матвью....
--------------------
Мой блог
PM MAIL WWW   Вверх
DimW
Дата 26.3.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



KaKTyCc,  на сколько я помню рефресш мат. представления я делал так:

dbms_snapshot.refresh('mv_name');

таких проблем как у тебя не возникало.

p.s.  ora - 9.2.0.7  

Это сообщение отредактировал(а) DimW - 26.3.2007, 15:31
PM MAIL ICQ   Вверх
KaKTyCc
Дата 26.3.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



как только не крутил...

заметил что инавалидом матвью становиться после job'а, если данные не изменились, и матвью остается таким, каким был.
--------------------
Мой блог
PM MAIL WWW   Вверх
KaKTyCc
Дата 26.3.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



оказывается, если добавить какие то данные или удалить из таблицы участвующей в запросе, матвью становится инвалидным...
как побороть? не понимаю  smile 

нужна простая вещь, обновлять матвью каждые 15 минут...
--------------------
Мой блог
PM MAIL WWW   Вверх
LSD
Дата 26.3.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Создай простой MATERIALIZED VIEW и попробуй на нем,  JOB будет работать или нет.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
KaKTyCc
Дата 26.3.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



Матвью обновляется, и джобом, и если при создании матвью задать интервал.
Но матвью становится инвалидным, если например а таблицу ip$lots$offer добавляю запись...
и после этого, как приходит время обновления, матвью не обновляется...
если же я скомпилю матвью после добавления строки, оно как приходит время обновляется.
--------------------
Мой блог
PM MAIL WWW   Вверх
LSD
Дата 26.3.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



1. Зачем SnapArray(2) := NULL;
2. Зачем нужно использовать и JOB и refresh group?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
KaKTyCc
Дата 26.3.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



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

Это сообщение отредактировал(а) KaKTyCc - 26.3.2007, 17:10
--------------------
Мой блог
PM MAIL WWW   Вверх
KaKTyCc
Дата 27.3.2007, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



Вот ещё.
Написано что матвью автоматически скомпилиться, но у меня это не происходит...

--------------------
Мой блог
PM MAIL WWW   Вверх
KaKTyCc
Дата 27.3.2007, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



Частично решил проблему, добавив в job помимо обновления refresh'а компиляцию матвью
Код

begin
EXECUTE IMMEDIATE 'ALTER MATERIALIZED VIEW IP$LOT$OFFER2REQ COMPILE';  
dbms_refresh.refresh('"TEST"."IP$LOT$OFFER2REQ"');
end;


В доке написано что матвью само станет валидным при рефреше, если статус у него  UNUSABLE, но у меня почему то оно становится всегда
NEEDS_COMPILE....
--------------------
Мой блог
PM MAIL WWW   Вверх
KaKTyCc
Дата 28.3.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



это конечно не дело... ddl мне не нужен в job'е:-(
не могу понять, почему матвью бьется так сильно....
--------------------
Мой блог
PM MAIL WWW   Вверх
KaKTyCc
Дата 28.3.2007, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



A materialized view is automatically revalidated when it is referenced. In many cases, the materialized view will be successfully and transparently revalidated. However, if a column has been dropped in a table referenced by a materialized view or the owner of the materialized view did not have one of the query rewrite privileges and that privilege has now been granted to the owner, you should use the following statement to revalidate the materialized view:

ALTER MATERIALIZED VIEW mview_name COMPILE;

GRANT QUERY REWRITE TO TEST;
но от этого не легче...
что я делаю не так?   smile 

--------------------
Мой блог
PM MAIL WWW   Вверх
LSD
Дата 28.3.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Попробуй пользоателю от имени которого работает job, выдать права явно а не через роль.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
KaKTyCc
Дата 28.3.2007, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 2.8.2005

Репутация: 1
Всего: 1



Цитата(LSD @  28.3.2007,  14:09 Найти цитируемый пост)
Попробуй пользоателю от имени которого работает job, выдать права явно а не через роль.

явно и выданы права... 


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1104 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.