Materialized View - Recriar

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Pessoal, bom dia, beleza?

Estou tento contato com a criação de uma Materialized View aqui na empresa e, surgiu uma situação que gostaria da opinião dos DBA's (e Analistas) experientes, aqui do fórum, se possível.

Cenário:
Realizei a criação de uma MV, utiliei-a em "N" packages e, preciso alterá-la (Dropar e Criar novamente).

Dúvidas:
1) Pelo que analisei, não exite "Replace" para uma MV, correto? (Devo sempre dropá-la e recriá-la).
2) Tendo como resposta positiva, a questão 1, como os DBAs se comportam, quanto ao erro de "deadlock", que pode surgir, quando dropar a mesma? (pois ela contém dependências em outros objetos, como nas packages que me referi no cenário acima).

Pelo pouco que vi aqui, tive que "comentar" a chamada da MV nas packages, dropá-la, recriá-la e, "descomentar" a chamada dela nas dependências.

Seria isso mesmo que ocorre hoje? É que é meu primeiro contato e, tive problemas de "deadlock", quando da criação (por existir dependências nas packages).

Ou, esse "deadlock" que me referi, foi por utilização das tabelas envolvidas na MV, quando tentei criá-la novamente?

Muito obrigado,

Trevisolli
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Trevisolli,

Faz um tempinho que não crio materialized views, mas eu me recordo que fazia o seguinte procedimento:

- Criava uma "tabela base" (table) com o mesmo nome da materialized view a criar;
- Criava a materialized view, com a opção de utilizar a tabela base;

Feito isso, mesmo que eu remova a MV, sempre me restará a "tabela base". Eu acho então que se você repetir este procedimento, não deverá mais se deparar com bloqueios para recriar a MV, pois a dependências das packages será agora com a "tabela base" e não mais a MV.

Sobre o bloqueio, acredito que e ele ocorra porque os objetos dependentes da MV devem estar sendo continuamente usados, impedindo o comando para drogar a MV.

Abraços,

Sergio Coutinho
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

Trevisolli,

Respondendo às suas questões:

1- Realmente não existe a opção REPLACE em MVs, se precisar alterar algo tem que apagar e criar de novo

2- Não estou conseguindo entender o que você está querendo dizer com deadlock. Deadlock ocorre quando 2 transacoes dependem de tabelas uma da outra para finalizar a transacao, as 2 entram em conflito porque ficam aguardando a outra liberar a tabela, ninguém libera nada e aí o Oracle mata uma das transacoes e tudo volta a funcionar. Eu acho que você está querendo dizer que está ocorrendo um bloqueio apenas, certo????? Eu tenho MVs nos BDs que administro e também objetos que acessam elas e nunca tive esses problemas q você está comentando. Eu sempre apago a MV quando precisa alterá-la e recrio-a em seguida. Durante o tempo em que ela não existe (foi apagada) os objetos que acessam ela ficarão inválidos e poderão gerar erros nas aplicações, por isso, seja rápido ao recriá-la. Um ponto muito importante que você não pode deixar de fazer antes, é salvar os privilégios de acesso de todos os usuários na MV antes de apagá-la para depois recriá-la novamente, ok?

[]s
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:
________________________________
Douglas - Madmax.

Olá Trevisolli,

Aqui eu uso View Materilizadas ou Snapshopts como antigamente na verdade e a mesma coisa.

Bem eu crio elas com auto atualização em 1 hora para cada, mas e a gosto do fregues, eu enfrentei alguns Deadlocks na versão 10g mas na 11.2.0.3 e se o links dos banco for estável isso não acontece mais.

1 - Criação de view materialziada:

Selecionar tudo

CREATE MATERIALIZED VIEW XX_NOME_DOUGLAS
REFRESH FAST ON DEMAND
WITH ROWID
START WITH TO_DATE('02-01-2012 08:05:52', 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE + 1/24         
AS
SELECT * From tabela@dblink;
2 - Se precisar fazer um refresh na VM caso o dblink caiu use este comando:

Selecionar tudo

BEGIN
DBMS_SNAPSHOT.REFRESH(
LIST => 'schema.XX_NOME_DOUGLAS'
,METHOD => 'C'
,PUSH_DEFERRED_RPC => TRUE
,REFRESH_AFTER_ERRORS => FALSE
,PURGE_OPTION => 1
,PARALLELISM => 0
,ATOMIC_REFRESH => TRUE
,NESTED => FALSE);
END;
3 - Caso tenha Deadlock o único jeito e reiniciando o banco ou dropando e criando a VM novamente:

Selecionar tudo

DROP MATERIALIZED VIEW XX_NOME_DOUGLAS; 

CREATE MATERIALIZED VIEW XX_NOME_DOUGLAS
REFRESH FAST ON DEMAND
WITH ROWID
START WITH TO_DATE(SYSDATE, 'DD-MM-YYYY HH24:MI:SS') NEXT SYSDATE + 1/24 
AS
SELECT * FROM "XX_NOME_DOUGLAS"@MEUDBLINK.REGRESS.RDBMS.DEV.US.ORACLE.COM ;

Obs: quando você usa o REFRESH FAST ON DEMAND e criado um JOB automático no Banco e você consegue monitorar e verificar se estão atualizados com o select * from all_jobs.

Espero ter ajudado qualquer coisa posta aí.

Abs.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Valeu pessoal!
Perfeitas as respostas.


Eu realmente tive "deadlock" algumas vezes (talvez pelo tempo de recriação e constante utilização do BD) e uns ORA-01775 (Looping chain of synonyms), pois a MV utilizava funções da package onde era chamada e, no momento da recriação, o synonym apontava pra uma package inválida.

Mas, tudo resolvido aqui... vou seguir as dicas dos colegas ai...

Agradeço mais uma vez a presteza de vocês.

Grande abraço,

Trevisolli.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 17 visitantes