Re: [oracle_br] Re: Medir desempenho de banco Oracle
Chiappa, Muito obrigado pela resposta, que na verdade foi de super alto nível. O meu grande problema está referente ao DB Link citado por você, dá maneira que construíram a arquitetura da aplicação. Sendo que tenho dois Database A e B, onde acesso os mesmos através de DB Link, a única coisa é que os dois estão instalados no mesmo banco de dados Oracle 10g, o que me intriga o porque não fizeram dois tablespace , desta forma não precisaríamos ter o dblink é a consulta seria sem dúvidas muito mais rápido. O problema foi causado talvez por falta de conhecimento da equipe anterior, pois como estamos falando do mesmo Database, poderiamos estar criado apenas tablespace e usuários diferentes para cada banco. De qualquer forma obrigado pelas dicas anteriores. Abraços, Vitor Hugo Brito de Oliveira Decimal Tecnologia Em Informatica LTDA. BLOG: http://emdia.wordpress.com/ MSN: hugov1...@hotmail.com De: José Laurindo Para: oracle_br@yahoogrupos.com.br Enviadas: Quinta-feira, 18 de Agosto de 2011 21:32 Assunto: [oracle_br] Re: Medir desempenho de banco Oracle A guia geral é vc verificar a Eficiência dos seus SQLs : quando eu disse "SQL mal escrito", não quis dizer SQL que não segue um "padrão", nem SQL que segue ou não segue uma determinado sintaxe, eu queis me referir a SQLs ineficientes... Pra vc verificar a eficiência dos seus SQLs, há basicamente 3 coisas a se fazer : a) conferir quantos LIOs (Logical I/Os. ie, quantos blocos Oracle) são acessados pra se produzir as linhas-destino : em caso de acesso sequencial via índice o ideal é se ter uma proporção por volta de 6 LIos por linha (digamos, um LIO pra se ler o root block do índice, um pra se ler o branch, outro pra se ler o leaf, mais um pra se obter o bloco de dados, com uma adiçãozinha de margem chegamos nos 6 LIOs), enquanto no caso de fast full index scan/table scan aí (claro) não dá pra saber onde os dados vão estar (pode ser que vc tenha ler a tabela inteira pra achar um dado), então não se pode estabelecer uma escala , mas o fato é , vc TEM que reduzir ao máximo os LIOs , portanto em caso de scan vc TEM que se assegurar que não há white-space sem dados sendo lido, que o high-water mark não esteja absurdamente alto, que as opções de Redução de LIOs em scans (como Particionamento, por exemplo) estão presentes e sendo usadas... Em caso de scan ainda há a questão de se assegurar I/O otimizado, o que implica em tamanho de extent aproipriado, db_file_multiblock_read_count (se viável) bem ajustado, etc... b) WAITs : todo SQL, óbvio, tem algum tipo de WAIT, o objetivo nesta verificação é não ter nada absolutamente desbalanceado , nenhum wait que sozinho responda por uma percentagem significativa do total, SE houver isso deve ser corrigido / melhorado... c) consumo de recursos : todo SQL consome alguma CPU, algum I/O, implica em algum nível de tráfego de rede, pode sofrer/participar de concorrência outras sessões querendo acessar os exatos mesmos blocos que o seu SQL tá usando/querendo usar) ... Aqui novamente não há um número ideal, o objetivo é ter o menos possível de consumo, E evitar o desperdício... Exemplos típicos de desperdício são SQLs sendo reparseados frequentemente (o que gasta cliclos e ciclos de CPU à toa), montes de SQLs semelhantes sendo gerados por não-uso de BIND VARIABLEs, a mesma informação sendo lidas várias vezes (por exemplo, em sub-queries), coisas assim... Tools : para a) e b) a tool é o TKPROF em cima de um trace de SQL. Para c) pode-se usar a V$SQL e as V$ de eventos de performance da sessão, mas não há um método único pra isso, a idéia é que um DBA ** experiente ** consulte as V$ necessárias (principalmente a V$SQL, ela tem colunas aonde se registram consumo de CPU, concorrência, LIOs, linhas processadas, etc) e também revise os planos (planos reais, extraídos da V$SQL_PLAN e similares, não estimadas com EXPLAIN) - uma pessoa experiente, E que conheça o negócio/saiba o que o SQL deveria produzir, só de olhar um plano já pode avaliar algo da eficiência dele : por exemplo, SQL usando nested loops num JOIN aonde se sabe que as tabelas envolvidas são "grandes" provavelmente pode ser substituído com vantagem por um HASH, coisa do tipo... Referência : eu DESCONHEÇO um documento apropriado pra isso, o que vc poderá usar são : - manuais Oracle Concepts e Tuning - livro "Oracle SQL High-Performance Tuning (2nd Edition)", Guy Harrison : fala bastante sobre análise de TKPROF e algoritmos de JOIN - livro "Cost-Based Oracle Fundamentals (Expert's Voice in Oracle)", de Jonathan Lewis : nos releases modernos, já há vários anos o Oracle usa otimização por Custo (baseada em coleta de estatísticas e Histogramas) para otimização de SQLs, este livro é o melhor para referência nesse assunto - livro "Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning", de
Re: [oracle_br] Re: Medir desempenho de banco Oracle
Chiappa, Tenho certeza que os SQL estão bem escritos, mais acredito que então tenha um documento que possa me auxiliar a conferir os meus SQLs novamente. Será que você teria algum documento que poderia me auxiliar nesta questão. Abraços, Vitor Hugo Brito de Oliveira Decimal Tecnologia Em Informatica LTDA. BLOG: http://emdia.wordpress.com/ MSN: hugov1...@hotmail.com De: José Laurindo Para: oracle_br@yahoogrupos.com.br Enviadas: Quinta-feira, 18 de Agosto de 2011 14:07 Assunto: [oracle_br] Re: Medir desempenho de banco Oracle Colega, seguinte : primeiro de tudo, existem sim diversas tools e referências pra vc fazer verificação do cluster (no metalink, o site de Suporte da Oracle, indico as notas "Introducing Cluster Health Monitor (IPD/OS)" (Doc ID 736752.1) , "RAC Assurance Support Team: RAC and Oracle Clusterware Starter Kit and Best Practices (Generic)" (Doc ID 810394.1) e a "RAC: Frequently Asked Questions" (Doc ID 220970.1) , bem como os links citados nelas, mas tenha Claro em mente que NENHUMA dessas tools/técnicas é point-and-click e cabou, vai ser sim TOTALMENTE EXIGIDO um DBA Oracle ** experiente ** para as aplicar, okdoc ?? Quanto à outra pergunta : a adição de um outro nó implica em um pouco mais de poder de CPU e em mais RAM pro cluster (no RAC cada cache de cada nó se junta para formar um só cache, logicamente falando, através do cache fusion ), além de vc poder aliviar um pouco a carga dos outros nós com o load balance tendo mais um destino a balancear - então é claro que só vai ser benéfica a adição de um novo nó SE, e APENAS SE, o problema com os teus relatórios é consumo de CPU ou máquina muito acessada ou coisa do tipo : SE o problema nos seus relatórios for SQL malfeito/porcamente escrito, fazendo I/Os em excesso ou coisa do tipo, não vai ajudar EM NADA um nó a mais, muito provavelmente ==> Então a minha Recomendação é lapidar : faça o healthcheck do seu cluster, ok, e do banco também (não é de forma alguma tempo perdido), MAS NECESSARIAMENTE um DBA experiente vai ter que além disso analisar os SQLs / sessões dos tais relatórios e ver qual é o gargalo, qual é o problema, blz ?? []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Vitor Hugo escreveu > > Bom dia a todos, > > Estou tendo alguns problemas de performance no meu banco de dados produtivo. > > O meu banco de dados tem 2 nós , eu gostaria de saber como descobrir seu meu > Oracle RAC está configurado corretamente, e quais seriam os processos ou > documento > disponiveis na Oracle que poderiam me ajudar, com o diagnostico de problemas. > > Se eu acrescentar mais um nó ao meu Oracle RAC, quais seriam os beneficios > que eu > poderia obter no tempo de resposta dos meus relatórios. > > Abraços, > > Vitor Hugo Brito de Oliveira > Decimal Tecnologia Em Informatica LTDA. > BLOG: http://emdia.wordpress.com/ > MSN: hugov1983@... > > [As partes desta mensagem que não continham texto foram removidas] > [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Re: [Oracle Tools] Procedure em Thread
Chiappa, Obrigado pela resposta ficou bem claro. Estou analisando qual a melhor forma de implementar a procedure, e chamar via JOB, mais este controle paralelo talvez, use o hint ?*+ PARALLEL (tabela, 2) */ , qualquer novidade. E progresso , posto para compartilhar a solução. Abraços, Vitor Hugo Brito de Oliveira Decimal Tecnologia Em Informatica LTDA. BLOG: http://emdia.wordpress.com/ MSN: hugov1...@hotmail.com De: José Laurindo Para: oracle_br@yahoogrupos.com.br Enviadas: Terça-feira, 16 de Agosto de 2011 8:50 Assunto: [oracle_br] Re: [Oracle Tools] Procedure em Thread Vitor Hugo, deixe-me fazer umas colocações aí, vamos ver se esclareço uns pontos : Primeiro de tudo, uma procedure PL/SQL necessariamente roda numa sessão conectada ao banco, e uma sessão só pode executar um comando por vez (rigorosamente não há o conceito de thread no PL/SQL) então a sua resposta é, Não há como vc executar na mesma sessão vários comandos/funcções/procedures/blocos PL/SQLs simultaneamente, ok ? O que vc PODE fazer é abrir novas sessões a partir do seu programa PL/SQL, aí cada uma dessas sessões executa uma procedure , certo ? O ponto principal a se preocupar, CLARO, é que é um conceito Básico de rdbms Oracle, CADA sessão é absolutamente Independente da outra, uma NÃO ENXERGA as atualizações feitas pela outra até que sejam efetivadas via COMMIT - sendo assim, se o alvo (ie, as tabelas a se processar) são as mesmas, Evidentemente vc terá que programar no seu código pra que uma não interfira na outra, provavelmente lockando os registros que cada uma está processando E tendo uma flag indicando que o registro foi processado, info que vc comita no fim, evitando reprocessamento Antes de falar sobre como se faz isso, um aviso : SE o teu objetivo é ter múltiplas executando o mesmo e único SQL gigante (seja query, seja DML) , Please considere com carinho a hipótese de Parallel SQL - isso é uma built-in do RDBMS Oracle, aonde ele mesmo cria as múltiplas sessões, ele mesmo já divide o acesso e controla quais sessões vão ler/processar cada pedaço das tabelas, ele mesmo já coordena o envio de informações a processar e já processadas entre as sessões slave e a sessão principal. Caso não caiba Parallel SQL no seu problema, aí, para começo, vc tem que abrir as múltiplas sessões manualmente : há várias maneiras de se fazer isso (pode ser com SQL dinâmico, pode ser com autonomous transaction) , E NADA impede de vc fazer isso até FORA DO DATABASE (por exemplo, mandando vários nohup sqlplus @scriptquerodaaprocedure & , por exemplo, OU escrevendo uma rotina numa linguagem que aceite abrir múltiplas conexões com o banco, como java ou pro*c, talvez), MAS imho o mais correto/fácil/Recomendado meio é vc chamar a proc via DBMS_JOB, seria + ou - tipo : declare vJob number; begin dbms_job.submit(job => vJob, what => 'PROCEDURE1'); -- dbms_job.submit(job => vJob, what => 'PROCEDURE2'); -- dbms_job.submit(job => vJob, what => 'PROCEDURE3'); -- COMMIT; -- Ativa a Execução dos JOBs acima ... .. neste ponto em diante as 3 procedures estão sendo executadas, é só fazer um LOOP pesquisando a DBA_JOBS_RUNNING e a DBA_JOBS .. pra monitorar a execução end; ===> O que eu disse antes, E vou repetir de novo, é mesmo Crítico quando vc faz paralelismo faça-você-mesmo : fica POR SUA CONTA o controle de acesso e registros processados/em processamento, E também a divisão dos registros, ie, quais registros vão ser processados por cada proc Supondo que haja um atributo fácil pra indicar cada procedure faz quais registros (digamos, o código de cliente), aí Provavelmente as suas procedures seriam algo do tipo : CREATE OR REPLACE PROCEDURE procedure1 IS row_locked EXCEPTION; PRAGMA EXCEPTION_INIT(row_locked, -54); cursor C is SELECT colunas FROM tabelas WHERE codigodocliente=1 FOR UPDATE NOWAIT; r C%rowtype; BEGIN OPEN C; loop Begin fetch C into R; exit when C%NOTFOUND; ... -- SE chegou aqui, o registro é a processar, processo ele ... -- aí após o processamento atualizo a FLAG pra mostrar esse registro como processado UPDATE tabela SET flagprocessado='S' where current of; ... e não faço mais nada, o end loop vai voltar ao loop e o FETCH busca o próximo -- Exception when row_locked then null; -- Não faz nada, ignora as linhas já lockadas End; end loop; close C; COMMIT; END; > PLEASE não use esse código como exemplo, ele NÂO FOI TESTADO, é praticamente pseudocódigo, mas a idéia geral é essa, blz ? []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Vitor Hugo escreveu > > Marcio Castro, > > Estas procedures estão sendo chamadas por 1 uma procedure que tem o objetivo > de apurar os dados das outras, e ela está agendada e um Job. > > Mais a única, coisa que este processamento de rodando em 16 horas. > > Vitor Hugo Brito de Oliveira
Re: [oracle_br] Re: [Oracle Tools] Procedure em Thread
Marcio Castro, Estas procedures estão sendo chamadas por 1 uma procedure que tem o objetivo de apurar os dados das outras, e ela está agendada e um Job. Mais a única, coisa que este processamento de rodando em 16 horas. Vitor Hugo Brito de Oliveira Decimal Tecnologia Em Informatica LTDA. BLOG: http://emdia.wordpress.com/ MSN: hugov1...@hotmail.com De: MARCIO CASTRO Para: "oracle_br@yahoogrupos.com.br" Enviadas: Segunda-feira, 15 de Agosto de 2011 18:00 Assunto: Re: [oracle_br] Re: [Oracle Tools] Procedure em Thread Vitor: Jah pensou em utilizar um job para isto? Atenciosamente, Márcio de Figueiredo Moura e Castro Oracle 10g DBA OCA Oracle PL/SQL Developer OCA ____ De: Vitor Hugo Para: "oracle_to...@yahoogrupos.com.br" Cc: "oracle_br@yahoogrupos.com.br" ; Oracle Group ; Oracle Group Enviadas: Segunda-feira, 15 de Agosto de 2011 14:16 Assunto: [oracle_br] Re: [Oracle Tools] Procedure em Thread Edson, Obrigado, pelo retorno. Vou explicar qual é o problema , que estou tentando resolver. Tenho 4 procedures, idependentes que devem processar uma determinada quantidade de informação e "jogar" em uma tabela que farei a consulta. Hoje a minha rotina está desta forma. PRC_1 PRC_2 PRC_3 PRC_4 SELECT * FROM tabela_resultado; Desta forma as operações são sequências , tenho que esperar a PRC_1 terminar, para começar a PRC_2 e assim por diante. Gostaria de startar todas as procedures ao mesmo tempo , sendo que assim , o tempo de retorno "pode" ser mais rápido. Será que consegui passar o meu problema. Abraços, Vitor Hugo Brito de Oliveira Decimal TI BLOG: http://emdia.wordpress.com/ MSN: hugov1...@hotmail.com Cel: (11) 8938-9473 De: Edson Almeida Junior (Consulting) Para: oracle_to...@yahoogrupos.com.br Cc: "oracle_br@yahoogrupos.com.br" ; Oracle Group ; Oracle Group Enviadas: Segunda-feira, 15 de Agosto de 2011 12:38 Assunto: Re: [Oracle Tools] Procedure em Thread Vitor, Existe o autonomous transactions Veja os links abaixo http://psoug.org/reference/autonomous_tx.html http://www.oradev.com/autonomous_transaction.jsp http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:2212445691154 Edson Almeida Jr Em 15 de agosto de 2011 11:58, Vitor Hugo escreveu: > >Gostaria de saber se é possível executar duas procedures simultaneamente. > >Vitor Hugo Brito de Oliveira >Decimal TI >BLOG: http://hugov-manjava.blogspot.com/ >MSN: hugov1...@hotmail.com >Cel: (11) 8938-9473 -- Edson Almeida Junior Consulting Tecnologia & Sistemas Ltda Telefones..: (021) 8600-8439 Nextel..: (021) 7803-3448 - ID: 120*61725 MSN: e...@hotmail.com SKYPE: edsonalmeidajr Visite www.consulting.com.br [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Re: [Oracle Tools] Procedure em Thread
Edson, Obrigado, pelo retorno. Vou explicar qual é o problema , que estou tentando resolver. Tenho 4 procedures, idependentes que devem processar uma determinada quantidade de informação e "jogar" em uma tabela que farei a consulta. Hoje a minha rotina está desta forma. PRC_1 PRC_2 PRC_3 PRC_4 SELECT * FROM tabela_resultado; Desta forma as operações são sequências , tenho que esperar a PRC_1 terminar, para começar a PRC_2 e assim por diante. Gostaria de startar todas as procedures ao mesmo tempo , sendo que assim , o tempo de retorno "pode" ser mais rápido. Será que consegui passar o meu problema. Abraços, Vitor Hugo Brito de Oliveira Decimal TI BLOG: http://emdia.wordpress.com/ MSN: hugov1...@hotmail.com Cel: (11) 8938-9473 De: Edson Almeida Junior (Consulting) Para: oracle_to...@yahoogrupos.com.br Cc: "oracle_br@yahoogrupos.com.br" ; Oracle Group ; Oracle Group Enviadas: Segunda-feira, 15 de Agosto de 2011 12:38 Assunto: Re: [Oracle Tools] Procedure em Thread Vitor, Existe o autonomous transactions Veja os links abaixo http://psoug.org/reference/autonomous_tx.html http://www.oradev.com/autonomous_transaction.jsp http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:2212445691154 Edson Almeida Jr Em 15 de agosto de 2011 11:58, Vitor Hugo escreveu: > >Gostaria de saber se é possível executar duas procedures simultaneamente. > >Vitor Hugo Brito de Oliveira >Decimal TI >BLOG: http://hugov-manjava.blogspot.com/ >MSN: hugov1...@hotmail.com >Cel: (11) 8938-9473 -- Edson Almeida Junior Consulting Tecnologia & Sistemas Ltda Telefones..: (021) 8600-8439 Nextel..: (021) 7803-3448 - ID: 120*61725 MSN: e...@hotmail.com SKYPE: edsonalmeidajr Visite www.consulting.com.br [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Database Link
Boa Tarde, Estou com a seguinte dúvida, tenhos dois OWNER's ou seja, duas TABLESPACE no mesmo DATABASE, é necessário um DBLINK para que eu possa acessar um tabela de outro TABLASPACE. Exemplo: T1 > T2.TABELA_1 T2 > T1.TABELA_2 Vitor Hugo Brito de Oliveira Decimal TI BLOG: http://emdia.wordpress.com/ MSN: hugov1...@hotmail.com Cel: (11) 8938-9473 [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Abrir transação explicitame nte
Isso é mania de programador SQL Server (ou de qualquer outro BD cujos comandos são auto-commit por padrão). Em bancos desse tipo, o programador tem que executar um comando do tipo "open transaction" para dizer que os comandos seguintes deverão ser "commitados" explicitamente. O Oracle até tem o comando SET TRANSACTION, mas o melhor é falar para o desenvolvedor ESQUECER que isso existe e entender que todo DML abre uma transação e que ela só será fechada por um COMMIT (ou um ROLLBACK), porque senão fatalmente ele esquecerá do bendito COMMIT e você terá vários problemas de lock por causa de esquecimento de programador. Mais detalhes sobre o SET TRANSACTION: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10005.htm#sthref9947 cido_re escreveu: > > Boa tarde Senhores(as). > > Por favor, alguém pode me dizer se posso abrir uma transação > explicitamente, algo do tipo "open transaction", etc... > > Sei que abro uma transação a cada comando DML, porém fui questionado > quanto a abrir explicitamente e não soube responder. > > Só pra explicar o motivo, o desenvolvedor está querendo aninhar as > transações. > > Obrigado pela atenção. > > Cordialmente. > > Cido > > -- Vitor Hugo Campos Desenvolvedor / DBA Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
Re: [oracle_br] Quando reconstruir indice
Algumas informações interessantes sobre a reconstrução de índices: http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:6601312252730 http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:2913600659112 http://www.actoug.org.au/Downloads/oracle_index_internals.pdf Zumba escreveu: > > Olá pessoal, > > como faço pra descobrir quando deve reconstruir um > indice por ter muitos nós folhas em branco? > > Abraço e otimo findi ano a todos > > Abra sua conta no Yahoo! Mail, o único sem limite de espaço para > armazenamento! > http://br.mail.yahoo.com/ <http://br.mail.yahoo.com/> > > -- Vitor Hugo Campos Desenvolvedor / DBA Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
Re: [oracle_br] Quando reconstruir indice
Algumas informações interessantes sobre a reconstrução de índices: http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:6601312252730 http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:2913600659112 http://www.actoug.org.au/Downloads/oracle_index_internals.pdf Zumba escreveu: > > Olá pessoal, > > como faço pra descobrir quando deve reconstruir um > indice por ter muitos nós folhas em branco? > > Abraço e otimo findi ano a todos > > Abra sua conta no Yahoo! Mail, o único sem limite de espaço para > armazenamento! > http://br.mail.yahoo.com/ <http://br.mail.yahoo.com/> > > -- Vitor Hugo Campos Desenvolvedor / DBA Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
Re: [oracle_br] Acertar horários para Jobs
Baseando no SQL abaixo: SELECT SYSDATE AS AGORA, TRUNC (SYSDATE) + (((17 * 60) + 55) / 1440) AS HOJE, TRUNC (SYSDATE) + (((17 * 60) + 55) / 1440) + 1 AS AMANHA FROM DUAL Então você pode fazer algo como: SYS.DBMS_JOB.SUBMIT (V_JOB, 'PROCEDURE_TAL;', TRUNC (SYSDATE) + (((17 * 60) + 55) / 1440), 'TRUNC (SYSDATE) + (((17 * 60) + 55) / 1440) + 1' ); sidney_dias2000 escreveu: > > Preciso rodar um job todos os dias exatamente as 17:55. > Criei da seguinte forma : > > sys.dbms_job.submit(v_job, 'PROCEDURE_TAL;', to_date('08/11/2007 > 17:55:00','dd/mm/ hh24:mi:ss'), 'SYSDATE+1'); > > Mas o infeliz executou nos seguintes horarios : > > 2007-11-08 17:55:05 > 2007-11-09 17:55:10 > 2007-11-12 07:52:25 > 2007-11-13 07:52:29 > > Alguem tem uma dica de como rodar o job num horario especifico ? > > -- Vitor Hugo Campos Desenvolvedor / DBA Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
Re: [oracle_br] Sequencia no select
Em 25/09/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> escreveu: > Tem como fazer um select da seguinte forma? > codigo descricao linha > 125 > tenis 1 > 125 > tenis 2 > 894 chinelo1 > 126 sapato 1 > 126 sapato 2 > > o campo linha (vai ser tipo uma função) seria uma > sequencia do codigo, quando o codigo do produto for diferente do anterior > ele volta para 1, se for igual ele soma mais 1. Bom, você pode usar uma query analítica para isso, mais ou menos assim: select codigo, descricao, row_number() over (partition by codigo order by algumcampo) as linha from tabela A função row_number() retorna o número da linha (mais ou menos como o ROWNUM), só que pode ser particionado por um ou mais campos - no caso, o campo codigo - e ordenado pelos campos que você desejar). Espero que ajude. -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] Imagens Armazenadas no banco
Em 19/09/07, am_balielo <[EMAIL PROTECTED]> escreveu: > Boa Tarde > > Tenho um banco de dados Oracle 10g R2 instalado em servidor Windows > 2003. > Estou gravando fotos no banco utilizando um campo Blob. O Problema > que gravo, +/- 300 fotos por dia e o espaço ocupados por estas fotos > está ficando grande. Em aproximadamente em 35 dias estou registrando > 450 MB, só de fotos. > Gostaria de saber se eu consigo compactar estas fotos. > > Alguém tem alguma sugestão p/ o meu problema. > > Desde já muito obrigado. > Alessandro Bom, tentar compactar as fotos não vai ajudar muito, principalmente se for um formato de foto já compactada (ex: JPG), já que a compactação resultante não reduziria quase nada (experimenta zipar um arquivo JPG, a diferença de tamanho é mínima). Além disso, 450MB para 10.500 fotos (=35 * 300) não é muita coisa, cada foto tem em média menos de 45KB (uma foto 1600x1200 com qualidade boa tem entre 500KB e 1MB). Então, você só tem 2 opções, ou apaga as fotos que não precisa ou compra mais HD. -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] Query rownum sem FTS
Em 04/09/07, Marco <[EMAIL PROTECTED]> escreveu: > Boa tarde pessoal, > > Gostaria de saber se existe alguma maneira de reescrever a query abaixo para > executar a mesma consulta sem fazer full table scan. > > SELECT /*+ FIRST_ROWS(10)*/ * > FROM > ( > SELECT ROWNUM AS ROW_NUM, T.* > FROM TESTE T > ) > WHERE ROW_NUM <= 10 Em primeiro lugar, jogue no lixo essa idéia de que FTS = lento e ÍNDICE = rápido: há várias situações em que usar índices é MAIS LENTO do que acessar a tabela inteira. Mais detalhes em: http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:9422487749968 Voltando ao SQL, você não evitará o full table scan, mas pode agilizar muito o tempo de resposta, usando simplesmente: SELECT ROWNUM AS ROW_NUM, T.* FROM TESTE T WHERE ROWNUM <= 10 Mas, se precisar fazer alguma ordenação, você pode usar o seguinte: SELECT * FROM (SELECT T.* FROM TESTE T ORDER BY ALGUMCAMPO) WHERE ROWNUM <= 10 A idéia é usar o ROWNUM do lado de FORA do sub-select, e não do lado de dentro, como você tinha feito. Os tempos de resposta são totalmente diferentes: do lado de dentro, todas as linhas são processadas e só depois filtra; do lado de fora, o filtro é feito ENQUANTO o resultado está sendo gerado, ou seja, quando chegar no 10o. registro, a operação termina. -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] Tuning SQL
Em 30/08/07, fabiopdb <[EMAIL PROTECTED]> escreveu: > Amigos estou com um problema nessa consulta será alguem (iluminado) > pode me ajudar pois esta consulta esta demorando 7hs > Se alguem tiver alguma ideia eu agradeço muito. > > CREATE OR REPLACE VIEW VENDAS_INDIRETAS AS (...) Bom, você pode começar a resolver tirando esses /*+RULE*/ da sua query, e de preferência esqueça que esse hint existe. Só de fazer isso já pode fazer uma diferença razoável no tempo de execução (desde, é claro, que suas tabelas sejam analisadas de tempos em tempos). Além disso, se você já souber de antemão que os registros de cada uma das subconsultas não repitam registros entre cada uma das partes, você pode trocar o UNION por UNION ALL, que é muito mais rápido mas não verifica se já existe um registro igual no conjunto resultante. Colocar também a condição: WHERE cod_classe_extra not in (6, 7, 11, 12, 13, 15, 16, 17, 19, 20) dentro de cada subquery dos UNION's também vai te ajudar. Uma última coisa, mas isso não faz tanta diferença de performance: você pode trocar o seu: to_date('01' || '/' || TO_CHAR(vpc.dt_parcelamento, 'mm/'), 'dd/mm/') REFERENCIA, por: TRUNC(vpc.dt_parcelamento, 'mm') REFERENCIA, já que assim ele não precisa converter de date para varchar e vice-versa. -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] array de bytes
Em 14/08/07, Andre Santos <[EMAIL PROTECTED]> escreveu: > Vitor > > Mas, independente do conjunto de caracteres configurado, o código numérico > armazenado sempre é o mesmo, não? > Por exemplo, um CHR(200) pode representar caracteres diferentes (dependendo > da configuração), mas o código numérico (binário) armazenado sempre será o > 200. Não é isso? > Imagino que o Eric precise apenas do código numérico (não da representação > do caractere)... Nem sempre. Suponha que no characterset WE8MSWIN1252 o caracter CHR(200) seja "£", e no WE8ISO8859P1 o mesmo caracter seja o CHR(210). Se a função do Eric tiver um byte que seja 200, for gravado em um cliente WE8MSWIN1252 e for lido em um cliente WE8ISO8859P1, o retorno do outro cliente vai ser 210, já que o banco vai converter automaticamente. Para o tipo VARCHAR2, o que importa é a representação do caracter, e não o seu valor binário, já que a idéia é seu conteúdo ser lido pelo usuário. Como a grande maioria das tabelas de caracteres define o conjunto de caracteres "genéricos" da tabela ASCII da mesma forma, então usar hexadecimal ou Base64 não vão te dar problema, já que não terão problema de conversão. -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] EXPORT Lento
Em 03/08/07, cegoncalvesvr <[EMAIL PROTECTED]> escreveu: > Amigos, > > O meu servidor é um Pentium IV 2.4 Ghz >1,5 Gb de RAM >Oracle 9.2.0.7 >Disco de 100 Gb >C: com o SO = 10 GB >D: (oracle e datafiles)= 30 GB (Livre: 26 MB) >E: Datafiles = 35 GB (Livre: 9,77 GB) > > O meu export esta muito lento. > Detalhe: o banco esta parado, ninguem esta acessando-o > Restringi o acesso. > > O exp gerado é um arquivo de aproximadamente 06 a 07 GB > Comando executado: > Exp userid=dbamv/[EMAIL PROTECTED] file=arquivo_de_saida > owner=dbamv,dbasgu consistent=y statistics=none log=mv2000_exp.log > > Podemos melhorar a velocidade ou não. > O servidor esta fraco nos discos? > O disco é 5.200 rpm e SATA > Abs. Bom, colocar o banco e o sistema operacional no mesmo HD não é uma idéia das melhores se o objetivo é performance, já que a leitura/gravação de dados do BD concorre, por exemplo, com a geração de swap do SO (principalmente no Windows, que não me parece ser o melhor gerenciador de swap do mundo). O ideal seria você colocar um disco separado para seus datafiles, de preferência o HD mais rápido que você conseguir encontrar. Quanto ao comando que você está usando, tem algumas coisas que você pode fazer: 1) Se você está exportando os dados no próprio servidor, então você pode tirar o "@servidordeproducao" para tirar o overhead de acesso à rede; 2) Já que o banco de dados está parado e os dados não vão mudar, então não há necessidade de usar a opção "consistent=y"; 3) Se a sua idéia é exportar os dados para serem usados em outro servidor com o mesmo character set, então você pode usar a opção "direct=y" para aumentar a performance. Espero que ajude. -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] Validação de master/detail pelo Oracle
Em 25/07/07, Vitor Hugo Campos<[EMAIL PROTECTED]> escreveu: > Em 25/07/07, Josinei Barbosa da Silva <[EMAIL PROTECTED]> escreveu: > > Boa tarde a todos? > > > > Tenho uma tabela de nota fiscal e outra de itens da nota. Como manda > > os bons costumes de modelagem, a minha tabela de itens tem um foreign > > key para a tabela de nota fiscal. Eu não posso permitir que uma nota > > fiscal exista sem itens. Como faço isso? > > Meu primeiro impulso foi pensar em uma trigger, mas os itens são > > incluídos depois da nota, logo não consigo executar um SELECT na > > tabela de itens durante a inclusão de uma nota. > > > > Como eu poderia resolver isso pelo banco de dados? > > > > Desde já, obrigado. > > Há um link explicando isso no site do AskTom: > http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:42170695313022 > > No seu caso, você poderia criar um campo VALTOTALITENS para isso... > além de resolver seu problema, você não precisa fazer um join para > fazer consultas relativas ao total dos itens das notas!! :D Só explicando melhor o que o artigo sugere: em vez de você fazer uma constraint "normal" (já que ao inserir a constraint já seria violada porque seu valor é zero), colocando a constraint como DEFERRED, a constraint só é verificada na hora do COMMIT, e como a gravação da nota é atômica (espero eu... :P), na hora em que a constraint for verificada (ou seja, no COMMIT), o valor já vai ter sido incrementado pela trigger dos itens. Essa técnica também é útil para o caso de, por algum motivo, você precisar mudar o valor de um campo chave de uma tabela que tenha uma FK relacionada, mas isso também permite algumas bizarrices do tipo "poder inserir em uma tabela filha antes de inserir na tabela mãe", enlouquecendo qualquer trigger que dependa que a filha exista antes da mãe... -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] Validação de master/detail pelo Oracle
Em 25/07/07, Josinei Barbosa da Silva <[EMAIL PROTECTED]> escreveu: > Boa tarde a todos? > > Tenho uma tabela de nota fiscal e outra de itens da nota. Como manda > os bons costumes de modelagem, a minha tabela de itens tem um foreign > key para a tabela de nota fiscal. Eu não posso permitir que uma nota > fiscal exista sem itens. Como faço isso? > Meu primeiro impulso foi pensar em uma trigger, mas os itens são > incluídos depois da nota, logo não consigo executar um SELECT na > tabela de itens durante a inclusão de uma nota. > > Como eu poderia resolver isso pelo banco de dados? > > Desde já, obrigado. Há um link explicando isso no site do AskTom: http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:42170695313022 No seu caso, você poderia criar um campo VALTOTALITENS para isso... além de resolver seu problema, você não precisa fazer um join para fazer consultas relativas ao total dos itens das notas!! :D -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: Re: [oracle_br] Ferramenta de Adminsitração ORACLE 10G
Há também uma outra ferramenta, da própria Oracle, que é um pouco mais barata (R$ 0,00!!)... :D Oracle SQL Developer: http://www.oracle.com/technology/software/products/sql/index.html Em 17/07/07, Luiz Fernando G. Verona <[EMAIL PROTECTED]> escreveu: > Tem uma ferramenta, TOAD da quest... > > Só não sei o valor da licença. > > http://www.quest.com/ > > Abraços -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] Re: Oracle ou DB2 ?
Em 14/07/07, rei_do_delphi <[EMAIL PROTECTED]> escreveu: > boa tarde a todos. > Bom, gostaria de dar minha contribuição a vocês sobre o que eu "ACHO". > > tanto Oracle quanto o Db2 da Big Blue são excelentes produtos, isso é > indiscutível. Quanto a qual é o melhor, depende. Comparando-se > plataformas idênticas, mesmo hardware, mesmo SO etc, ambos tem > performance quase que idênticas, porém, DB2 pode-se rodar em > Mainframe, onde acredito que Oracle não possa, pelo menos nunca ouvi > falar de oracle em Z/Os. As pessoas pensam que Mainframe é plataforma > ultrapassada, com certeza afirmo a todos vocês que não. Se vocês > pegarem 10 dos maiores bancos do mundo, 7 deles no mínimo utiliza > mainframe, pois o poder de processamento dessas maquinas é algo > incrível. Voltando a comparação, eu sinceramente acho o DB2 mais > performatico, embora esteja estudando ainda o Oracle. O problema é o > seguinte: Existem vagas para DBA Db2? Sim, existem, mas infelizmente, > essas só estão reservadas aos DBA´s SENIOR, sendo você que acabou de > estudar e passar nas provas de certificação 700 e 701(para 8.1) ou > 730 e 731( para 9.1) ,assim como eu passei na versão 8.1, > impossibilitado de encontrar vagas em seu perfil para treinar seu > skill e trabalhar no que gosta. Portanto, se você pretende estudar > algum banco de dados hoje em dia, faça a escolha para o Oracle, pois > mesmo sendo menos performatico que o DB2( minha mera opinião), há > muito mais vagas disponíveis no mercado, em minha consultoria mesmo, > tem umas 4 ou 5 vagas de oracle para Junior e 2 ou 3 para Senior e > Pleno. Espero ter contruibuido para todos, expressando minha opinião. > Obrigado. Só para informação: o Oracle tem versões para uma variedade bem grande de sistemas operacionais/plataformas, incluindo o z/OS. Só não posso falar da performance dele porque nunca vi um pessoalmente. A lista das versões disponíveis do Oracle 10g está no link abaixo: http://www.oracle.com/technology/software/products/database/oracle10g/index.html Para facilitar, segue a lista, abaixo: * Oracle Database 10g Release 2 (10.2.0.3) for Microsoft Windows Vista * Oracle Database 10g Release 2 (10.2.0.2) for HP OpenVMS Alpha * Oracle Database 10g Release 2 (10.2.0.2) for OpenVMS Itanium * Oracle Database 10g Release 2 (10.2.0.2) for Solaris Operating System (x86) * Oracle Database 10g Release 2 (10.2.0.2) for HP Tru64 UNIX * Oracle Database 10g Release 2 (10.2.0.2) for z/Linux * Oracle Database 10g Release 2 (10.2.0.2) for z/OS (OS/390) * Oracle Database 10g Release 2 (10.2.0.1.0) for Solaris Operating System (x86-64) * Oracle Database 10g Release 2 (10.2.0.1.0) for HP-UX Itanium * Oracle Database 10g Release 2 (10.2.0.1.0) for Linux Itanium * Oracle Database 10g Release 2 (10.2.0.1.0) for Linux on Power * Oracle Database 10g Release 2 (10.2.0.1.0) for Microsoft Windows (x64) * Oracle Database 10g Release 2 (10.2.0.1.0) for Microsoft Windows (64-bit Itanium) * Oracle Database 10g Release 2 (10.2.0.1.0) for Linux x86-64 * Oracle Database 10g Release 2 (10.2.0.1.0) for Microsoft Windows * Oracle Database 10g Release 2 (10.2.0.1.0) for Linux x86 * Oracle Database 10g Release 2 (10.2.0.1.0) for Solaris Operating System (SPARC) (64-bit) * Oracle Database 10g Release 2 (10.2.0.1.0) for AIX5L * Oracle Database 10g Release 2 (10.2.0.1.0) for HP-UX PA-RISC -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] Informações Técnicas - Oracle 10g Enterprise Edition (EE)
Em 13/07/07, junior.alexandre <[EMAIL PROTECTED]> escreveu: > Salve galera, > > Alguém saberia me informar onde conseguir, ou então me passar algumas > caracteristicas técnicas do Oracle Enterprise Edition 10g tipo: > > - Tamanho Máximo de um Database: > - Tamanho Máximo de uma tabela: > - Quantidade Máxima de linhas em uma tabela: > - Quantidade Máxima de colunas em uma tabela: > - Quantidade Máxima de Index por tabela: > - Quantidade Máxima de Processador: > > Para a edição Express Edition (XE) achei facilmente a informação, > porem, para a EE está meio complicado. Quem puder me ajudar agradeço! > > Valeu, fico no aguardo. > > Alê Junior. A lista de limites do banco de dados está disponível no link abaixo: http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/limits.htm -- Vitor Hugo Campos Desenvolvedor/DBA Oracle 10g E-mail/MSN: [EMAIL PROTECTED] Telefones: (27) 2121-5531 / 8819-2643 skype:vitorh.campos
Re: [oracle_br] Select não retorna DATA
Use a função TO_DATE para formatar uma string para o formato de data. Seu SQL ficaria mais ou menos assim: SELECT count(*) FROM interface.fol_cubo_inadimplencia WHERE ind_processado IS NULL AND to_char(dat_processamento) = TO_DATE('30/5/2007 15:52:22', 'DD/MM/ HH24:MM:SS') Mais detalhes sobre o TO_DATE podem ser vistos em http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions183.htm#SQLRF06132 . OBS: a formatação dos minutos está incorreta. Você pode dar uma olhada no link acima para poder ver a formatação correta. Alex Ferreira escreveu: > > Bom dia Pessoal, > Estou tentando fazer um select para me trazer detalhe da tabela onde > as informações são Datas, ex: > 30/5/2007 15:52:22 > 30/5/2007 15:52:33 > 30/5/2007 15:52:45 > 30/5/2007 15:52:54 > 28/6/2007 12:20:06 > 28/6/2007 12:20:14 > 28/6/2007 12:20:22 > 28/6/2007 12:20:30 > Qdo dou um select, ele não me retorna nada: > SELECT count(*) > FROM interface.fol_cubo_inadimplencia > WHERE ind_processado IS NULL > AND dat_processamento = '28/6/2007 12:20:30' > Já tentei: > SELECT count(*) > FROM interface.fol_cubo_inadimplencia > WHERE ind_processado IS NULL > AND to_char(dat_processamento) = '30/5/2007 15:52:22, DD/MM/ > HH24:MM:SS' > E continua me retorando nada... > Alguém pode me dar um Help > Obrigado! > > -- > "O Rio atinge seus objetivos porque aprendeu a contornar seus obstáculos" > Lao Tsé > > Atividade nos últimos dias > >* >12 > Novos usuários > > <http://br.groups.yahoo.com/group/oracle_br/members;_ylc=X3oDMTJmMHJpMDc5BF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzExODM3MTk3NzI-> > > Visite seu Grupo > <http://br.groups.yahoo.com/group/oracle_br;_ylc=X3oDMTJlYWkzaXNpBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTE4MzcxOTc3Mg--> > > Yahoo! Mail > > Conecte-se ao mundo > <http://us.lrd.yahoo.com/_ylc=X3oDMTJscG4wZWdmBF9TAzk3NDkwNDM3BF9wAzEEZ3JwSWQDMTY4Mjg5NgRncnBzcElkAzIxMzcxMTQ2ODkEc2VjA25jbW9kBHNsawNtYWlsBHN0aW1lAzExODM3MTk3NzI-;_ylg=1/SIG=10ujd6ds6/**http%3A//mail.yahoo.com.br/> > > Proteção anti-spam > > Muito mais espaço > > Yahoo! Barra > > Instale grátis > <http://us.lrd.yahoo.com/_ylc=X3oDMTJvc29lNHJhBF9TAzk3NDkwNDM3BF9wAzIEZ3JwSWQDMTY4Mjg5NgRncnBzcElkAzIxMzcxMTQ2ODkEc2VjA25jbW9kBHNsawN0b29sYmFyBHN0aW1lAzExODM3MTk3NzI-;_ylg=1/SIG=111ngvtas/**http%3A//br.toolbar.yahoo.com/> > > Buscar sites na web > > Checar seus e-mails . > > Yahoo! Grupos > > Crie seu próprio grupo > <http://br.groups.yahoo.com/;_ylc=X3oDMTJvdHU4dnI1BF9TAzk3NDkwNDM3BF9wAzMEZ3JwSWQDMTY4Mjg5NgRncnBzcElkAzIxMzcxMTQ2ODkEc2VjA25jbW9kBHNsawNncm91cHMyBHN0aW1lAzExODM3MTk3NzI-> > > A melhor forma de comunicação > > . > > -- Vitor Hugo Campos Desenvolvimento - Informática Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
Re: [oracle_br] Segurança
Bia, impedir que o usuário acesse o banco através do seu executável não adianta de nada porque o usuário pode simplesmente renomear o sqlplus para seuprograma.exe e rodar normalmente. Uma idéia do que você pode fazer para atrapalhar a vida de algum engraçadinho que tente entrar via SQLPlus seria você deixar o usuário só com acesso de CONNECT e criar uma ROLE identificada por senha que conteria os acessos às tabelas dos seus sistemas. Então, logo depois de entrar no sistema, a aplicação deve executar o comando: SET ROLE IDENTIFIED BY ; Para poder ter acesso ao resto dos dados. A parte chata é definir onde vai ficar essa senha: ou você deixa no próprio executável (daí a pessoa teria que usar um disassembler para poder descobrir) ou você coloca em uma tabela em que os usuários "normais" teriam acesso (mas qualquer curioso que fosse olhar as tabelas que ele tem direito em ALL_TABLES poderia descobrir essa tabela e identificar a senha). A partir dessas opções você pode escolher como impedir que o usuário descubra essa senha (normalmente usando criptografia, mas isso não tornaria impossível que a pessoa descubra, só tornaria bem mais complicado, mas para a maioria dos casos já seria suficiente). O correto mesmo é não dar ao usuário mais acesso do que deveria ter (ex: não dar qualquer grant do tipo ANY, como SELECT ANY TABLE, para os usuários), e colocar auditoria nas tabelas importantes para descobrir quem fez o que com seus dados. Daí, mesmo se alguém entrar com o sqlplus, não conseguirá fazer muita coisa a mais do que faria através do sistema. Bia Fitzgerald escreveu: > > Olá pessoal... > > Alguém sabe como impedir que um determinado usuário acesse o BD via > aplicativos como sqlplus e TOAD e somente acesse via sistema? > Obrigada, > Bia. > > __ > Fale com seus amigos de graça com o novo Yahoo! Messenger > http://br.messenger.yahoo.com/ <http://br.messenger.yahoo.com/> > > [As partes desta mensagem que não continham texto foram removidas] > > -- Vitor Hugo Campos Desenvolvimento - Informática Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
Re: Res: [oracle_br] ORA-00604: error occurred at recursive SQL level 2
Pois é, por isso que falei que essa solução deve ser temporária. Essa opção nem deve existir em desenvolvimento, já que o correto é desenvolver SEMPRE usando variáveis de bind. Além desse seu problema com locks, eu já vi problemas na execução de algumas queries paralelas (nem sei se foi antes ou depois do último patchset da Oracle, mas já vi). Portanto, o quanto mais rápido o desenvolvimento lançar uma versão com BIND para voltar ao CURSOR_SHARING=EXACT, melhor. Nelson Cartaxo escreveu: > > Me intrometendo um pouco ai, muito cuidado com o cursor_sharing=force. > Já parei um banco de produção por causa desse parametro. Ele começou a > fazer blocking locks e no final tinha mais de 1000 sessões presas. > Portanto aconselho a fazer primeiro em desenvolvimento e testar. > > Att, > > Nelson Cartaxo > > Atividade nos últimos dias > >* >31 > Novos usuários > > <http://br.groups.yahoo.com/group/oracle_br/members;_ylc=X3oDMTJmaWo2cDNnBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzExNzk3NjAxMTk-> > > Visite seu Grupo > <http://br.groups.yahoo.com/group/oracle_br;_ylc=X3oDMTJldnV0cmlyBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTE3OTc2MDExOQ--> > > Yahoo! Mail > > Conecte-se ao mundo > <http://us.lrd.yahoo.com/_ylc=X3oDMTJsdWZkYm52BF9TAzk3NDkwNDM3BF9wAzEEZ3JwSWQDMTY4Mjg5NgRncnBzcElkAzIxMzcxMTQ2ODkEc2VjA25jbW9kBHNsawNtYWlsBHN0aW1lAzExNzk3NjAxMTg-;_ylg=1/SIG=10ujd6ds6/**http%3A//mail.yahoo.com.br/> > > Proteção anti-spam > > Muito mais espaço > > Yahoo! Barra > > Instale grátis > <http://us.lrd.yahoo.com/_ylc=X3oDMTJvbjJ2a3YyBF9TAzk3NDkwNDM3BF9wAzIEZ3JwSWQDMTY4Mjg5NgRncnBzcElkAzIxMzcxMTQ2ODkEc2VjA25jbW9kBHNsawN0b29sYmFyBHN0aW1lAzExNzk3NjAxMTg-;_ylg=1/SIG=111ngvtas/**http%3A//br.toolbar.yahoo.com/> > > Buscar sites na web > > Checar seus e-mails . > > Yahoo! Grupos > > Crie seu próprio grupo > <http://br.groups.yahoo.com/;_ylc=X3oDMTJvdWxtMmJnBF9TAzk3NDkwNDM3BF9wAzMEZ3JwSWQDMTY4Mjg5NgRncnBzcElkAzIxMzcxMTQ2ODkEc2VjA25jbW9kBHNsawNncm91cHMyBHN0aW1lAzExNzk3NjAxMTg-> > > A melhor forma de comunicação > > . > > -- Vitor Hugo Campos Desenvolvimento - Informática Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
Re: [oracle_br] Opinião para melhorar des empenho
Olá, Já vi gente pela internet reclamando da performance do RAID5, principalmente em servidores com muitas inserções/atualizações. Acho melhor você usar RAID 1+0 (ou RAID 1 usando o ASM do Oracle 10g). Se puder, arranje mais uns 2 discos menores (não precisa ser SCSI, pode ser SATA mesmo), faça RAID1 com eles e coloque o sistema operacional e a instalação do banco lá, deixando os outros 4 discos só para os dados. Heber Blain Gonçalves escreveu: > > Olá, pesesoal, > > Tenho nível de conhecimento apenas operacional (instalação, > configuração básica, ...) de Oracle, mas agora estou participando de > um projeto em que não existe um DBA e precisamos resolver um problema > de performance de uma aplicação, a qual está sendo migrada para um > novo servidor. Estou sendo responsável por montar a arquitetura da > solução, mas estou bastante inseguro se o que estou propondo pode ou > não ajudar a melhorar a performance do lado da Infra-estrutura. (o > pessoal de desenvolvimento já fez todo o tuning sql possível, o > problema tem sido realmente IO em excesso para a máquina que não > suportava). > > A nova solução compreende um hw comprado pelo cliente, um Servidor > Dell com 4 HDs de 165 Gb e provavelmente uma controladora RAID, não > tenho acesso de que máquina específica estamos tratando, então > trabalho com essa suposição. > > Abaixo descrevo como pretendo montar a arquitetura desse servidor, por > favor, gostaria que comentassem se a idéia que tenho está correta e se > algo mais pode ajudar. > > - RAID 5 > > Estou pensando em dispor os 4 HDs no esquema de RAID 5, pois acredito > que esse tem um ótimo custo benefício, tendo redundância (segurança > também é um requisito), e aumentando as taxas de leitura pelo > paralelismo, já que os dados estarão distribuídos nos 4 discos. Mas e > quanto as operações de escrita? Existe um overhead por causa da > paridade ou isso tem pouco impacto? > > - LVM > > Já considerando que tenho um RAID 5, existe alguma vantagem em > distribuir os datafiles em diferentes volumes lógicos num VG? Por > exemplo: além das partições do SO, poderia ter particionado /LVdata1 > /LVdata2 e /LVdata3, cada um tendo uma parcela dos datafiles do banco. > Eu sei que isso pode me aumentar a segurança caso tenha um LV > corrompido ou se houver um erro na aplicação e essa começar a escrever > indiscriminadamente no datafile que encheria a partição. Se tive > apenas uma partição, nesse caso, com certeza todo o sistema estaria > comprometido, certo? Mas e quanto a performance, há algum ganho/perda > de desempenho em se utilizar LVM? > > - ÍNDICES > > Outro ponto diz respeito aos arquivos de índices, que no caso dessa > aplicação são enormes. Existe alguma best practice quanto a eles? > Deveria deixá-los num LV a parte? > > - PARTITIONING > > Essa foi uma sugestão dos DBAs do cliente, existe uma tabela que pode > ser facilmente particionada pelo campo mês. A minha dúvida aí reside > se nesse esquema de particionamento são criados vários arquivos, um > pra cada partição, ou se tudo se resume a um datafile. Se forem vários > arquivos, tenho vantagem em distribuí-los pelos diferentes LVs? (Se > não fosse usar RAID 5, a pergunta seria: teria vantagem em > distribuí-los nos vários discos?) > > Qualquer idéia ou comentário será muito bem-vindo !!! > > Obrigado, > > Atividade nos últimos dias > >* >30 > Novos usuários > > <http://br.groups.yahoo.com/group/oracle_br/members;_ylc=X3oDMTJmajIwdXZyBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzExNzk3NDUwOTg-> > > Visite seu Grupo > <http://br.groups.yahoo.com/group/oracle_br;_ylc=X3oDMTJldTNoZGY1BF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTE3OTc0NTA5OA--> > > Yahoo! Mail > > Conecte-se ao mundo > <http://us.lrd.yahoo.com/_ylc=X3oDMTJsdnNrcGcwBF9TAzk3NDkwNDM3BF9wAzEEZ3JwSWQDMTY4Mjg5NgRncnBzcElkAzIxMzcxMTQ2ODkEc2VjA25jbW9kBHNsawNtYWlsBHN0aW1lAzExNzk3NDUwOTg-;_ylg=1/SIG=10ujd6ds6/**http%3A//mail.yahoo.com.br/> > > Proteção anti-spam > > Muito mais espaço > > Yahoo! Barra > > Instale grátis > <http://us.lrd.yahoo.com/_ylc=X3oDMTJvNGtoYzFqBF9TAzk3NDkwNDM3BF9wAzIEZ3JwSWQDMTY4Mjg5NgRncnBzcElkAzIxMzcxMTQ2ODkEc2VjA25jbW9kBHNsawN0b29sYmFyBHN0aW1lAzExNzk3NDUwOTg-;_ylg=1/SIG=111ngvtas/**http%3A//br.toolbar.yahoo.com/> > > Buscar sites na web > > Checar seus e-mails . > > Yahoo! Grupos > > Crie seu próprio grupo > <http://br.groups.yahoo.com/;_ylc=X3oDMTJvZGdmNWUyBF9TAzk3NDkwNDM3BF9wAzMEZ3JwSWQDMTY4Mjg5NgRncnBzcElkAzIxMzcxMTQ2ODkEc2VjA25jbW9kBHNsawNncm91cHMyBHN0aW1lAzExNzk3NDUwOTg-> > > A melhor forma de comunicação > > . -- Vitor Hugo Campos Desenvolvimento - Informática Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
[oracle_br] (unknown)
Tem, sim, é o Oracle Data Guard. Mais informações sobre ele no link abaixo: http://www.oracle.com/technology/deploy/availability/htdocs/DataGuardOverview.html OBS: só funciona na versão Enterprise do banco. moreninho123 escreveu: > > Existe alguma ferramenta de replicação oracle com front web e asincrona > que garanta a integridade do bando destino? > > -- Vitor Hugo Campos Desenvolvimento - Informática Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
Re: [oracle_br] ORA-00604: error occurred at recursive SQL level 2
Vinicius, a última linha da mensagem já está dando a dica: ele não conseguiu alocar 4200 bytes na shared pool. O que pode ter acontecido é que a shared pool esteja toda ocupada com cursores SQL abertos e faltou memória para colocar mais um objeto. Normalmente isso acontece porque o sistema está gerando SQL's sem variáveis de bind (ex: SELECT * FROM CLIENTES WHERE CODCLIENTE = 1, em vez de SELECT * FROM CLIENTES WHERE CODCLIENTE = :CODCLIENTE). Dá uma olhada em V$SQL, se houver muitos SQL's com valores literais em vez de variáveis de bind, você pode fazer o seguinte: 1) ALTER SYSTEM SET CURSOR_SHARING=FORCE O comando acima vai fazer com que o banco pegue o SQL que a aplicação mandou e trocar todos os literais por variáveis de bind. Isso deve ser uma solução temporária, porque o banco gasta um pouco mais de CPU fazendo essas conversões e, francamente, quem deveria criar as variáveis de bind deveria ser a própria aplicação. 2) Solicitar a correção da aplicação para usar variáveis de BIND em vez de literais (e dar uns cascudos nos programadores para eles nunca mais fazerem isso)... :P Se mesmo assim o erro continuar aparecendo, aumente o valor da shared pool. Vinicius Amorim escreveu: > > Estou com esse problema, alguem pode ajudar... > > O banco esta sendo populando por uma aplicacao, nao tem mais nada alem do > oracle e da aplicacao rodando. > > Quando chega em um determinado ponto, temos esse erro na log do banco. > > Errors in file > /opt/ora817/OraHome/admin/ora817/bdump/ora817_snp2_21949.trc: > ORA-00604: error occurred at recursive SQL level 2 > ORA-04031: unable to allocate 4200 bytes of shared memory ("shared > pool","JOB$","sga heap","state objects") > > Aguem sabe o q fazer? > > -- > Vinícius Amorim Teixeira > > 9965 90 18 > > Email - [EMAIL PROTECTED] <mailto:vini.rcc%40gmail.com> > MSN - [EMAIL PROTECTED] <mailto:vini.amorim%40hotmail.com> > > [As partes desta mensagem que não continham texto foram removidas] > > -- Vitor Hugo Campos Desenvolvimento - Informática Autoglass - Especialista em Vidro Automotivo +55 (27) 2121-5531 http://www.autoglass.com.br/
[oracle_br] Forms
Boa Tarde a Todos, Será que alguém teria um bom tutorial para um iniciante em Forms reports, onde eu pede-se aprender. Obrigado pela ajuda. Vitor Hugo Brito de Oliveira - Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar seu conhecimento? Experimente o Yahoo! Respostas! [As partes desta mensagem que não continham texto foram removidas] Vem aí: ENPO-BR 2006 - Encontro Nacional de Profissionais Oracle VISITE: http://www.enpo-br.org/ - Dia 11/11 "Vagas Limitadas" Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine -- 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/ -- 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: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
[oracle_br] Conexão JDBC Oracle
Prezado Senhores(as) Estou passando uma dificuldade para resolver o problema de conexão utilizando JDBC no ORACLE 9i, para continuar trabalhando eu configurei uma conexão ODBC está está funcionanco será que alguem poderia me auxiliar nesta enorme dúvida. Vitor Hugo Brito de Oliveira - Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! [As partes desta mensagem que não continham texto foram removidas] Vem aí: ENPO-BR 2006 - Encontro Nacional de Profissionais Oracle VISITE: http://www.enpo-br.org/ - Dia 11/11 "Vagas Limitadas" Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine -- 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/ -- O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 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: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html