RE: [oracle_br] Re: Ajuda com materialized view

2007-11-08 Por tôpico Luiz Ribeiro
Obrigado por todas as explicações Chiappa, vou analizar tudo e ver qual solução 
é a melhor para meu caso.

 

Luiz

 



From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On Behalf Of 
jlchiappa
Sent: quarta-feira, 7 de novembro de 2007 22:08
To: oracle_br@yahoogrupos.com.br
Subject: [oracle_br] Re: Ajuda com materialized view

 

--- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> , 
"Luiz Ribeiro" <[EMAIL PROTECTED]>
escreveu
>
> Bom dia.
> 
> 
> 
> O que eu queria ao utilizar a materialized view era que a mesma
tivesse o mesmo comportamento de uma tabela sincronizada por um
trigger no insert, delete e update, ou seja, após cada alteração na
tabela origem, se em seguida eu fizer um select na view, os dados
estivessem atualizados.

Como eu falei em outra msg, ** não é assim ** que a MV funciona, uma
MV ou se atualiza ON COMMIT, ou ON DEMMAND, caso este que vc pode ter
um job refrescando a mv a cada x minutos ou vc pode fazer refresh manual.

> 
> 
> 
> Consegui fazer com que a view seja atualizada somente com um um
refresh complete, 

Colega, vc ** leu ** o manual de DW e o SQL reference ?? neles são
ESPECIFICADAS as restrições que impedem uma MV de ser FAST refresh,
entre elas :

"If you specify REFRESH FAST, Oracle performs further verification of
the query definition to ensure that fast refresh can be performed if
any of the detail tables change. These additional checks are:

* A materialized view log must be present for each detail table.
* The rowids of all the detail tables must appear in the SELECT
list of the materialized view query definition.
* If there are no outer joins, you may have arbitrary selections
and joins in the WHERE clause. However, if there are outer joins, the
WHERE clause cannot have any selections. Further, if there are outer
joins, all the joins must be connected by ANDs and must use the
equality (=) operator.
* If there are outer joins, unique constraints must exist on the
join columns of the inner table. For example, if you are joining the
fact table and a dimension table and the join is an outer join with
the fact table being the outer table, there must exist unique
constraints on the join columns of the dimension table.

If some of these restrictions are not met, you can create the
materialized view as REFRESH FORCE to take advantage of fast refresh
when it is possible. If one of the tables did not meet all of the
criteria, but the other tables did, the materialized view would still
be fast refreshable with respect to the other tables for which all the
criteria are met.

A materialized view log should contain the rowid of the master table.
It is not necessary to add other columns."

==> veja lá se não é isso 

> Muito obrigado a todos, mas acho que vou ter que partir para os
triggers de sincronização mesmo.

veja, as triggers ** necessariamente ** disparam a cada DML, no caso
de rollback as alterações TEM que serem desfeitas, e ** ainda por cima
** tudo isso via dblink, a não ser que vc tenha uma rede muito muito
boa eu sinceramente ** DUVIDO ** que a trigger vá te dar performance
melhor Pensando em performance, sem dúvida a recomendação (se os
seus datatypes permitem, se o banco está em archive mode, etc, etc)
seria vc considerar replicação de logs via stream ou mesmo CDC (Change
data Capture), se for 10g, no 10g a CDC é feita só se mineirando os
log files ao invés de ficar mandando registros inteiros pela rede, é
bem mais performática, mas tem as suas restrições 

[]s

Chiappa

 



[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] Re: Ajuda com materialized view

2007-11-07 Por tôpico jlchiappa
--- Em oracle_br@yahoogrupos.com.br, "Luiz Ribeiro" <[EMAIL PROTECTED]>
escreveu
>
> Bom dia.
> 
>  
> 
> O que eu queria ao utilizar a materialized view era que a mesma
tivesse o mesmo comportamento de uma tabela sincronizada por um
trigger no insert, delete e update, ou seja, após cada alteração na
tabela origem, se em seguida eu fizer um select na view, os dados
estivessem atualizados.

Como eu falei em outra msg, ** não é assim ** que a MV funciona, uma
MV ou se atualiza ON COMMIT, ou ON DEMMAND, caso este que vc pode ter
um job refrescando a mv a cada x minutos ou vc pode fazer refresh manual.

> 
>  
> 
> Consegui fazer com que a view seja atualizada somente com um um
refresh complete, 

Colega, vc ** leu ** o manual de DW e o SQL reference ?? neles são
ESPECIFICADAS as restrições  que impedem uma MV de ser FAST refresh,
entre elas :

"If you specify REFRESH FAST, Oracle performs further verification of
the query definition to ensure that fast refresh can be performed if
any of the detail tables change. These additional checks are:

* A materialized view log must be present for each detail table.
* The rowids of all the detail tables must appear in the SELECT
list of the materialized view query definition.
* If there are no outer joins, you may have arbitrary selections
and joins in the WHERE clause. However, if there are outer joins, the
WHERE clause cannot have any selections. Further, if there are outer
joins, all the joins must be connected by ANDs and must use the
equality (=) operator.
* If there are outer joins, unique constraints must exist on the
join columns of the inner table. For example, if you are joining the
fact table and a dimension table and the join is an outer join with
the fact table being the outer table, there must exist unique
constraints on the join columns of the dimension table.

If some of these restrictions are not met, you can create the
materialized view as REFRESH FORCE to take advantage of fast refresh
when it is possible. If one of the tables did not meet all of the
criteria, but the other tables did, the materialized view would still
be fast refreshable with respect to the other tables for which all the
criteria are met.

A materialized view log should contain the rowid of the master table.
It is not necessary to add other columns."

==> veja lá se não é isso 

> Muito obrigado a todos, mas acho que vou ter que partir para os
triggers de sincronização mesmo.

veja, as triggers ** necessariamente ** disparam a cada DML, no caso
de rollback as alterações TEM que serem desfeitas, e ** ainda por cima
** tudo isso via dblink, a não ser que vc tenha uma rede muito muito
boa eu sinceramente ** DUVIDO ** que a trigger vá te dar performance
melhor Pensando em performance, sem dúvida a recomendação (se os
seus datatypes permitem, se o banco está em archive mode, etc, etc)
seria vc considerar replicação de logs via stream ou mesmo CDC (Change
data Capture), se for 10g, no 10g a CDC é feita só se mineirando os
log files ao invés de ficar mandando registros inteiros pela rede, é
bem mais performática, mas tem as suas restrições 

[]s

 Chiappa



[oracle_br] Re: Ajuda com materialized view

2007-11-07 Por tôpico jlchiappa
--- Em oracle_br@yahoogrupos.com.br, "André Castro" <[EMAIL PROTECTED]> escreveu
>
> Olá Chiappa!
> Mas esse "on commit" da MV, não se refere aos objetos que compoe ela?

Não, o COMMIT em questão é quando a TRANSAÇÃO se encerra.

> Nesse caso, as operações que ele citou ali, não seriam obrigatoriamentes
> seguidas de um commit?

De forma alguma é obrigatório que imediatamente após um UPDATE
(digamos) venha um COMMIT, ** tranquilamente ** pode vir um INSERT,
depois um DELETE, depois outro DML, e só depois o COMMIT NUm caso
desses, a view com refresh on commit só seria atualizada APÒS O COMIT,
e no caso o que o colega disse é que queria ter os dados atualizados
imediatamente depois do UPDATE ou seja qual for o DML, isso com MVs
não rola...

[]s

 Chiappa

> Ou eu não entendi! :o)
> 
> []'s
> André Castro
> 
> 
> 
> 
> Em 06/11/07, jlchiappa <[EMAIL PROTECTED]> escreveu:
> >
> >   Não só na criação, mas mesmo depois da mv criada (via ALTER) se pode
> > especificar isso, é a cláusula REFRESH ON COMMIT - o manual "SQL
> > Reference" tem a sintaxe, e o data Warehousing exemplos e restrições.
> > Notar porém que ** não é isso ** que o colega lá pediu, o que ele
> > queria é tualizar a cada DML, isso não tem, afaik.
> >
> > []s
> >
> > Chiappa
> > --- Em oracle_br@yahoogrupos.com.br ,
> > "André Castro"  escreveu
> > >
> > > Estamos usando algumas MV's aqui.
> > > Cara, se não me falha a memória na criação dela, tu pode setar "on
> > commit".
> > > Dá uma "googleada" que tu acha material de monte, com exemplos de
> > sintaxe
> > > inclusive.
> > >
> > > []'s
> > > André Castro
> > >
> > >
> > > Em 06/11/07, Luiz Ribeiro  escreveu:
> > > >
> > > > Boa tarde.
> > > >
> > > > Preciso de uma ajuda (se é que o que quero é possível) para
criar uma
> > > > materialized view (qual a sintaxe) para que a mesma seja
> > atualizada a cada
> > > > insert, update ou delete numa determinada tabela.
> > > >
> > > > SQL> desc valor_operacao;
> > > >
> > > > Name Null? Type
> > > >
> > > > -  -
> > > >
> > > > ID_VALOR NOT NULL NUMBER(10)
> > > >
> > > > ID_OPERACAO NOT NULL NUMBER(10)
> > > >
> > > > ID_VARIAVEL NOT NULL NUMBER(7)
> > > >
> > > > VALOR VARCHAR2(100)
> > > >
> > > > UNIDADE NOT NULL NUMBER(5)
> > > >
> > > > Sintaxe que preciso na view:
> > > >
> > > > SELECT DISTINCT id_variavel, valor, unidade FROM valor_operacao;
> > > >
> > > > Ou
> > > >
> > > > SELECT id_variavel, valor, unidade FROM valor_operacao GROUP BY
> > > > id_variavel, valor, unidade;
> > > >
> > > > Não posso utilizar simplesmente uma view, por motivo de
> > performance. Caso
> > > > seja possível e alguém puder me ajudar, desde já agradeço.
> > > >
> > > > Abraço,
> > > >
> > > > Luiz
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > > >
> > > >
> > > > --
> > > > E-mail classificado pelo Identificador de Spam Inteligente.
> > > > Para alterar a categoria classificada, visite o Terra
> > Mail<
> >
http://mail.terra.com.br/cgi-bin/imail.cgi?+_u=dede2c&_l=1,1194365745.59735.5499.tacamaca.hst.terra.com.br,18516,Des15,Des15
> > >
> > > >
> > > > --
> > > > Esta mensagem foi verificada pelo E-mail Protegido
> > Terra
> > > > .
> > > > Scan engine: McAfee VirusScan / Atualizado em 05/11/2007 / Versão:
> > 5.1.00
> > > > /5156
> > > > Proteja o seu e-mail Terra: http://mail.terra.com.br/
> > > >
> > > >
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> >
> > 
> >
> > --
> > E-mail classificado pelo Identificador de Spam Inteligente.
> > Para alterar a categoria classificada, visite o Terra
Mail
> >
> >  --
> > Esta mensagem foi verificada pelo E-mail Protegido
Terra
> > .
> > Scan engine: McAfee VirusScan / Atualizado em 06/11/2007 / Versão:
5.1.00
> > /5157
> > Proteja o seu e-mail Terra: http://mail.terra.com.br/
> >
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




RE: [oracle_br] Re: Ajuda com materialized view

2007-11-07 Por tôpico Luiz Ribeiro
Bom dia.

 

O que eu queria ao utilizar a materialized view era que a mesma tivesse o mesmo 
comportamento de uma tabela sincronizada por um trigger no insert, delete e 
update, ou seja, após cada alteração na tabela origem, se em seguida eu fizer 
um select na view, os dados estivessem atualizados.

 

Consegui fazer com que a view seja atualizada somente com um um refresh 
complete, o que não resolve meu problema de performance. Seguem as sintaxes que 
utilizei:

 

CREATE MATERIALIZED VIEW LOG

ON valor_operacao

WITH ROWID, SEQUENCE (id_valor,id_variavel,valor,unidade)

INCLUDING NEW VALUES;

 

CREATE MATERIALIZED VIEW valope1

BUILD IMMEDIATE

REFRESH FAST ON COMMIT

-- com os parâmetros abaixo funciona, o problema é a performance,

-- pois o tempo é o mesmo para criação da MV

-- quando faço COMMIT na tabela origem

-- REFRESH COMPLETE ON COMMIT

-- ou

-- REFRESH FORCE ON COMMIT

AS SELECT id_variavel, valor FROM valor_operacao GROUP BY id_variavel, valor; 

 

Para atualizar, abaixo só funciona com o parâmetro 'C':

 

EXECUTE DBMS_MVIEW.REFRESH('VALOPE1','C');

 

Muito obrigado a todos, mas acho que vou ter que partir para os triggers de 
sincronização mesmo.

 

Abraço,

 

Luiz

 



From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On Behalf Of André 
Castro
Sent: terça-feira, 6 de novembro de 2007 20:46
To: oracle_br@yahoogrupos.com.br
Subject: Re: [oracle_br] Re: Ajuda com materialized view

 

Olá Chiappa!
Mas esse "on commit" da MV, não se refere aos objetos que compoe ela?
Nesse caso, as operações que ele citou ali, não seriam obrigatoriamentes
seguidas de um commit?
Ou eu não entendi! :o)

[]'s
André Castro

Em 06/11/07, jlchiappa <[EMAIL PROTECTED] <mailto:jlchiappa%40yahoo.com.br> > 
escreveu:
>
> Não só na criação, mas mesmo depois da mv criada (via ALTER) se pode
> especificar isso, é a cláusula REFRESH ON COMMIT - o manual "SQL
> Reference" tem a sintaxe, e o data Warehousing exemplos e restrições.
> Notar porém que ** não é isso ** que o colega lá pediu, o que ele
> queria é tualizar a cada DML, isso não tem, afaik.
>
> []s
>
> Chiappa
> --- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>  
> ,
> "André Castro" <[EMAIL PROTECTED]> escreveu
> >
> > Estamos usando algumas MV's aqui.
> > Cara, se não me falha a memória na criação dela, tu pode setar "on
> commit".
> > Dá uma "googleada" que tu acha material de monte, com exemplos de
> sintaxe
> > inclusive.
> >
> > []'s
> > André Castro
> >
> >
> > Em 06/11/07, Luiz Ribeiro <[EMAIL PROTECTED]> escreveu:
> > >
> > > Boa tarde.
> > >
> > > Preciso de uma ajuda (se é que o que quero é possível) para criar uma
> > > materialized view (qual a sintaxe) para que a mesma seja
> atualizada a cada
> > > insert, update ou delete numa determinada tabela.
> > >
> > > SQL> desc valor_operacao;
> > >
> > > Name Null? Type
> > >
> > > -  -
> > >
> > > ID_VALOR NOT NULL NUMBER(10)
> > >
> > > ID_OPERACAO NOT NULL NUMBER(10)
> > >
> > > ID_VARIAVEL NOT NULL NUMBER(7)
> > >
> > > VALOR VARCHAR2(100)
> > >
> > > UNIDADE NOT NULL NUMBER(5)
> > >
> > > Sintaxe que preciso na view:
> > >
> > > SELECT DISTINCT id_variavel, valor, unidade FROM valor_operacao;
> > >
> > > Ou
> > >
> > > SELECT id_variavel, valor, unidade FROM valor_operacao GROUP BY
> > > id_variavel, valor, unidade;
> > >
> > > Não posso utilizar simplesmente uma view, por motivo de
> performance. Caso
> > > seja possível e alguém puder me ajudar, desde já agradeço.
> > >
> > > Abraço,
> > >
> > > Luiz
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> > > --
> > > E-mail classificado pelo Identificador de Spam Inteligente.
> > > Para alterar a categoria classificada, visite o Terra
> Mail<
> http://mail.terra.com.br/cgi-bin/imail.cgi?+_u=dede2c&_l=1,1194365745.59735.5499.tacamaca.hst.terra.com.br,18516,Des15,Des15
>  
> <http://mail.terra.com.br/cgi-bin/imail.cgi?+_u=dede2c&_l=1,1194365745.59735.5499.tacamaca.hst.terra.com.br,18516,Des15,Des15>
>  
> >
> > >
> > > --
> > > Esta mensagem foi verificada pelo E-mail Protegido
> Terra<

Re: [oracle_br] Re: Ajuda com materialized view

2007-11-06 Por tôpico André Castro
Olá Chiappa!
Mas esse "on commit" da MV, não se refere aos objetos que compoe ela?
Nesse caso, as operações que ele citou ali, não seriam obrigatoriamentes
seguidas de um commit?
Ou eu não entendi! :o)

[]'s
André Castro




Em 06/11/07, jlchiappa <[EMAIL PROTECTED]> escreveu:
>
>   Não só na criação, mas mesmo depois da mv criada (via ALTER) se pode
> especificar isso, é a cláusula REFRESH ON COMMIT - o manual "SQL
> Reference" tem a sintaxe, e o data Warehousing exemplos e restrições.
> Notar porém que ** não é isso ** que o colega lá pediu, o que ele
> queria é tualizar a cada DML, isso não tem, afaik.
>
> []s
>
> Chiappa
> --- Em oracle_br@yahoogrupos.com.br ,
> "André Castro" <[EMAIL PROTECTED]> escreveu
> >
> > Estamos usando algumas MV's aqui.
> > Cara, se não me falha a memória na criação dela, tu pode setar "on
> commit".
> > Dá uma "googleada" que tu acha material de monte, com exemplos de
> sintaxe
> > inclusive.
> >
> > []'s
> > André Castro
> >
> >
> > Em 06/11/07, Luiz Ribeiro <[EMAIL PROTECTED]> escreveu:
> > >
> > > Boa tarde.
> > >
> > > Preciso de uma ajuda (se é que o que quero é possível) para criar uma
> > > materialized view (qual a sintaxe) para que a mesma seja
> atualizada a cada
> > > insert, update ou delete numa determinada tabela.
> > >
> > > SQL> desc valor_operacao;
> > >
> > > Name Null? Type
> > >
> > > -  -
> > >
> > > ID_VALOR NOT NULL NUMBER(10)
> > >
> > > ID_OPERACAO NOT NULL NUMBER(10)
> > >
> > > ID_VARIAVEL NOT NULL NUMBER(7)
> > >
> > > VALOR VARCHAR2(100)
> > >
> > > UNIDADE NOT NULL NUMBER(5)
> > >
> > > Sintaxe que preciso na view:
> > >
> > > SELECT DISTINCT id_variavel, valor, unidade FROM valor_operacao;
> > >
> > > Ou
> > >
> > > SELECT id_variavel, valor, unidade FROM valor_operacao GROUP BY
> > > id_variavel, valor, unidade;
> > >
> > > Não posso utilizar simplesmente uma view, por motivo de
> performance. Caso
> > > seja possível e alguém puder me ajudar, desde já agradeço.
> > >
> > > Abraço,
> > >
> > > Luiz
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> > > --
> > > E-mail classificado pelo Identificador de Spam Inteligente.
> > > Para alterar a categoria classificada, visite o Terra
> Mail<
> http://mail.terra.com.br/cgi-bin/imail.cgi?+_u=dede2c&_l=1,1194365745.59735.5499.tacamaca.hst.terra.com.br,18516,Des15,Des15
> >
> > >
> > > --
> > > Esta mensagem foi verificada pelo E-mail Protegido
> Terra
> > > .
> > > Scan engine: McAfee VirusScan / Atualizado em 05/11/2007 / Versão:
> 5.1.00
> > > /5156
> > > Proteja o seu e-mail Terra: http://mail.terra.com.br/
> > >
> > >
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
> 
>
> --
> E-mail classificado pelo Identificador de Spam Inteligente.
> Para alterar a categoria classificada, visite o Terra 
> Mail
>
>  --
> Esta mensagem foi verificada pelo E-mail Protegido 
> Terra
> .
> Scan engine: McAfee VirusScan / Atualizado em 06/11/2007 / Versão: 5.1.00
> /5157
> Proteja o seu e-mail Terra: http://mail.terra.com.br/
>
>


[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] Re: Ajuda com materialized view

2007-11-06 Por tôpico jlchiappa
Não só na criação, mas mesmo depois da mv criada (via ALTER) se pode
especificar isso, é a cláusula REFRESH ON COMMIT - o manual "SQL
Reference" tem a sintaxe, e o data Warehousing exemplos e restrições.
 Notar porém que ** não é isso ** que o colega lá pediu, o que ele
queria é tualizar a cada DML, isso não tem, afaik.

[]s

 Chiappa
 --- Em oracle_br@yahoogrupos.com.br, "André Castro" <[EMAIL PROTECTED]> 
escreveu
>
> Estamos usando algumas MV's aqui.
> Cara, se não me falha a memória na criação dela, tu pode setar "on
commit".
> Dá uma "googleada" que tu acha material de monte, com exemplos de
sintaxe
> inclusive.
> 
> []'s
> André Castro
> 
> 
> Em 06/11/07, Luiz Ribeiro <[EMAIL PROTECTED]> escreveu:
> >
> >   Boa tarde.
> >
> > Preciso de uma ajuda (se é que o que quero é possível) para criar uma
> > materialized view (qual a sintaxe) para que a mesma seja
atualizada a cada
> > insert, update ou delete numa determinada tabela.
> >
> > SQL> desc valor_operacao;
> >
> > Name Null? Type
> >
> > -  -
> >
> > ID_VALOR NOT NULL NUMBER(10)
> >
> > ID_OPERACAO NOT NULL NUMBER(10)
> >
> > ID_VARIAVEL NOT NULL NUMBER(7)
> >
> > VALOR VARCHAR2(100)
> >
> > UNIDADE NOT NULL NUMBER(5)
> >
> > Sintaxe que preciso na view:
> >
> > SELECT DISTINCT id_variavel, valor, unidade FROM valor_operacao;
> >
> > Ou
> >
> > SELECT id_variavel, valor, unidade FROM valor_operacao GROUP BY
> > id_variavel, valor, unidade;
> >
> > Não posso utilizar simplesmente uma view, por motivo de
performance. Caso
> > seja possível e alguém puder me ajudar, desde já agradeço.
> >
> > Abraço,
> >
> > Luiz
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > 
> >
> > --
> > E-mail classificado pelo Identificador de Spam Inteligente.
> > Para alterar a categoria classificada, visite o Terra
Mail
> >
> >  --
> > Esta mensagem foi verificada pelo E-mail Protegido
Terra
> > .
> > Scan engine: McAfee VirusScan / Atualizado em 05/11/2007 / Versão:
5.1.00
> > /5156
> > Proteja o seu e-mail Terra: http://mail.terra.com.br/
> >
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>