У меня есть несколько вопросов о создании материализованных представлений с быстрым обновлением. Проблема в том, что мне нужно иметь функцию подсчета запросов (*), которая недопустима для быстрого обновления. Я где-то читал, что создаю "вспомогательный" вид, который будет выполнять count(). Я хочу сослаться на это представление из моего материализованного представления. Когда дело доходит до обновления, все работает отлично, но при попытке быстрого выполнения появляется ошибка ORA 12004. Я знаю, что мне нужны журналы материализованного представления из таблиц, на которые я ссылаюсь, но как насчет представлений? Как их создать? Также незаконно использовать count() в ссылочном представлении? как сделать столбец ROWID для этого представления? Если использовать count() незаконно, есть ли другой способ, несмотря на создание таблицы, чтобы сделать это?
База данных Oracle — быстрое обновление MV, представление ссылок
Ответы (1)
Вы наверняка можете иметь count
в материализованном представлении fast refresh
:
create table t (
c1 int primary key,
c2 int
);
insert into t
select level, mod ( level, 3 )
from dual
connect by level <= 10;
commit;
create materialized view log on t
with rowid, primary key ( c2 )
including new values;
create materialized view mv
refresh fast on commit
as
select c2, count (*)
from t
group by c2;
select * from mv;
C2 COUNT(*)
1 4
2 3
0 3
insert into t
select -level, mod ( level, 3 )
from dual
connect by level <= 10;
commit;
select * from mv;
C2 COUNT(*)
1 8
2 6
0 6
Если вы не можете быстро обновлять материализованное представление и не знаете, почему, посмотрите dbms_mview.explain_mview
. Это дает разбивку возможных обновлений и их возможности для MV.
Для тех, которые невозможны, есть краткое объяснение, почему:
create table mv_capabilities_table (
statement_id varchar(30) ,
mvowner varchar(30) ,
mvname varchar(30) ,
capability_name varchar(30) ,
possible character(1) ,
related_text varchar(2000) ,
related_num number ,
msgno integer ,
msgtxt varchar(2000) ,
seq number
) ;
exec dbms_mview.explain_mview('mv');
select capability_name, possible, msgtxt from MV_CAPABILITIES_TABLE
where capability_name like 'REFRESH%';
CAPABILITY_NAME POSSIBLE MSGTXT
REFRESH_COMPLETE Y <null>
REFRESH_FAST Y <null>
REFRESH_FAST_AFTER_INSERT Y <null>
REFRESH_FAST_AFTER_ONETAB_DML Y <null>
REFRESH_FAST_AFTER_ANY_DML Y <null>
REFRESH_FAST_PCT N PCT is not possible on any of the detail tables in the materialized view
Если вы используете представление в своем материализованном представлении, вам необходимо создать журналы MV в таблицах, которые использует представление.
person
Chris Saxon
schedule
01.11.2019
Я создал эту таблицу и получил ответ: причина, по которой эта возможность отключена, не проанализирована.
- person Orzelke; 02.11.2019
Ответ на что?
- person Chris Saxon; 04.11.2019