- Este tópico contém 13 respostas, 3 vozes e foi atualizado pela última vez 18 anos, 11 meses atrás por
Marcio68Almeida.
-
AutorPosts
-
13 de abril de 2007 às 6:44 pm #79230
vieri
ParticipantePrezados amigos e DBA,
Possuo um dataware house com dezenas de Materialized views
Pórem gostaria de automatizar o processo de refresh, ja que
essas tabelas são referenciadas por outras tabelas, ocasionando
erro no job que é criado na criação da MV.
Minha ideia é :
criar um job com essas implementações:
procedureDesabilitaconst + refreshdamv + procedureHabilitacons
ja possuo as procedures de habilitar e desabilitar constraints.
Porem naum sei como criar um job que faça essas
3 tarefas respectivamente.
Gostaria de algum help caso alguem ja tenha passado por isso.
Um exemplo de um job que acesse uma procedure também me ajudaria.
obs: o refresh seria semanal!Agradeço desde ja!
grande abraços!Daniel
DBA junior.13 de abril de 2007 às 11:25 pm #79232chduarte
ParticipanteNa verdade quando vc cria uma MView ele cria tambem o job automaticamente.
Toda a manipulacao pode ser feita pela dbms_job ou dbms_mview.
[]
14 de abril de 2007 às 9:53 pm #79233vieri
ParticipanteVc naum entendeu minha duvida!!
Os usuarios owner de um determinado schema fazem referencia a essas mviews!!
Protanto na hora do refresh o job viola a constraint!!
Preciso de um job que desabilite as fks ,faça o refresh dps habilite as mesmas!!Obrigado antecipadamente!
16 de abril de 2007 às 12:56 am #79234chduarte
ParticipanteRealmente nao entendi. A mview possui constraint? pq durante o refresh ela somente vai armazenar o resultado de uma query.
Estranho.
[]
16 de abril de 2007 às 5:27 pm #79235Marcio68Almeida
ParticipanteVocê pode ter índices e FKs apontando para uma view materializada, porém quando a view for atualizada haverá um problema com as FKs.
Não há como desabilitar as FKs e reabilita-las em seguida…
Ou você usa sem as FKs ou cria uma tabela e faz um processo inteligente de atualização da mesma de forma que não fira a constraint…16 de abril de 2007 às 6:10 pm #79238vieri
ParticipantePorque não há como desabilitar as FKs e reabilita-las em seguida…????
Não entendi tal fundamento!
Existe algum tipo de refresh que forçe isso… que não faça a
verificação das constraints!
A oracle devia ter um processo automatizado para isso, ja que eles permitem tal implementação!Obrigados por esses esclarecimentos mas preciso de + …
abraços amigos e DBAs
16 de abril de 2007 às 6:28 pm #79239Marcio68Almeida
ParticipanteQuando a view materializada é atualizada, é um processo de zerar os dados da tabela e recria-los…
Você pode ter um processo que desabilite as FKs, snap shot e depois habilite as FKs… ,as tem que ser um processo manual…16 de abril de 2007 às 9:03 pm #79242vieri
ParticipanteEstou ciente desses conceitos, mais a minha ideia e automatizar
este processo.Criando um job extra:exemplo:
begin
dbms_scheduler.create_job(
job_name => ‘ “SIA”.”REFRESH DAS MVS”,
job_type => ‘PL_SQL_BLOCK’,
Job_action => ‘begin execute sia.PR_DESABILITA_CONTRA_FK_MV;
end; begin execute
exec DBMS_MVIEW.REFRESH(‘sdc_dw_rep.MV_DW_ESPECIES_BENEFICIO’);end;
begin execute PR_HABILITA_CONTRA_FK_MV;end;’,
repeat_interval => ‘TRUNC(SYSDATE +1) + 5/24’,
enable => TRUE
job_class => ‘DEFAULT_JOB_CLASS’
endestou começando a atuar agora na parte de jobs me ajudem em algum erro de sintaxe.
outra duvida eu posso ter varios executes dentro do job action?
ou devo executar uma procedure que faça todos estas execuções?abraços
17 de abril de 2007 às 2:16 am #79247chduarte
ParticipanteNa verdade nunca ouvi falar em FK para view materializada ja que o conceito é para replicacao de dados ja existentes ou melhorar performance de relatorios.
[]
17 de abril de 2007 às 6:21 pm #79249vieri
ParticipanteA materialized view e uma table como qualquer outra para o ORACLE.
Pode conferir fazendo um select na DBA_OBJECTS.Portanto o schema da aplicação pode usar uma mv como um tabela do seu schema.E ter constraints acessando a mesma.
A intençao da mv e evitar o uso de dblink que onera a aplicação ja que tem que buscar os dados em outro servidor.
Se alguem que entende de job é mv puder me ajudar.
thanks!17 de abril de 2007 às 6:35 pm #79250vieri
ParticipanteSo para comprovar oque estou falando…
SQL> exec dbms_mview.refresh (‘SDC_DW_REP.MV_DW_CLIENTELA_BENEFICIOS’);
BEGIN dbms_mview.refresh (‘SDC_DW_REP.MV_DW_CLIENTELA_BENEFICIOS’); END;*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-02292: integrity constraint (SIA.FBCI_CLI_FK) violated – child record found
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2255
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2461
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2430
ORA-06512: at line 1eu posso desabiliar a fk na mão e depois o refresh funciona… mas são mta mvs + de 50. E DBA não e pedreiro pra ficar fazendo trabalho braçal.
Alguem tem uma solução.Um job que faça esse processo atraves de um PL-sql17 de abril de 2007 às 7:00 pm #79251chduarte
ParticipanteRealmente a MV é uma tabela mas acredito que nao seja esta a proposta dela.
Boa sorte com seu erro.
[]
18 de abril de 2007 às 5:55 pm #79257vieri
ParticipanteJá vi que niguem foi capaz de entender o problema a apresentar solução!
Vou queimar uma horas com pl-sql e job para realizar meu procedimento.
Concordo com vc meu caro.. a proposta naum é essa!
Mas em empresas grande e do governo existem tabelas corporativas que são mto dinamicas por causa das leis e tudo mais. Portanto tem que ser uma MV! Pra uma vez por semana ir busca as mudanças.Encerro minha dúvida aqui… infelizmente não aprendi nada so ensinei!
abraços!!
18 de abril de 2007 às 6:51 pm #79260Marcio68Almeida
ParticipanteSua modéstia é realmente reconfortante…
Ninguém entendeu…
Só ensinei…
A sua dúvida foi entendida e não há ferramentas prontas que façam o que você deseja…
Se você esperava que alguém dsenvolvesse para você, foi muita ingenuidade da sua parte…
Se quer suporte da Oracle, tente no http://metalink.oracle.com -
AutorPosts
- Você deve fazer login para responder a este tópico.