Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
lexus Профи
Вступление в Клуб: 28.09.2007
|
Ср Фев 18, 2009 07:00  Трассировка в джобе |
|
Полезность: Нет оценки
|
Коллеги, подскажите...
Есть операция, в ней:
Код: | -- begin pl/sql
execute immediate 'alter session set query_rewrite_enabled=force';
dbms_mview.refresh('IBS.MV$URSA_FACT_OPER');
-- end pl/sql |
Если операцию запускать "руками" из Навигатора - все ок.
Если эта операция дергается из другой (запущенной по расписанию) - не работает.
Попробовал вставить трассировку операции - трейс при запуске джоба не появляется.
Код: | -- begin pl/sql
execute immediate 'alter session set max_dump_file_size =unlimited';
execute immediate 'alter session set events ''10053 trace name context forever, level 1''';
-- end pl/sql |
Джоб запускал и под IBS - результат не меняется.
Что не так делаю? Куда смотреть? |
|
 |
lexus Профи
Вступление в Клуб: 28.09.2007
|
Чт Фев 19, 2009 11:16   |
|
Полезность: Нет оценки
|
Трейс 10046 (SQL-ный) создается. Но, по нему не понятно - рассматривал ли оптимизатор материализованную вьюшку как вариант.
Комаем дальше... Идей осталось не так уже много  |
|
 |
lexus Профи
Вступление в Клуб: 28.09.2007
|
Пт Фев 20, 2009 06:56   |
|
Полезность: Нет оценки
|
Задача свелась к такой:
Есть select из таблицы. Есть Materialized view, заточенная под этот select.
Если select выполнять явно (SQL+) - цепляется вьюшка и все прекрасно.
Если под тем же пользователем создать джоб с тем же select - вьюшка не цепляется, выборка идет по таблице. Плохо.
Почему такое может быть?
То есть, вопрос перешел уже скорее в плоскость dba...
А админы читают эту ветку?  |
|
 |
Serj Профи
Вступление в Клуб: 02.08.2007
|
Пт Фев 20, 2009 12:39   |
|
Полезность: Нет оценки
|
lexus пишет: | Задача свелась к такой:
Есть select из таблицы. Есть Materialized view, заточенная под этот select.
Если select выполнять явно (SQL+) - цепляется вьюшка и все прекрасно.
Если под тем же пользователем создать джоб с тем же select - вьюшка не цепляется, выборка идет по таблице. Плохо.
Почему такое может быть?
То есть, вопрос перешел уже скорее в плоскость dba...
А админы читают эту ветку?  | - админы не читают.
Версия платформы сервера и СУБД, статистика ночная / дневная системная собирается, статистика по схеме когда собирается - до запсука job или после? "В слепую" query_rewrite_integrity = trusted - вдруг поможет |
|
 |
lexus Профи
Вступление в Клуб: 28.09.2007
|
Пт Фев 20, 2009 13:35   |
|
Полезность: Нет оценки
|
Сейчас проверяем на базе, где работы не ведутся. Изменений нет никаких, MV всегда Fresh. Соответственно, и Query_rewrite_ingtegrity не поможет.
Operating System AIX 5.3.0.0 5300-08 (64-bit)
Версия Oracle: 9.2.0.7 |
|
 |
Serj Профи
Вступление в Клуб: 02.08.2007
|
Пт Фев 20, 2009 14:00   |
|
Полезность: Нет оценки
|
lexus пишет: | Сейчас проверяем на базе, где работы не ведутся. Изменений нет никаких, MV всегда Fresh. Соответственно, и Query_rewrite_ingtegrity не поможет.
Operating System AIX 5.3.0.0 5300-08 (64-bit)
Версия Oracle: 9.2.0.7 | - и правда оно обновляется всегда(не сразу заметил), - hint REWRITE тогда в помощь. -
Код: |
Rewrite Hints
Hints may be included in SQL statements to control whether query rewrite occurs. Using the NOREWRITE hint in a query prevents the optimizer from rewriting it.
The REWRITE hint with no argument in a query forces the optimizer to use a materialized view (if any) to rewrite it regardless of the cost.
The REWRITE (mv1, mv2, ...) hint with argument(s) forces rewrite to select the most suitable materialized view from the list of names specified.
For example, to prevent a rewrite, you can use:
SELECT /*+ NOREWRITE */ s.city, SUM(s.grocery_sq_ft)
FROM store s
GROUP BY s.city;
To force a rewrite using mv1, you can use:
SELECT /*+ REWRITE (mv1) */ s.city, SUM(s.grocery_sq_ft)
FROM store s
GROUP BY s.city;
|
|
|
 |
yarrr Участник
Вступление в Клуб: 20.02.2009
|
Пт Фев 20, 2009 14:25   |
|
Полезность: Нет оценки
|
rewrite тоже не помогает.
вот тест-кейс
Код: |
create table t1 as select * from all_objects;
CREATE UNIQUE INDEX T1_PK ON T1
(OBJECT_ID);
ALTER TABLE T1 ADD (
CONSTRAINT T1_PK
PRIMARY KEY
(OBJECT_ID)
USING INDEX
);
CREATE MATERIALIZED VIEW LOG ON T1
TABLESPACE USERS
NOCACHE
LOGGING
NOPARALLEL
WITH PRIMARY KEY;
CREATE MATERIALIZED VIEW MV$T1
TABLESPACE USERS
NOCACHE
LOGGING
NOPARALLEL
BUILD IMMEDIATE
REFRESH FAST ON DEMAND
ENABLE QUERY REWRITE
AS
select * from t1 where object_type='TABLE';
ANALYZE TABLE t1 COMPUTE STATISTICS;
ANALYZE TABLE mv$t1 COMPUTE STATISTICS;
|
запускать надо следующее:
Код: |
declare
cursor CUR is
select object_id,owner from t1 where object_type='TABLE' and owner='SYS';
type DCUR is table of CUR%rowtype;
TMPCUR DCUR;
begin
execute immediate 'alter session set query_rewrite_enabled=true';
execute immediate 'alter session set events ''10046 trace name context forever, level 8''';
open CUR;
fetch CUR bulk collect into TMPCUR;
close CUR;
end;
/
|
добавление джоба:
Код: | DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
(
job => X
,what => 'declare
cursor CUR is
select object_id,owner from t1 where object_type=''TABLE'' and owner=''SYS'';
type DCUR is table of CUR%rowtype;
TMPCUR DCUR;
begin
execute immediate ''alter session set query_rewrite_enabled=true'';
execute immediate ''alter session set events ''''10046 trace name context forever, level 8'''''';
open CUR;
fetch CUR bulk collect into TMPCUR;
close CUR;
end;'
,next_date => to_date('02.20.2009 17:08:10','mm/dd/yyyy hh24:mi:ss')
,no_parse => FALSE
);
:JobNumber := to_char(X);
END;
/
|
|
|
 |
lexus Профи
Вступление в Клуб: 28.09.2007
|
Пн Апр 06, 2009 08:47   |
|
Полезность: Нет оценки
|
В итоге получилось - наткнулись на баг Oracle. Materialized View не используется в джобе. Наши DBA завели TAR.
Править баг будут уже только в 10g. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|