[oracle_br] Re: Trigger utilizando exception
Miltão, ele não diz mas SUPONDO que a tal tabela EMPLOYEE é a mesma usada para demonstrações a info sobre o salário do Gerente está em outro registro dessa MESMA tabela, então vai dar MUTATING se ele tentar fazer isso num trigger, okdoc ? Colega, antes de responder a sua pergunta sobre PL/SQL, fique Registrado que triggers muitas vezes *** Não São *** a melhor maneira de se fazer integridade de dados num ambiente Produção, pois : a) podem ser bypassadas por algumas tools de carga, e/ou em algumas situações impedir o funcionamento adequado de algumas tools (que tentem fazer direct path, por exemplo) b) podem interferir (às vezes seriamente) com a performance, já que (entre outras coisas) disparam uma vez a cada INSERT (imagine o overhead num ambiente com milhares de INSERTs ocorrendo) , não são parte do kernel do banco (são um elemento Externo, não escrito em C e sem possibilidade de usar ganchos e sub-rotinas internas do TRDBMS c) demandam Manutenção - natural, já que são construtos escritos por vc d) podem ter Diversos efeitos colaterais não previstos, vide http://www.oracle.com/technetwork/issue-archive/2008/08-sep/o58asktom-101055.html ==>> então Recursos nativos do database - como índices de função, constraints (seja em view materializadas seja em tabelas reais mesmo) e relacionados - deveriam ser considerados em primeiro lugar, okdoc ? Isso MESMO que alterações de modelagem sejam necessárias, tipo se adicionar no registro da tabela de empregados uma coluna oculta MGR_SAL que contém o salário do Gerente desse empregado, ter uma view materializada que "replica" a informação do salário do gerente para cada empregado, ou qquer coisa do tipo ... No caso específico de integridade de dados entre linhas diferentes da tabela (o que é o seu caso, aqui) Tem Autores que até defendem um outro approach : simplesmente REMOVER a permissão de INSERT nessa tabela e/ou UPDATE nessa coluna SALARIO e dar pra todos os interessados permissão de EXECUTE numa procedure ou função que vc escreveu e que faz todas as checagens antes de alterar o dado na tabela É outro ponto a considerar - não deixe de ler sobre essas possibilidades em http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:698031000346429496 , http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:636506144470 e http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:4233459000346171405 Vou responder as suas perguntas em um senso acadêmico, pra vc aprender, mas fique Ciente das questões acima quando vc for programar/usar um RDBMS Oracle "de verdade", right ? Isso dito, as suas Respostas: 1. como creio que vc já sabe, para proteção / integridade de dados o RDBMS não permite que vc faça nem SELECTs na tabela quando há alterações pendentes (o que é o caso da trigger BEFORE), sob pena de erro MUTATING TABLE - não há como fazer isso na sua lógica, que usa justamente uma trigger BEFORE INSERT na tabela employees e o registro do gerente a obter o salário Também está na employeesVc não diz mas Entendo que é esse o seu problema/dúvida aqui... Assim, para contornar isso SEM usar as opções melhores que citei lá no começo, vc poderia : - usar uma transação Autônoma que busque a info e/ou - ter uma trigger AFTER, que dispara após a inserção/alteração e/ou - SE a sua versão é 11g (o que vc não diz mas deveria, é SEMPRE aconselhável citar a versão) vc poderia talvez usar copound triggers, veja http://mikesmithers.wordpress.com/2010/04/24/compound-triggers-%E2%80%93-managing-the-mutant-menace/ 2. sobe a Exception, não : vc Não Pode usar uma Exception para "mostrar" nada em princípio : o que uma EXCEPTION faz é desviar o fluxo do seu programa quando há um erro, mas por si só ela NÃO implica em "mensagem" alguma, nem em Abort do fluxo PL/SQL, nem em "aviso" algum, ok ? Vc até poderia na área de EXCEPTION usar um comando apropriado (e inclusive Se vc quer que o cliente que dez o SQL receba um warning E também que o SQL seja abortado/sinalizado com erro, RAISE_APPLICATION_ERROR é a opção), mas não é de forma alguma Obrigatório o EXCEPTION []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "Milton Bastos Henriquis Jr." escreveu > > Boa tarde! > > Suas perguntas já estão todas respondidas por você mesmo... rs > Está tudo correto o que vc falou. > > Faça um SELECT INTO para pegar o valor do salário do gerente > do sujeito e armazenar numa variável. > Depois compare o valor do salário do sujeito com a variável... > Se for maior, vc dispara a exceção. > > > > > 2012/9/18 Antony Ferreira > > > ** > > > > > > Boa tarde pessoal, > > > > Estou começando a estudar um pouco de PL/SQL e me surgiu umas duvidas. > > Tenho a seguinte trigger: > >
Re: [oracle_br] Trigger utilizando exception
Blz, vou fazer as alterações e testar aqui pra ver como que vai funcionar. Vlw mto obrigado pelas dicas. Em 18 de setembro de 2012 18:07, Milton Bastos Henriquis Jr. < miltonbas...@gmail.com> escreveu: > Bom, lógica de programação é algo muito simples! > Vc tem que saber o que exatamente vc quer que o teu código faça... > > Vc criou ali um IF (não sei se foi vc que fez ou se vc copiou o código) > pra testar se o cara é "presidente" ou "vp", pois se for, daí vc não > testa o salário do cara... então não faz sentido vc fazer o select FORA > do primeiro if, senão vc poderá estar executando um select a toa. > Então é melhor vc executar dentro do primeiro IF. > > > > > 2012/9/18 Antony Ferreira > > > ** > > > > > > A select eu teria que fazer dentro do primeiro IF ou antes do IF, como > > estou começando a pegar os esquemas do PLSQL agora, tem coisas que eu > fico > > na duvida um pouco. > > > > Em 18 de setembro de 2012 17:52, Milton Bastos Henriquis Jr. < > > miltonbas...@gmail.com> escreveu: > > > > > > > Boa tarde! > > > > > > Suas perguntas já estão todas respondidas por você mesmo... rs > > > Está tudo correto o que vc falou. > > > > > > Faça um SELECT INTO para pegar o valor do salário do gerente > > > do sujeito e armazenar numa variável. > > > Depois compare o valor do salário do sujeito com a variável... > > > Se for maior, vc dispara a exceção. > > > > > > > > > > > > > > > 2012/9/18 Antony Ferreira > > > > > > > ** > > > > > > > > > > > > > > Boa tarde pessoal, > > > > > > > > Estou começando a estudar um pouco de PL/SQL e me surgiu umas > duvidas. > > > > Tenho a seguinte trigger: > > > > > > > > CREATE OR REPLACE TRIGGER imp_novos_emp > > > > BEFORE INSERT OR UPDATE ON employees > > > > FOR EACH ROW > > > > BEGIN > > > > IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP')) THEN > > > > IF :NEW.salary > 15000 THEN > > > > RAISE_APPLICATION_ERROR (-20202,'Este empregado não pode receber este > > > > valor'); > > > > END IF; > > > > END IF; > > > > END imp_novos_emp; > > > > / > > > > > > > > Qual seria a melhor maneira para eu poder impedir que seja inserido > um > > > novo > > > > empregado que tenha o salario maior que o gerente. > > > > > > > > Eu teria que fazer uma consulta na coluna manager_id da tabela > > employees > > > e > > > > verificar se o salario do empregado que eu estou add é maior que o do > > > > gerente? > > > > Outra duvida, posso colocar uma excessão para mostrar que o salario é > > > > invalido quando o salario do empregado que eu estou add é maior que o > > do > > > > gerente? > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > > > > > > -- > > > Att, > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > > > > > -- > > > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > > > inteira responsabilidade de seus remetentes. > > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > > > > > -- > > > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > > > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO > > ESPAÇO! > > > VISITE: http://www.oraclebr.com.br/ > > > -- > > > Links do Yahoo! Grupos > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > -- > Att, > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > -- > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > -- > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! > VISITE: http://www.oraclebr.com.br/ > > Links do Yahoo! Grupos > > > [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger utilizando exception
Bom, lógica de programação é algo muito simples! Vc tem que saber o que exatamente vc quer que o teu código faça... Vc criou ali um IF (não sei se foi vc que fez ou se vc copiou o código) pra testar se o cara é "presidente" ou "vp", pois se for, daí vc não testa o salário do cara... então não faz sentido vc fazer o select FORA do primeiro if, senão vc poderá estar executando um select a toa. Então é melhor vc executar dentro do primeiro IF. 2012/9/18 Antony Ferreira > ** > > > A select eu teria que fazer dentro do primeiro IF ou antes do IF, como > estou começando a pegar os esquemas do PLSQL agora, tem coisas que eu fico > na duvida um pouco. > > Em 18 de setembro de 2012 17:52, Milton Bastos Henriquis Jr. < > miltonbas...@gmail.com> escreveu: > > > > Boa tarde! > > > > Suas perguntas já estão todas respondidas por você mesmo... rs > > Está tudo correto o que vc falou. > > > > Faça um SELECT INTO para pegar o valor do salário do gerente > > do sujeito e armazenar numa variável. > > Depois compare o valor do salário do sujeito com a variável... > > Se for maior, vc dispara a exceção. > > > > > > > > > > 2012/9/18 Antony Ferreira > > > > > ** > > > > > > > > > > Boa tarde pessoal, > > > > > > Estou começando a estudar um pouco de PL/SQL e me surgiu umas duvidas. > > > Tenho a seguinte trigger: > > > > > > CREATE OR REPLACE TRIGGER imp_novos_emp > > > BEFORE INSERT OR UPDATE ON employees > > > FOR EACH ROW > > > BEGIN > > > IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP')) THEN > > > IF :NEW.salary > 15000 THEN > > > RAISE_APPLICATION_ERROR (-20202,'Este empregado não pode receber este > > > valor'); > > > END IF; > > > END IF; > > > END imp_novos_emp; > > > / > > > > > > Qual seria a melhor maneira para eu poder impedir que seja inserido um > > novo > > > empregado que tenha o salario maior que o gerente. > > > > > > Eu teria que fazer uma consulta na coluna manager_id da tabela > employees > > e > > > verificar se o salario do empregado que eu estou add é maior que o do > > > gerente? > > > Outra duvida, posso colocar uma excessão para mostrar que o salario é > > > invalido quando o salario do empregado que eu estou add é maior que o > do > > > gerente? > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > -- > > Att, > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > -- > > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > > inteira responsabilidade de seus remetentes. > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > > > -- > > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO > ESPAÇO! > > VISITE: http://www.oraclebr.com.br/ > > -- > > Links do Yahoo! Grupos > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Att, [As partes desta mensagem que não continham texto foram removidas] -- >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >http://www.oraclebr.com.br/ 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: oracle_br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [oracle_br] Trigger utilizando exception
A select eu teria que fazer dentro do primeiro IF ou antes do IF, como estou começando a pegar os esquemas do PLSQL agora, tem coisas que eu fico na duvida um pouco. Em 18 de setembro de 2012 17:52, Milton Bastos Henriquis Jr. < miltonbas...@gmail.com> escreveu: > Boa tarde! > > Suas perguntas já estão todas respondidas por você mesmo... rs > Está tudo correto o que vc falou. > > Faça um SELECT INTO para pegar o valor do salário do gerente > do sujeito e armazenar numa variável. > Depois compare o valor do salário do sujeito com a variável... > Se for maior, vc dispara a exceção. > > > > > 2012/9/18 Antony Ferreira > > > ** > > > > > > Boa tarde pessoal, > > > > Estou começando a estudar um pouco de PL/SQL e me surgiu umas duvidas. > > Tenho a seguinte trigger: > > > > CREATE OR REPLACE TRIGGER imp_novos_emp > > BEFORE INSERT OR UPDATE ON employees > > FOR EACH ROW > > BEGIN > > IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP')) THEN > > IF :NEW.salary > 15000 THEN > > RAISE_APPLICATION_ERROR (-20202,'Este empregado não pode receber este > > valor'); > > END IF; > > END IF; > > END imp_novos_emp; > > / > > > > Qual seria a melhor maneira para eu poder impedir que seja inserido um > novo > > empregado que tenha o salario maior que o gerente. > > > > Eu teria que fazer uma consulta na coluna manager_id da tabela employees > e > > verificar se o salario do empregado que eu estou add é maior que o do > > gerente? > > Outra duvida, posso colocar uma excessão para mostrar que o salario é > > invalido quando o salario do empregado que eu estou add é maior que o do > > gerente? > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > -- > Att, > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > -- > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > -- > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! > VISITE: http://www.oraclebr.com.br/ > > Links do Yahoo! Grupos > > > [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Trigger utilizando exception
Boa tarde! Suas perguntas já estão todas respondidas por você mesmo... rs Está tudo correto o que vc falou. Faça um SELECT INTO para pegar o valor do salário do gerente do sujeito e armazenar numa variável. Depois compare o valor do salário do sujeito com a variável... Se for maior, vc dispara a exceção. 2012/9/18 Antony Ferreira > ** > > > Boa tarde pessoal, > > Estou começando a estudar um pouco de PL/SQL e me surgiu umas duvidas. > Tenho a seguinte trigger: > > CREATE OR REPLACE TRIGGER imp_novos_emp > BEFORE INSERT OR UPDATE ON employees > FOR EACH ROW > BEGIN > IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP')) THEN > IF :NEW.salary > 15000 THEN > RAISE_APPLICATION_ERROR (-20202,'Este empregado não pode receber este > valor'); > END IF; > END IF; > END imp_novos_emp; > / > > Qual seria a melhor maneira para eu poder impedir que seja inserido um novo > empregado que tenha o salario maior que o gerente. > > Eu teria que fazer uma consulta na coluna manager_id da tabela employees e > verificar se o salario do empregado que eu estou add é maior que o do > gerente? > Outra duvida, posso colocar uma excessão para mostrar que o salario é > invalido quando o salario do empregado que eu estou add é maior que o do > gerente? > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Att, [As partes desta mensagem que não continham texto foram removidas] -- >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >http://www.oraclebr.com.br/ 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: oracle_br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
[oracle_br] Re: Tabelas Particionadas - Table Partition
Uma dica : ** releia ** a minha msg, onde eu digo que além do tamanho E do fato de ser bastante usada, ela TEM que estar sendo usada da maneira adequada para se pensar em particionamento , ie : ela deve estar sendo usada para SCAN basicamente (e não para index lookup/key search), a chave de particionamento TEM que estar sendo referenciada na ESMAGADORA maioria das consultas , okdoc ??? []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Wanderson Barrence escreveu > > Olá Pessoal, > > Vocês já ajudaram bastante!!! > > A tabela da minha base dados que eu estou querendo particionar tem 10,15 GB > e mais 81.000 Linhas, e ainda tem uma coluna BLOB!!! > > Geralmente essa tabela é bastante usada pelo sistema. > > Att, > > -- > Wanderson Barrence > DBA Oracle 10g/11g > Analista de Testes - CBTS > -- > MSN: wbarrence@... > ICQ: 170821994 > Linkedin: http://br.linkedin.com/in/wbarrence > > > > Em 18 de setembro de 2012 10:58, Milton Bastos Henriquis Jr. < > miltonbastos@...> escreveu: > > > Wanderson, acho que vc deveria estudar todo o conceito de particionamento > > de tabelas, entender as vantagens que o particionamento pode te trazer, pra > > daí > > então vc (que conhece o seu ambiente, que conhece a SUA base de dados) > > ver quais as tabelas que são mais indicadas. > > > > Aqui numa lista de e-mail fica fácil a gente responder dúvidas pontuais, ou > > seja, > > "detalhes". Mas ficar ensinando todo um conceito de uma Option não é nada > > rápido. > > > > Tem diversas situações diferentes, diversos cenários onde se é vantajoso > > aplicar > > o particionamento. As condições não se restrigem ao que vc citou abaixo > > (tamanho > > da tabela, quantidade de linhas, etc...). Depende do seu cenário. > > > > Um cenário clássico são tabelas que tenham crescimento muito alto > > (milhões de registros por mês sendo inseridos) E que além disso os SELECTs > > mais > > frequentes sejam nos dados mais RECENTES (mês corrente, por exemplo). > > É o caso onde os dados dos meses anteriores acabam virando apenas um > > histórico, > > ou seja, quase nunca são acessados. Daí cabe muito bem um particionamento > > pelo campo DATA, usando o MÊS. > > > > Portanto não adianta apenas falar: "ah, veja as tabelas que tem mais > > linhas!" > > Vc precisa aprender o CONCEITO do particionamento pra daí vc saber se é > > aplicável > > no SEU ambiente, no seu cenário. > > > > Demonstrei apenas um caso acima e meu e-mail já ficou enorme... se fosse > > mostrar todas possibilidades eu ficaria dias aqui escrevendo, por isso eu > > disse no começo, > > é importante primeiro aprender todo o conceito. > > > > > > > > > > 2012/9/18 Wanderson Barrence > > > > > ** > > > > > > > > > Olá Pessoal, > > > > > > Alguém sabe como eu faço para definir as tabelas que são candidatas a > > serem > > > particionadas? > > > Essas tabelas são definidas por quantidade de linhas, tamanho em MB ou > > > quantidade de acesso? > > > > > > Att, > > > -- > > > Wanderson Barrence > > > DBA Oracle 10g/11g > > > Analista de Testes - CBTS > > > -- > > > MSN: wbarrence@... > > > ICQ: 170821994 > > > Linkedin: http://br.linkedin.com/in/wbarrence > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > -- > > Att, > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > -- > > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > > inteira responsabilidade de seus remetentes. > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > > > -- > > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! > > VISITE: http://www.oraclebr.com.br/ > > > > Links do Yahoo! Grupos > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] >
[oracle_br] Ajuda - Desempenho em consulta
Olá Pessoal. > > > >Estou passando por um problema sério numa consulta no ambiente de produção, a >mesma apresenta lentidão na sua utilização(praticamente todo o sistema a >utiliza), como não tenho experiência em Tunning de consulta, estou recorrendo >a ajuda de vocês. > > >Será que poderiam me ajudar a melhorar a consulta de forma que eu consiga ter >ganho de desempenho. > > >Como não tenho muita experiência em SQL, talvez com ajuda de vocês, seja >possível reescrever um SQL que foi mal escrito pelo desenvolvedor ou até mesmo >sugerir a criação índice. > > > > >Obs.: o script foi criado para T-SQL mas pelo que pude analisar, o que impacta >mesmo são as condições utilizadas como clausulas UNION, DISTINCT. Precisaria >mesmo de uma apoio para reescrever a consulta utilizando melhor a linguagem >SQL para optimizar a mesma. > > > >Toda ajuda é sempre bem vinda. >Desde já agradeço o apoio de sempre. -- CREATE PROCEDURE [dbo].[SP_AV_SELECT_MINHAS_AVALIACOES] ( @CPF VARCHAR(14) ) AS -- MINHAS AVALIAÇÕES SELECT COD_AVALIACAO, COD_CR_ASSOCIADO, COD_EMP_ASSOCIADO, DES_NOME_CARGO, COD_MODELO, ANO_APLICACAO, COD_STATUS, IDPESSOA, DAT_CRIACAO, USR_CRIACAO, DAT_ULT_ATUALIZACAO, USR_ULT_ATUALIZACAO, DAT_LIMITE_PREENCHIMENTO, DAT_CRIACAO_RELATORIO, USR_CRIACAO_RELATORIO, CPF_ASSOCIADO, RELATORIO_GERADO FROM DBO.AV_AVALIACAO WHERE (CPF_ASSOCIADO = @CPF) -- MINHAS AVALIAÇÕES UNION -- AVALIAÇÕES SUBORDINADOS SELECTDBO.AV_AVALIACAO.COD_AVALIACAO, DBO.AV_AVALIACAO.COD_CR_ASSOCIADO, DBO.AV_AVALIACAO.COD_EMP_ASSOCIADO, DBO.AV_AVALIACAO.DES_NOME_CARGO, DBO.AV_AVALIACAO.COD_MODELO, DBO.AV_AVALIACAO.ANO_APLICACAO, DBO.AV_AVALIACAO.COD_STATUS, DBO.AV_AVALIACAO.IDPESSOA, DBO.AV_AVALIACAO.DAT_CRIACAO, DBO.AV_AVALIACAO.USR_CRIACAO, DBO.AV_AVALIACAO.DAT_ULT_ATUALIZACAO, DBO.AV_AVALIACAO.USR_ULT_ATUALIZACAO, DBO.AV_AVALIACAO.DAT_LIMITE_PREENCHIMENTO, DBO.AV_AVALIACAO.DAT_CRIACAO_RELATORIO, DBO.AV_AVALIACAO.USR_CRIACAO_RELATORIO, DBO.AV_AVALIACAO.CPF_ASSOCIADO, DBO.AV_AVALIACAO.RELATORIO_GERADO FROM DBO.AV_QUESTIONARIO INNER JOIN DBO.AV_AVALIACAO ON DBO.AV_QUESTIONARIO.COD_AVALIACAO = DBO.AV_AVALIACAO.COD_AVALIACAO WHERE DBO.AV_QUESTIONARIO.COD_TIPO_QUESTIONARIO = 2 AND (DBO.AV_QUESTIONARIO.IDPESSOA IN (SELECT DBO.USUARIO_DADOS.IDPESSOA FROM DBO.USUARIO_DADOS WHERE CPF = @CPF AND IDPESSOA <> '')) -- AVALIAÇÕES SUBORDINADOS UNION -- AVALIAÇÕES QUESTIONÁRIOS PENDENTES SELECTDBO.AV_AVALIACAO.COD_AVALIACAO, DBO.AV_AVALIACAO.COD_CR_ASSOCIADO, DBO.AV_AVALIACAO.COD_EMP_ASSOCIADO, DBO.AV_AVALIACAO.DES_NOME_CARGO, DBO.AV_AVALIACAO.COD_MODELO, DBO.AV_AVALIACAO.ANO_APLICACAO, DBO.AV_AVALIACAO.COD_STATUS, DBO.AV_AVALIACAO.IDPESSOA, DBO.AV_AVALIACAO.DAT_CRIACAO, DBO.AV_AVALIACAO.USR_CRIACAO, DBO.AV_AVALIACAO.DAT_ULT_ATUALIZACAO, DBO.AV_AVALIACAO.USR_ULT_ATUALIZACAO, DBO.AV_AVALIACAO.DAT_LIMITE_PREENCHIMENTO, DBO.AV_AVALIACAO.DAT_CRIACAO_RELATORIO, DBO.AV_AVALIACAO.USR_CRIACAO_RELATORIO, DBO.AV_AVALIACAO.CPF_ASSOCIADO, DBO.AV_AVALIACAO.RELATORIO_GERADO FROM DBO.AV_QUESTIONARIO INNER JOIN DBO.AV_AVALIACAO ON DBO.AV_QUESTIONARIO.COD_AVALIACAO = DBO.AV_AVALIACAO.COD_AVALIACAO WHERE DBO.AV_QUESTIONARIO.STA_QUESTIONARIO = 1 AND (DBO.AV_AVALIACAO.COD_STATUS = 1) AND (DBO.AV_QUESTIONARIO.IDPESSOA IN (SELECT DBO.USUARIO_DADOS.IDPESSOA FROM DBO.USUARIO_DADOS WHERE CPF = @CPF AND IDPESSOA <> '')) -- AVALIAÇÕES QUESTIONÁRIOS PENDENTES UNION -- AVALIAÇÕES COM STATUS DEVOLUTIVA E SUPERIOR ATUAL DIFERENTE SELECT DISTINCT A.COD_AVALIACAO, A.COD_CR_ASSOCIADO, A.COD_EMP_ASSOCIADO, A.DES_NOME_CARGO, A.COD_MODELO, A.ANO_APLICACAO, A.COD_STATUS, A.IDPESSOA, A.DAT_CRIACAO, A.USR_CRIACAO, A.DAT_ULT_ATUALIZACAO, A.USR_ULT_ATUALIZACAO, A.DAT_LIMITE_PREENCHIMENTO, A.DAT_CRIACAO_RELATORIO, A.USR_CRIACAO_RELATORIO, A.CPF_ASSOCIADO, A.RELATORIO_GERADO FROM DBO.AV_QUESTIONARIO Q, DBO.AV_AVALIACAO A, DBO.USUARIO_DADOS U WHERE Q.COD_TIPO_QUESTIONARIO = 2 AND Q.STA_QUESTIONARIO = 2 AND Q.COD_AVALIACAO = A.COD_AVALIACAO AND A.COD_STATUS = 3 AND U.CPF = A.CPF_ASSOCIADO AND U.DATA_DEMISSAO IS NULL AND (U.IDPESSOA_SUPERIORIMEDIATO IN (SELECT UD.IDPESSOA FROM DBO.USUARIO_DADOS UD WHERE UD.C
Re: [oracle_br] Tabelas Particionadas - Table Partition
Sua tabela parece ser "grande" (em GB) graças ao BLOB. Ela é muito pequena em número de linhas. Menos de 100 mil linhas! Sinceramente não sei se é o caso, mas ACHO que particionamento não vá ajudar em nada! O Chiappa pode falar a respeito e me corrigir se eu estiver errado... sinceramente eu não sei se vale a pena particioná-la só por causa do tamanho em GB. Teria que ver se existe algum campo que justifique a "divisão lógica" pra particionar essa tabela. Se não existir, ou seja, se os seus Select's ficarem buscando dados em TODAS as partições, daí eu não vejo vantagem no particionamento. 2012/9/18 Wanderson Barrence > ** > > > Olá Pessoal, > > Vocês já ajudaram bastante!!! > > A tabela da minha base dados que eu estou querendo particionar tem 10,15 GB > e mais 81.000 Linhas, e ainda tem uma coluna BLOB!!! > > Geralmente essa tabela é bastante usada pelo sistema. > > > Att, > > -- > Wanderson Barrence > DBA Oracle 10g/11g > Analista de Testes - CBTS > -- > MSN: wbarre...@hotmail.com > ICQ: 170821994 > Linkedin: http://br.linkedin.com/in/wbarrence > > Em 18 de setembro de 2012 10:58, Milton Bastos Henriquis Jr. < > miltonbas...@gmail.com> escreveu: > > > > Wanderson, acho que vc deveria estudar todo o conceito de particionamento > > de tabelas, entender as vantagens que o particionamento pode te trazer, > pra > > daí > > então vc (que conhece o seu ambiente, que conhece a SUA base de dados) > > ver quais as tabelas que são mais indicadas. > > > > Aqui numa lista de e-mail fica fácil a gente responder dúvidas pontuais, > ou > > seja, > > "detalhes". Mas ficar ensinando todo um conceito de uma Option não é nada > > rápido. > > > > Tem diversas situações diferentes, diversos cenários onde se é vantajoso > > aplicar > > o particionamento. As condições não se restrigem ao que vc citou abaixo > > (tamanho > > da tabela, quantidade de linhas, etc...). Depende do seu cenário. > > > > Um cenário clássico são tabelas que tenham crescimento muito alto > > (milhões de registros por mês sendo inseridos) E que além disso os > SELECTs > > mais > > frequentes sejam nos dados mais RECENTES (mês corrente, por exemplo). > > É o caso onde os dados dos meses anteriores acabam virando apenas um > > histórico, > > ou seja, quase nunca são acessados. Daí cabe muito bem um particionamento > > pelo campo DATA, usando o MÊS. > > > > Portanto não adianta apenas falar: "ah, veja as tabelas que tem mais > > linhas!" > > Vc precisa aprender o CONCEITO do particionamento pra daí vc saber se é > > aplicável > > no SEU ambiente, no seu cenário. > > > > Demonstrei apenas um caso acima e meu e-mail já ficou enorme... se fosse > > mostrar todas possibilidades eu ficaria dias aqui escrevendo, por isso eu > > disse no começo, > > é importante primeiro aprender todo o conceito. > > > > > > > > > > 2012/9/18 Wanderson Barrence > > > > > ** > > > > > > > > > > Olá Pessoal, > > > > > > Alguém sabe como eu faço para definir as tabelas que são candidatas a > > serem > > > particionadas? > > > Essas tabelas são definidas por quantidade de linhas, tamanho em MB ou > > > quantidade de acesso? > > > > > > Att, > > > -- > > > Wanderson Barrence > > > DBA Oracle 10g/11g > > > Analista de Testes - CBTS > > > -- > > > MSN: wbarre...@hotmail.com > > > ICQ: 170821994 > > > Linkedin: http://br.linkedin.com/in/wbarrence > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > -- > > Att, > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > -- > > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > > inteira responsabilidade de seus remetentes. > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > > > -- > > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO > ESPAÇO! > > VISITE: http://www.oraclebr.com.br/ > > -- > > Links do Yahoo! Grupos > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Att, [As partes desta mensagem que não continham texto foram removidas] -- >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- >Apostilas » Dicas e Exemplos » Funç
Re: [oracle_br] Tabelas Particionadas - Table Partition
Olá Pessoal, Vocês já ajudaram bastante!!! A tabela da minha base dados que eu estou querendo particionar tem 10,15 GB e mais 81.000 Linhas, e ainda tem uma coluna BLOB!!! Geralmente essa tabela é bastante usada pelo sistema. Att, -- Wanderson Barrence DBA Oracle 10g/11g Analista de Testes - CBTS -- MSN: wbarre...@hotmail.com ICQ: 170821994 Linkedin: http://br.linkedin.com/in/wbarrence Em 18 de setembro de 2012 10:58, Milton Bastos Henriquis Jr. < miltonbas...@gmail.com> escreveu: > Wanderson, acho que vc deveria estudar todo o conceito de particionamento > de tabelas, entender as vantagens que o particionamento pode te trazer, pra > daí > então vc (que conhece o seu ambiente, que conhece a SUA base de dados) > ver quais as tabelas que são mais indicadas. > > Aqui numa lista de e-mail fica fácil a gente responder dúvidas pontuais, ou > seja, > "detalhes". Mas ficar ensinando todo um conceito de uma Option não é nada > rápido. > > Tem diversas situações diferentes, diversos cenários onde se é vantajoso > aplicar > o particionamento. As condições não se restrigem ao que vc citou abaixo > (tamanho > da tabela, quantidade de linhas, etc...). Depende do seu cenário. > > Um cenário clássico são tabelas que tenham crescimento muito alto > (milhões de registros por mês sendo inseridos) E que além disso os SELECTs > mais > frequentes sejam nos dados mais RECENTES (mês corrente, por exemplo). > É o caso onde os dados dos meses anteriores acabam virando apenas um > histórico, > ou seja, quase nunca são acessados. Daí cabe muito bem um particionamento > pelo campo DATA, usando o MÊS. > > Portanto não adianta apenas falar: "ah, veja as tabelas que tem mais > linhas!" > Vc precisa aprender o CONCEITO do particionamento pra daí vc saber se é > aplicável > no SEU ambiente, no seu cenário. > > Demonstrei apenas um caso acima e meu e-mail já ficou enorme... se fosse > mostrar todas possibilidades eu ficaria dias aqui escrevendo, por isso eu > disse no começo, > é importante primeiro aprender todo o conceito. > > > > > 2012/9/18 Wanderson Barrence > > > ** > > > > > > Olá Pessoal, > > > > Alguém sabe como eu faço para definir as tabelas que são candidatas a > serem > > particionadas? > > Essas tabelas são definidas por quantidade de linhas, tamanho em MB ou > > quantidade de acesso? > > > > Att, > > -- > > Wanderson Barrence > > DBA Oracle 10g/11g > > Analista de Testes - CBTS > > -- > > MSN: wbarre...@hotmail.com > > ICQ: 170821994 > > Linkedin: http://br.linkedin.com/in/wbarrence > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > -- > Att, > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > -- > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > -- > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! > VISITE: http://www.oraclebr.com.br/ > > Links do Yahoo! Grupos > > > [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Tabelas Particionadas - Table Partition
Wanderson, acho que vc deveria estudar todo o conceito de particionamento de tabelas, entender as vantagens que o particionamento pode te trazer, pra daí então vc (que conhece o seu ambiente, que conhece a SUA base de dados) ver quais as tabelas que são mais indicadas. Aqui numa lista de e-mail fica fácil a gente responder dúvidas pontuais, ou seja, "detalhes". Mas ficar ensinando todo um conceito de uma Option não é nada rápido. Tem diversas situações diferentes, diversos cenários onde se é vantajoso aplicar o particionamento. As condições não se restrigem ao que vc citou abaixo (tamanho da tabela, quantidade de linhas, etc...). Depende do seu cenário. Um cenário clássico são tabelas que tenham crescimento muito alto (milhões de registros por mês sendo inseridos) E que além disso os SELECTs mais frequentes sejam nos dados mais RECENTES (mês corrente, por exemplo). É o caso onde os dados dos meses anteriores acabam virando apenas um histórico, ou seja, quase nunca são acessados. Daí cabe muito bem um particionamento pelo campo DATA, usando o MÊS. Portanto não adianta apenas falar: "ah, veja as tabelas que tem mais linhas!" Vc precisa aprender o CONCEITO do particionamento pra daí vc saber se é aplicável no SEU ambiente, no seu cenário. Demonstrei apenas um caso acima e meu e-mail já ficou enorme... se fosse mostrar todas possibilidades eu ficaria dias aqui escrevendo, por isso eu disse no começo, é importante primeiro aprender todo o conceito. 2012/9/18 Wanderson Barrence > ** > > > Olá Pessoal, > > Alguém sabe como eu faço para definir as tabelas que são candidatas a serem > particionadas? > Essas tabelas são definidas por quantidade de linhas, tamanho em MB ou > quantidade de acesso? > > Att, > -- > Wanderson Barrence > DBA Oracle 10g/11g > Analista de Testes - CBTS > -- > MSN: wbarre...@hotmail.com > ICQ: 170821994 > Linkedin: http://br.linkedin.com/in/wbarrence > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Att, [As partes desta mensagem que não continham texto foram removidas] -- >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ -- >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >http://www.oraclebr.com.br/ 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: oracle_br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
[oracle_br] Re: Tabelas Particionadas - Table Partition
Não é por ** nenhum ** desses elementos isoladamente - a Recomendação principal é vc particionar as tabelas que : - sejam de um tamanho na casa de dezenas (ou centenas) de Gigabytes e acima - não é MB, e sim GB E QUE - não sejam acessadas via lookup/ index search (particionamento só faz sentido via de regra quando há algum tipode SCAN envolvido, se a busca é por chave de índice normalmente não há efeito positivo) E QUE - tenham um elemento de agrupação de registros lógico bem definido , que na Esmagadora maioria dos acesso vai estar presente em quase TODAs as queries dos usuários E que consiga "eliminar" muitos registros na filtragem => Por exemplo, suponha que haja uma Data de Uso, que haja muitos registros espalhados em muitos meses do ano mas quase todas as queries vão se referir a um Mês específico, esse seria um caso típico que poderia se beneficiar de Particionamento : nesse cenário seria possível acessar só a partição (ou as poucas partições, se não for particionamento por mês mas por data) que são capazes de conter os registros desejados, pulando as outras e assim possibilitando SCANs muito mais eficientes. Óbvio ululante, se essas condições todas não estiverem presentes, é MUITO possível que vc piore a performance : imagine que vc particionou por data mas NÂO há nas queries uma filtragem por data - o que vai acontecer nesse caso é que, ao invés do RDBMS conseguir fazer um único e suculento full table scan/index fast full scan pra encontrar os dados (e provavelmente em parallel), no caso de partição com chave não-referenciada os dados podem estar em Qualquer partição, então o coitado do RDBMS vai ter ler as partições uma a uma, começando pela primeira, depois pela segunda, depois pela terceira - ou seja, ao invés de um único "I/O longo lógico" num único segmento ele vai ter que acessar/ler N segmentos a mais para encontrar os dados, é bem possível que neste cenário a performance piore Brutalmente []s Chiappa OBS : claro, há também a utilização do Particionamento como ferramenta administrativa - por exemplo, usar o recurso de rapidamente "transformar" uma dada partição numa tabela, que pode ser backupeada/arquivada separadamente, ou transformando uma tabela de trabalho numa Partição para cargas rápidas, etc), mas isso em princípio não traz vantagem direta para os usuários finais, então dificilmente pode ser elencado como recurso crítico, mas existe também. --- Em oracle_br@yahoogrupos.com.br, Wanderson Barrence escreveu > > Olá Pessoal, > > Alguém sabe como eu faço para definir as tabelas que são candidatas a serem > particionadas? > Essas tabelas são definidas por quantidade de linhas, tamanho em MB ou > quantidade de acesso? > > Att, > -- > Wanderson Barrence > DBA Oracle 10g/11g > Analista de Testes - CBTS > -- > MSN: wbarrence@... > ICQ: 170821994 > Linkedin: http://br.linkedin.com/in/wbarrence > > > [As partes desta mensagem que não continham texto foram removidas] >