Как пропустить просмотр журнала некоторых таблиц в материализованном представлении для быстрого обновления - PullRequest
0 голосов
/ 08 сентября 2018

Есть запрос, в котором некоторые таблицы объединены друг с другом. Из-за производительности и времени отклика на нем создается материализованное представление с fast refresh on commit, например:

create materialized view mat_calc
refresh fast on commit
as
select po.title as post_title
       po.rowid as post_rowid
       c.title as comment_title,
       c.rowid as comment_rowid,
       p.title as person_title,
       p.rowid as person_rowidو
       cp.rowid as cp_rowid
  from post po, comment c, person p,post_comment_person cp
 where po.id = cp.post_id
   and c.id = cp.comment_id
   and p.id = cp.person_id  

Как вы знаете, предпосылкой для создания является materialized view log для каждой из таблиц, которые находятся в этом материализованном представлении, например:

create materialized view log on post;
create materialized view log on comment;
create materialized view log on person;
create materialized view log on post_comment_person;

Как вы снова знаете, the materialized view log должен обнаружить изменение этих таблиц и применить изменение к материализованному представлению.
Моя проблема в том, что изменение post_comment_person table only влияет на мое материализованное представление, из-за этого нет необходимости создавать view log на трех других таблицах; С другой стороны, я хочу, чтобы только post_comment_person мог обновить не другой, но это невозможно, и возникает следующая ошибка:

ORA-23413: таблица "персона" не имеет материализованного журнала представлений.

Как это можно сделать, потому что смена таблиц person и post и comment не имеет значения.

UPDATE

Еще раз, я хочу отправить изменения в мой MV, включая смену человека, комментарий и публикацию, когда запись вставлена ​​и удалена из post_comment_ person

1 Ответ

0 голосов
/ 13 сентября 2018

Я решил проблему обновления, изменив при коммите на по требованию для быстрого обновления:

create materialized view mat_calc
refresh fast on commit

заменяется на:

create materialized view mat_calc
refresh fast on demand

Поэтому после вставки в post_comment_person я вручную обновляю свое Материализованное представление в его собственном триггере, например:

DBMS_SNAPSHOT.REFRESH( 'mat_calc','f'); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...