Jovem,
Deveria funcionar. Veja o exemplo abaixo:
SQL> desc jobs
Nome Nulo? Tipo
----------------------------------------- -------- ----------------------------
JOB_ID NOT NULL VARCHAR2(10)
JOB_TITLE NOT NULL VARCHAR2(35)
MIN_SALARY NUMBER(6)
MAX_SALARY NUMBER(6)
SQL> CREATE MATERIALIZED VIEW LOG
2 ON "HR"."JOBS"
3 TABLESPACE "SYSTEM"
4 WITH PRIMARY KEY
5 INCLUDING NEW VALUES;
Log de view materializada criado.
SQL> create materialized view jobs_mv refresh fast on commit as select * from
jobs;
View materializada criada.
SQL> select * from jobs;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES President 20000 40000
AD_VP Administration Vice President 15000 30000
AD_ASST Administration Assistant 3000 6000
FI_MGR Finance Manager 8200 16000
FI_ACCOUNT Accountant 4200 9000
AC_MGR Accounting Manager 8200 16000
AC_ACCOUNT Public Accountant 4200 9000
SA_MAN Sales Manager 10000 20000
SA_REP Sales Representative 6000 12000
PU_MAN Purchasing Manager 8000 15000
PU_CLERK Purchasing Clerk 2500 5500
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
ST_MAN Stock Manager 5500 8500
ST_CLERK Stock Clerk 2000 5000
SH_CLERK Shipping Clerk 2500 5500
IT_PROG Programmer 4000 10000
MK_MAN Marketing Manager 9000 15000
MK_REP Marketing Representative 4000 9000
HR_REP Human Resources Representative 4000 9000
PR_REP Public Relations Representative 4500 10500
19 linhas selecionadas.
SQL> select * from jobs_mv;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES President 20000 40000
AD_VP Administration Vice President 15000 30000
AD_ASST Administration Assistant 3000 6000
FI_MGR Finance Manager 8200 16000
FI_ACCOUNT Accountant 4200 9000
AC_MGR Accounting Manager 8200 16000
AC_ACCOUNT Public Accountant 4200 9000
SA_MAN Sales Manager 10000 20000
SA_REP Sales Representative 6000 12000
PU_MAN Purchasing Manager 8000 15000
PU_CLERK Purchasing Clerk 2500 5500
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
ST_MAN Stock Manager 5500 8500
ST_CLERK Stock Clerk 2000 5000
SH_CLERK Shipping Clerk 2500 5500
IT_PROG Programmer 4000 10000
MK_MAN Marketing Manager 9000 15000
MK_REP Marketing Representative 4000 9000
HR_REP Human Resources Representative 4000 9000
PR_REP Public Relations Representative 4500 10500
19 linhas selecionadas.
SQL> insert into jobs values('ESTAG','Estagiario',500,1500);
1 linha criada.
SQL> select * from jobs;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES President 20000 40000
AD_VP Administration Vice President 15000 30000
AD_ASST Administration Assistant 3000 6000
FI_MGR Finance Manager 8200 16000
FI_ACCOUNT Accountant 4200 9000
AC_MGR Accounting Manager 8200 16000
AC_ACCOUNT Public Accountant 4200 9000
SA_MAN Sales Manager 10000 20000
SA_REP Sales Representative 6000 12000
PU_MAN Purchasing Manager 8000 15000
PU_CLERK Purchasing Clerk 2500 5500
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
ST_MAN Stock Manager 5500 8500
ST_CLERK Stock Clerk 2000 5000
SH_CLERK Shipping Clerk 2500 5500
IT_PROG Programmer 4000 10000
MK_MAN Marketing Manager 9000 15000
MK_REP Marketing Representative 4000 9000
HR_REP Human Resources Representative 4000 9000
PR_REP Public Relations Representative 4500 10500
ESTAG Estagiario 500 1500
20 linhas selecionadas.
SQL> select * from jobs_mv;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES President 20000 40000
AD_VP Administration Vice President 15000 30000
AD_ASST Administration Assistant 3000 6000
FI_MGR Finance Manager 8200 16000
FI_ACCOUNT Accountant 4200 9000
AC_MGR Accounting Manager 8200 16000
AC_ACCOUNT Public Accountant 4200 9000
SA_MAN Sales Manager 10000 20000
SA_REP Sales Representative 6000 12000
PU_MAN Purchasing Manager 8000 15000
PU_CLERK Purchasing Clerk 2500 5500
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
ST_MAN Stock Manager 5500 8500
ST_CLERK Stock Clerk 2000 5000
SH_CLERK Shipping Clerk 2500 5500
IT_PROG Programmer 4000 10000
MK_MAN Marketing Manager 9000 15000
MK_REP Marketing Representative 4000 9000
HR_REP Human Resources Representative 4000 9000
PR_REP Public Relations Representative 4500 10500
19 linhas selecionadas.
SQL> commit;
ValidaþÒo completa.
SQL> select * from jobs_mv;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES President 20000 40000
AD_VP Administration Vice President 15000 30000
AD_ASST Administration Assistant 3000 6000
FI_MGR Finance Manager 8200 16000
FI_ACCOUNT Accountant 4200 9000
AC_MGR Accounting Manager 8200 16000
AC_ACCOUNT Public Accountant 4200 9000
SA_MAN Sales Manager 10000 20000
SA_REP Sales Representative 6000 12000
PU_MAN Purchasing Manager 8000 15000
PU_CLERK Purchasing Clerk 2500 5500
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
ST_MAN Stock Manager 5500 8500
ST_CLERK Stock Clerk 2000 5000
SH_CLERK Shipping Clerk 2500 5500
IT_PROG Programmer 4000 10000
MK_MAN Marketing Manager 9000 15000
MK_REP Marketing Representative 4000 9000
HR_REP Human Resources Representative 4000 9000
PR_REP Public Relations Representative 4500 10500
ESTAG Estagiario 500 1500
20 linhas selecionadas.
Qual a versão do banco de dados vc está utilizando? Este teste foi feito no
9iR2 (9.2.0.1)
Abraços,
Wellerson
TalvezDemitre Col <[EMAIL PROTECTED]> escreveu: Olá.
Agradeço pela colaboração. Teoricamente, esta MV não deveria ter os dados
atualizados após o commit?
Fiz o seguinte teste:
- Criei com a cláusula REFRESH FAST ON COMMIT
- Atualizei um dado que constitui na MV
- Comitei
- Consultei os dados da View. Estavam iguais ao momento anterior ao update.
Porém, com o dbm_mview.refres(...), os dados foram atualizados.
Aonde eu posso mais procurar o que esteja causando algum problema para a não
atualização da MV no momento do commit??
Att
Wellerson Leite de Araújo <[EMAIL PROTECTED]> escreveu: Jovem,
Esta sua atulização deve ser feita de maneira sincrona, certo?
Bem... Vc deve criar a sua materialized view da seguinte forma:
CREATE MATERIALIZED VIEW <nome>
REFRESH FAST ON COMMIT
AS
<select ...>
Na tabela de origem, ou tabelas de origens deve ser criada um log de
materialized view. Se vc quiser que ela seja utilizada para QUERY REWRITE basta
de acrescentar esta clausula antes do AS. Neste exemplo a sua materialized view
será atulizada toda vez que uma transação nas tabelas base for confirmada
(commit). Como todo commit fará com que a sua MV seja atualizada, cada
atualização ficará mais rápida. Caso isso ainda não tenha o desempenho que vc
deseja vc poderá acrescentar a cláusula de PARALLEL (DEGREE DEFAULT) ou
PARALLEL (DEGREE <número de processos em paralelo>) antes do AS. Lembrando que
a sua sessão deve aceitar DML em paralelo: ALTER SESSION ENABLE PARALLEL DML;
Abraços,
Wellerson
Demitre Col <[EMAIL PROTECTED]> escreveu: Bom dia.
Por definição do sistema da empresa onde trabalho, uma determinada tabela de
movimentação atualiza outra tabela de saldos via trigger.
Visando melhorar isto, pensei em implementar uma Materialized View que desse
a mesma visão da tabela de saldos, porém de modo mais fácil e automático. Criei
uma MV log para a de saldos, e uma que mostre os dados que eu quero. Feito
isto, não localizei em tutoriais um modo da segunda ser atualizada
automaticamente. Isto não seria o problema, o caso é que, com mais de 1.000.000
de registros, ela demora +- 20s para se atualizar. Eu gostaria que fosse mais
rápido.
Gostaria da sugestão dos colegas quanto à esta modificação.
Att
__________________________________________________
Fale com seus amigos de graça com o novo Yahoo! Messenger
http://br.messenger.yahoo.com/
[As partes desta mensagem que não continham texto foram removidas]
"Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até
maltratar o meu coração, que meu espírito ninguém vai conseguir quebrar..."
(Legião Urbana)
"As idéias estão no chão, você tropeça e acha a solução..."
(Titãs)
__________________________________________________
Fale com seus amigos de graça com o novo Yahoo! Messenger
http://br.messenger.yahoo.com/
[As partes desta mensagem que não continham texto foram removidas]
__________________________________________________
Fale com seus amigos de graça com o novo Yahoo! Messenger
http://br.messenger.yahoo.com/
[As partes desta mensagem que não continham texto foram removidas]
"Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até maltratar
o meu coração, que meu espírito ninguém vai conseguir quebrar..."
(Legião Urbana)
"As idéias estão no chão, você tropeça e acha a solução..."
(Titãs)
__________________________________________________
Fale com seus amigos de graça com o novo Yahoo! Messenger
http://br.messenger.yahoo.com/
[As partes desta mensagem que não continham texto foram removidas]
--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/[email protected]/
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine
__________________________________________________________________
O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o
link do mesmo para evitar trafego(pedidos) desnecessário.
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/
<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html