- Este tópico contém 5 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 2 meses atrás por
gsmdf.
-
AutorPosts
-
4 de janeiro de 2010 às 3:42 pm #91825
gsmdf
ParticipantePrezados,
Tenho de criar uma view materializada para integrar dados de 3 tabelas do sistema.
Gostaria de saber se os dados dela são atualizados automaticamente a medida que cada uma das 3 tabelas originais sofrem modificação ou se tenho de incluir alguma diretiva no SQL de criação da view com esse propósito.Grato.
4 de janeiro de 2010 às 4:47 pm #91827Marcos Braga
ParticipanteOi gsmdf,
É bom sabermos qual versão do banco de dados está utilizando para auxiliá-lo melhor nesse processo.
Andei olhando a criação de VM na versão 10g e observei que tem um parâmetro chamado REFRESH_FAST_AFTER_INSERT, creio que esse parâmetro é o que busca (mas nunca utilizei, portanto é bom pesquisar antes de aplicá-lo).
É um caminho.
[]s
Braga4 de janeiro de 2010 às 4:51 pm #91828gsmdf
ParticipanteDei uma pesquisada aqui e achei o parâmetro:
REFRESH FAST ON COMMIT
Obrigado.
4 de janeiro de 2010 às 6:05 pm #91829fsitja
ParticipanteVocê precisa criar um materialized view log e criar a materialized view com opção fast refresh on commit.
Se o SQL da view tiver joins você precisa criar um view log para todas as tabelas e incluir as opções de criar view log por rowid e incluindo as colunas das chaves estrangeiras.http://download.oracle.com/docs/cd/E118 … s_6002.htm
http://download.oracle.com/docs/cd/E118 … s_6003.htmSegue um exemplo para você verificar.
SQL> create table t1 (col1 number primary key);Table created.
SQL> create materialized view log on t1;
Materialized view log created.
SQL> create materialized view mv_t1
2 build immediate
3 refresh fast on commit
4 as select col1 from t1;Materialized view created.
SQL> select owner, table_name from all_tables where table_name = 'MLOG$_T1';
OWNER TABLE_NAME
CMZA MLOG$_T1
SQL> insert into t1 values (1);
1 row created.
SQL> select * from mlog$_t1;
COL1 SNAPTIME D O CHANGE_VECTOR$$
1 01/01/00 I N FESQL> select * from mv_t1;
no rows selected
SQL> commit;
Commit complete.
SQL> select * from mv_t1;
COL1
1SQL> select * from mlog$_t1;
no rows selected
SQL>
5 de janeiro de 2010 às 5:57 am #91837VitorLeandro
ParticipanteOutra solução além das apontadas acima, é utilizar o “refresh fast on demand” onde somente será atualizada a MV se executar a solicitação. Isso é interessante caso o seu motivo seja um relatório histórico ou coisa do tipo. Convém verificar os parâmetros QUERY_REWRITE_ENABLED = TRUE onde outras querys podem automaticamente se beneficiar da MV.
informações adicionais:
Para se atualizar uma MV na mão, basta rodar a PKG abaixo passando como parametro o nome da tabela e o tipo de REFRESH (opcional) (F-Fast refresh ou C-Complete Refresh):
EXECUTE DBMS_MVIEW.REFRESH(‘MV_Sales’,’F’);
Tome cuidados com as MV Logs, elas irão ocupar espaço em seu DB e conseqüentemente, outros recursos.
[/b]5 de janeiro de 2010 às 9:47 pm #91848gsmdf
Participante[quote=”fsitja”:34mgewmt]Você precisa criar um materialized view log e criar a materialized view com opção fast refresh on commit.
Se o SQL da view tiver joins você precisa criar um view log para todas as tabelas e incluir as opções de criar view log por rowid e incluindo as colunas das chaves estrangeiras.http://download.oracle.com/docs/cd/E118 … s_6002.htm
http://download.oracle.com/docs/cd/E118 … s_6003.htmSegue um exemplo para você verificar.
SQL> create table t1 (col1 number primary key);Table created.
SQL> create materialized view log on t1;
Materialized view log created.
SQL> create materialized view mv_t1
2 build immediate
3 refresh fast on commit
4 as select col1 from t1;Materialized view created.
SQL> select owner, table_name from all_tables where table_name = 'MLOG$_T1';
OWNER TABLE_NAME
CMZA MLOG$_T1
SQL> insert into t1 values (1);
1 row created.
SQL> select * from mlog$_t1;
COL1 SNAPTIME D O CHANGE_VECTOR$$
1 01/01/00 I N FESQL> select * from mv_t1;
no rows selected
SQL> commit;
Commit complete.
SQL> select * from mv_t1;
COL1
1SQL> select * from mlog$_t1;
no rows selected
SQL>
[/quote]Criei o log da view e deu certo.
Vlw!
-
AutorPosts
- Você deve fazer login para responder a este tópico.