Re: [oracle_br] CPU cost...
ah um picato use com a sintaxe top -cd5 que se tiver mais instancias na maquina vai te mostrar processo por instance. - Original Message - From: Carlos Alfredo M. de Menezes To: oracle_br@yahoogrupos.com.br Sent: Thursday, July 02, 2009 3:25 PM Subject: Re: [oracle_br] CPU cost... Colega, Quando olhamos via comando TOP a coluna %CPU, significa apenas o percentual de consumo de CPU dos processos em execução, ou seja, se só existir um processo em execução no momento da consulta, não é raro ver o processo acima de 50%, se o servidor tem vários processadores/cores, o consumo total da cpu deve ficar bem abaixo desse valor. Não vejo muito com o que se preocupar com isso, use a console "database control" do banco, ela tem mais recursos de monitoração e tunning. Att, Carlos Alfredo Márcio Ricardo Alves da Silva escreveu: > Untitled DocumentOlá pessoal. > > Estou realizando o monitoramento de um banco, e através do comando TOP do unix, pego os processos que estão consumindo mais CPU. Alguns processos estão consumindo mais de 25% da CPU ou até mais de 50% do processamento. Pego a query do processo e vou verificar no banco o SQL, e no banco a query tem um custo baixo e utiliza indice, mas o CPU cost está alto. > > Estou pesquisando pra ver se consigo achar algo q melhore a query, tenho algumas nessa situação. Estou iniciando o meu trabalho de tuning, entendo mais ou menos. Tem como eu melhorar o CPU cost? > > Grato, > Márcio. > > [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 > > > > -- O Banco de Dados de Vírus interno expirou. Verificado por AVG - http://www.avgbrasil.com.br Versão: 8.0.233 / Banco de dados de vírus: 270.10.16/1926 - Data de Lançamento: 30/1/2009 17:31 [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Retirar espaços do meio da string
Obrigado Jeison, Funcionou certinho 2009/7/2 Jeison > > > Olá, tenta assim > > SELECT REPLACE('teste teste',' ','') FROM dual > > > - Original Message - > From: Leonardo Santos da Mata > To: gpora...@yahoogrupos.com.br ; > oracle_br@yahoogrupos.com.br ; > usuarios_ora...@yahoogrupos.com.br > Sent: Thursday, July 02, 2009 6:20 PM > Subject: [oracle_br] Retirar espaços do meio da string > > ei pessoal eu estou usando oracle 10 G e estou com uma dúvida. > > Eu gostaria de saber e se é possível retirar um espaço vazio do meio de uma > string. > exemplo: "teste teste"--- > "testeteste" e 443 2007 -- > 4432007 > > Obrigado > > -- > > > [As partes desta mensagem que não continham texto foram removidas] > > [As partes desta mensagem que não continham texto foram removidas] > > > -- __ Leonardo Santos da Mata __ MSN: leonardodam...@hotmail.com GTalk: leonardodamata SKYPE: lsmata TWITTER: leonardodamata E-MAIL: leonardodam...@gmail.com __ [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] Retirar espaços do meio da string
Olá, tenta assim SELECT REPLACE('teste teste',' ','') FROM dual - Original Message - From: Leonardo Santos da Mata To: gpora...@yahoogrupos.com.br ; oracle_br@yahoogrupos.com.br ; usuarios_ora...@yahoogrupos.com.br Sent: Thursday, July 02, 2009 6:20 PM Subject: [oracle_br] Retirar espaços do meio da string ei pessoal eu estou usando oracle 10 G e estou com uma dúvida. Eu gostaria de saber e se é possível retirar um espaço vazio do meio de uma string. exemplo: "teste teste"--- > "testeteste" e 443 2007 -- > 4432007 Obrigado -- __ Leonardo Santos da Mata __ MSN: leonardodam...@hotmail.com GTalk: leonardodamata SKYPE: lsmata TWITTER: leonardodamata E-MAIL: leonardodam...@gmail.com __ [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Retirar espaços do meio da string
ei pessoal eu estou usando oracle 10 G e estou com uma dúvida. Eu gostaria de saber e se é possível retirar um espaço vazio do meio de uma string. exemplo: "teste teste"--- > "testeteste" e 443 2007 -- > 4432007 Obrigado -- __ Leonardo Santos da Mata __ MSN: leonardodam...@hotmail.com GTalk: leonardodamata SKYPE: lsmata TWITTER: leonardodamata E-MAIL: leonardodam...@gmail.com __ [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Crescimento de Tablespace
Pessoal, Tenho que montar algumas tabelas para um projeto em particular, o banco já existe é 9.2.0.8 sobre HP-UX 11, preciso ter uma idéia de crescimento em disco dessas novas tabelas, eu sei que isso depende de qual tipo de segmento será inserido nessa tablespace, índices, quais os campos das colunas nas tabelas,(varchar ou number... etc). Quem já necessitou disso, conhecem alguma recomendação técnica da Oracle para essa estimativa? Obrigado.
Re: [oracle_br] Connect by
Não sei se te ajuda, mas veja esse exmplo: * select* lpad(' ',(*level*-1)*2) || NOME *from* tb_unidade *---a que tem recursividade* *connect* *by* *prior* SEQ_UNIDADE=SEQ_UNIDADE_PAI *start* *with* NOME = 'UNIDADE1'; *create* *table* tb_unidade (seq_unidade *number*(20), nome *varchar2*(50), seq_unidade_pai *number*(20) ) *insert* *into* tb_unidade *values* (1,'UNIDADE1',*NULL*); *insert* *into* tb_unidade *values* (12'UNIDADE2',*NULL*); *insert* *into* tb_unidade *values* (3,'UNIDADE3',*NULL*); *insert* *into* tb_unidade *values* (4,'UNIDADE4',*NULL*); *insert* *into* tb_unidade *values* (5,'UNIDADE FILHA 1.1',1); *insert* *into* tb_unidade *values* (6,'UNIDADE FILHA 1.1',1); *insert* *into* tb_unidade *values* (7,'UNIDADE FILHA 1.1',1); *insert* *into* tb_unidade *values* (8,'UNIDADE FILHA 1.1',1); *insert* *into* tb_unidade *values* (9,'UNIDADE FILHA 2.2',2); *insert* *into* tb_unidade *values* (10,'UNIDADE FILHA 2.2',2); *insert* *into* tb_unidade *values* (11,'UNIDADE FILHA 3.3',3); *insert* *into* tb_unidade *values* (12,'UNIDADE FILHA 3.3',3); *insert* *into* tb_unidade *values* (13,'UNIDADE FILHA 4.4',4); *insert* *into* tb_unidade *values* (14,'UNIDADE FILHA 4.4',4); 2009/7/2 Elis Azevedo Nery > > > Olá! > > Será que alguém me pode ajudar com este embrólio do connect by? > > Eu tenho uma estrutura hierarquica (arvore) e o usuário pode estar ligado a > um ou mais ramos desta arvore. Eu preciso de uma query que me devolva esta > informação. O complicado é que se ele estiver ligado a um ramo dentro de > outro, eu só quero o ramo mais externo. > Visualmente seria assim: > > Neste caso o user aaa devolveria a arvore completa e o b devolveria os 2 > ramos > 1.2 > 1.2.1 > 1.2.2 > 1.2.2.1 > 1.3 > 1.3.1 > > Arvore > 1 > 1.1 > 1.1.1 > 1.2 > 1.2.1 > 1.2.2 > 1.2.2.1 > 1.3 > 1.3.1 > > > ARVORE > id_arvore id_arvore_superior > 1 > 1.1 1 > 1.1.1 1.1 > 1.2 1 > 1.2.1 1.2 > 1.2.2 1.2 > 1.2.2.1 1.2.2 > 1.3 1 > 1.3.1 1.3 > > --- > USUARIO_ARVORE > user arvore > aaa 1 > aaa 1.2 > aaa 1.3.1 > > bbb 1.2 > bbb 1.3 > > Obrigada > Elis > > __ > Veja quais são os assuntos do momento no Yahoo! +Buscados > http://br.maisbuscados.yahoo.com > > [As partes desta mensagem que não continham texto foram removidas] > > > -- Abraços, Mária Cristina Cel: 031-8883-5543 E-mail: mariancrist...@gmail.com MSN: mcristinasil...@hotmail.com -- "O começo é a parte mais importante do trabalho." - Platão [As partes desta mensagem que não continham texto foram removidas]
Re: [oracle_br] CPU cost...
Entendido Carlos, fui por esse caminho porque tinha um artigo em um site de discussão da agora ensinando-o. Grato. - Original Message - From: Carlos Alfredo M. de Menezes To: oracle_br@yahoogrupos.com.br Sent: Thursday, July 02, 2009 3:25 PM Subject: Re: [oracle_br] CPU cost... Colega, Quando olhamos via comando TOP a coluna %CPU, significa apenas o percentual de consumo de CPU dos processos em execução, ou seja, se só existir um processo em execução no momento da consulta, não é raro ver o processo acima de 50%, se o servidor tem vários processadores/cores, o consumo total da cpu deve ficar bem abaixo desse valor. Não vejo muito com o que se preocupar com isso, use a console "database control" do banco, ela tem mais recursos de monitoração e tunning. Att, Carlos Alfredo Márcio Ricardo Alves da Silva escreveu: > Untitled DocumentOlá pessoal. > > Estou realizando o monitoramento de um banco, e através do comando TOP do unix, pego os processos que estão consumindo mais CPU. Alguns processos estão consumindo mais de 25% da CPU ou até mais de 50% do processamento. Pego a query do processo e vou verificar no banco o SQL, e no banco a query tem um custo baixo e utiliza indice, mas o CPU cost está alto. > > Estou pesquisando pra ver se consigo achar algo q melhore a query, tenho algumas nessa situação. Estou iniciando o meu trabalho de tuning, entendo mais ou menos. Tem como eu melhorar o CPU cost? > > Grato, > Márcio. > > [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] CPU cost...
Colega, Quando olhamos via comando TOP a coluna %CPU, significa apenas o percentual de consumo de CPU dos processos em execução, ou seja, se só existir um processo em execução no momento da consulta, não é raro ver o processo acima de 50%, se o servidor tem vários processadores/cores, o consumo total da cpu deve ficar bem abaixo desse valor. Não vejo muito com o que se preocupar com isso, use a console "database control" do banco, ela tem mais recursos de monitoração e tunning. Att, Carlos Alfredo Márcio Ricardo Alves da Silva escreveu: > Untitled DocumentOlá pessoal. > > Estou realizando o monitoramento de um banco, e através do comando TOP do > unix, pego os processos que estão consumindo mais CPU. Alguns processos estão > consumindo mais de 25% da CPU ou até mais de 50% do processamento. Pego a > query do processo e vou verificar no banco o SQL, e no banco a query tem um > custo baixo e utiliza indice, mas o CPU cost está alto. > > Estou pesquisando pra ver se consigo achar algo q melhore a query, tenho > algumas nessa situação. Estou iniciando o meu trabalho de tuning, entendo > mais ou menos. Tem como eu melhorar o CPU cost? > > Grato, > Márcio. > > [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 > > > >
[oracle_br] Alterando Parametros do CBO - Tuning
Boa tarde colegas, Estava lendo algumas mensagens antigas aqui no forum, sobre o erro de basear tuning nos famosos Hit Ratios (buffer chache e etc...) e que algumas melhorias podem ser implementadas, com relação a performance de querys, alterando alguns parametros do CBO. Comecei a fazer algumas pesquisas sobre algumas opções e tenho algumas pequenas dúvidas... Nas aplicações que trabalho, temos algumas tabelas que sofrem FULL TABLE SCAN e INDEX RANGE...meu banco de dados esta configurado como optimizer_mode=ALL_ROWS que, segundo pesquisa, favorece os FULL TABLE SCANS...seria isso mesmo ? Segundo pesquisei no metalink, para banco um OLTP o ideial seria FIRST_ROWS..mas, e com relação aos FULL TABLE SCANS ? Perderia muita performance ? Opções que pensei em mudar, relativas a pesquisa: optimizer_mode=ALL_ROWS ==> FIRST_ROWS optimizer_index_caching=0 ==> 50 db_file_multiblock_read_count=16 ==>40 parallel_automatic_tuning=FALSE ==>ON (pelo que entendi, com esta opção em ON ele pode paralelizar os FULL TABLES SCAN...isso funciona mesmo ? ) hash_area_size e sort_area_size não irei mexes pois utilizo pga_aggregate_target. Segundo documentação, só poderia alterar estas opções se nao estivesse trabalhando com pga_aggregate. Tudo certinho ?
[oracle_br] CPU cost...
Untitled DocumentOlá pessoal. Estou realizando o monitoramento de um banco, e através do comando TOP do unix, pego os processos que estão consumindo mais CPU. Alguns processos estão consumindo mais de 25% da CPU ou até mais de 50% do processamento. Pego a query do processo e vou verificar no banco o SQL, e no banco a query tem um custo baixo e utiliza indice, mas o CPU cost está alto. Estou pesquisando pra ver se consigo achar algo q melhore a query, tenho algumas nessa situação. Estou iniciando o meu trabalho de tuning, entendo mais ou menos. Tem como eu melhorar o CPU cost? Grato, Márcio. [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] Connect by
Olá! Será que alguém me pode ajudar com este embrólio do connect by? Eu tenho uma estrutura hierarquica (arvore) e o usuário pode estar ligado a um ou mais ramos desta arvore. Eu preciso de uma query que me devolva esta informação. O complicado é que se ele estiver ligado a um ramo dentro de outro, eu só quero o ramo mais externo. Visualmente seria assim: Neste caso o user aaa devolveria a arvore completa e o b devolveria os 2 ramos 1.2 1.2.1 1.2.2 1.2.2.1 1.3 1.3.1 Arvore 1 1.1 1.1.1 1.2 1.2.1 1.2.2 1.2.2.1 1.3 1.3.1 ARVORE id_arvore id_arvore_superior 1 1.11 1.1.1 1.1 1.21 1.2.1 1.2 1.2.2 1.2 1.2.2.1 1.2.2 1.3 1 1.3.1 1.3 --- USUARIO_ARVORE userarvore aaa 1 aaa1.2 aaa 1.3.1 bbb 1.2 bbb 1.3 Obrigada Elis Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Métrica - Database Time Spent Waiting
Pessoal, não achei nada sobre isso : A métrica "Database Time Spent Waiting (%)" está em 89,26614 para a classe de evento "Commit" Alguém pode me ajudar ? Grato.
[oracle_br] Re: Calculo SGA_TARGET - Complementando
O servidor é dedicado, só o oracle roda nele. Minha maior dúvida é poder definir os limites com base no meu ambiente, se eu aumentar muito a SGA_MAX_SIZE atrapalha ? Pelo que sei ela só server de balizamento para a SGA_TARGET (que está automática) nesse caso acho que atrapalharia. --- Em oracle_br@yahoogrupos.com.br, Fernando Martins escreveu > > Amigo, > > nem sempre as recomendações do AWR / ADDM / OEM servem pro seu caso, pois > cada ambiente é mto diferente do outro, mas como regra geral vc pode sim > testar elas e verem se funciona, se tiveram resultado positivo. Nessa caso, > se vc quiser testar essa recomendação, vai ter de subir a SGA_MAX_SIZE antes > pra então subir sua SGA_TARGET. BOm mesmo seria validar isso num ambiente de > testes, mas se vc não dispor de um, acho que o jeito é fazer em PRD mesmo. > Se possivel programe essa modificação, apesar de ser dinâmica, pode ter um > impacto na performance do banco e seus usuários não irão ficar felizes com > isso. > Existem muitos outros fatores que podem estar causando essa lentidao, como > outros processos rodando no servidor (o servidor é dedicado pra banco?), > processos de batch que rodam em certas horários e são bem diferentes de > consultas da aplicação, requerem um tratamento especial. > > -- > Fernando Martins > > > "God grant us the serenity to accept the things we cannot change, > courage to change the things we can, > and wisdom to know the difference." > > > 2009/7/2 jlsecchin > > > > > > > Pessoal, > > > > Estou com um problema sério, temos uma aplicação fechada que em certos > > momentos tem uma lentidão muito grande. > > No DBConsole há um aviso para que seha redimensionada a SGA_TARGET para > > 1480M (hoje com 1184M). O valor da SGA_MAX_SIZE está em 1200M. Não sei quais > > seriam os melhores valores para ambos. Alguém pode me ajudar nisso ? > > Seguem mais dados: > > Banco : 12420M ( uso 7300M , livre 5100M ) > > Memória : 2G > > Swap : 4G ( em uso 100M ) > > Disco : 230G (em uso 54%) > > Ambiente : Suse 64 > > Agradeço, qualquer ajuda > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] >
Re: [oracle_br] Calculo SGA_TARGET
Amigo, nem sempre as recomendações do AWR / ADDM / OEM servem pro seu caso, pois cada ambiente é mto diferente do outro, mas como regra geral vc pode sim testar elas e verem se funciona, se tiveram resultado positivo. Nessa caso, se vc quiser testar essa recomendação, vai ter de subir a SGA_MAX_SIZE antes pra então subir sua SGA_TARGET. BOm mesmo seria validar isso num ambiente de testes, mas se vc não dispor de um, acho que o jeito é fazer em PRD mesmo. Se possivel programe essa modificação, apesar de ser dinâmica, pode ter um impacto na performance do banco e seus usuários não irão ficar felizes com isso. Existem muitos outros fatores que podem estar causando essa lentidao, como outros processos rodando no servidor (o servidor é dedicado pra banco?), processos de batch que rodam em certas horários e são bem diferentes de consultas da aplicação, requerem um tratamento especial. -- Fernando Martins "God grant us the serenity to accept the things we cannot change, courage to change the things we can, and wisdom to know the difference." 2009/7/2 jlsecchin > > > Pessoal, > > Estou com um problema sério, temos uma aplicação fechada que em certos > momentos tem uma lentidão muito grande. > No DBConsole há um aviso para que seha redimensionada a SGA_TARGET para > 1480M (hoje com 1184M). O valor da SGA_MAX_SIZE está em 1200M. Não sei quais > seriam os melhores valores para ambos. Alguém pode me ajudar nisso ? > Seguem mais dados: > Banco : 12420M ( uso 7300M , livre 5100M ) > Memória : 2G > Swap : 4G ( em uso 100M ) > Disco : 230G (em uso 54%) > Ambiente : Suse 64 > Agradeço, qualquer ajuda > > > [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Calculo SGA_TARGET
Pessoal, Estou com um problema sério, temos uma aplicação fechada que em certos momentos tem uma lentidão muito grande. No DBConsole há um aviso para que seha redimensionada a SGA_TARGET para 1480M (hoje com 1184M). O valor da SGA_MAX_SIZE está em 1200M. Não sei quais seriam os melhores valores para ambos. Alguém pode me ajudar nisso ? Seguem mais dados: Banco : 12420M ( uso 7300M , livre 5100M ) Memória : 2G Swap : 4G ( em uso 100M ) Disco : 230G (em uso 54%) Ambiente : Suse 64 Agradeço, qualquer ajuda
[oracle_br] Re: Monitoramento Tablespaces...
Não olhei a sintaxe, mas a lógica parece estar correta, eu só diria pra vc usar cursor implícito via loop, aí vc não precisa declarar, nem de open/fetch/close, a lógica fica + simples... Sobre a msg, cfrme vc sabe quando vc cria um stored PL/SQL (proc, func, pack, trigger) os GRANTs dados via ROLE são desprezados, só os dados diretamente são utilizados, talvez seja isso, falte um grant direto pro usuário dono dessa proc para ele poder acessar a dba_tablespaces dentro de stored pl/sqls. []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Márcio Ricardo Alves da Silva escreveu > > Obrigado Chiappa pela explicação, ficou claro agora. > > Estou montando a minha procedure para o envio do e-mail. O select que eu rodo > para pegar o espaço da tablespace funciona perfeitamente. Quando eu coloco > esse select no CURSOR da minha procedure, dá a mensagem de table or view not > exists para a tabela dba_tablespaces. > > A procedure que estou montando é essa: > > CREATE OR REPLACE PROCEDURE MONITORA_TABLESPACE IS > CURSOR C_TABLESPACE IS > SELECT ts.tablespace_name AS DESC_TABLESPACE, > QTDE_ARQUIVOS, > TRUNC("SIZE(MB)", 2) AS TAMANHO, > TRUNC(fr."FREE(MB)", 2) AS FREE, > TRUNC("SIZE(MB)" - "FREE(MB)", 2) AS USED, > (fr."FREE(MB)" / df."SIZE(MB)") * 100 AS PERC_FREE > FROM (SELECT tablespace_name, > SUM (bytes) / (1024 * 1024) "FREE(MB)" > FROM dba_free_space > WHERE TABLESPACE_NAME IN ('NFE_TAB', 'NFE_LOB', 'NFE_IDX') > GROUP BY tablespace_name) fr, > (SELECT tablespace_name, SUM(bytes) / (1024 * 1024) "SIZE(MB)", > COUNT(*) AS QTDE_ARQUIVOS > FROM dba_data_files > WHERE TABLESPACE_NAME IN ('NFE_TAB', 'NFE_LOB', 'NFE_IDX') > GROUP BY tablespace_name) df, > (SELECT tablespace_name > FROM dba_tablespaces > WHERE TABLESPACE_NAME IN ('NFE_TAB', 'NFE_LOB', 'NFE_IDX')) ts > WHERE fr.tablespace_name = df.tablespace_name (+) > AND fr.tablespace_name = ts.tablespace_name (+) > ORDER BY PERC_FREE desc; > > V_TABLESPACE C_TABLESPACE%ROWTYPE; > V_RESULTADO VARCHAR2(1000); > > BEGIN > V_RESULTADO := ''; > IF NOT C_TABLESPACE%ISOPEN THEN > OPEN C_TABLESPACE; > END IF; > FETCH C_TABLESPACE INTO V_TABLESPACE; > WHILE C_TABLESPACE%NOTFOUND LOOP > V_RESULTADO := V_RESULTADO || V_TABLESPACE.DESC_TABLESPACE || 'SIZE(MB): ' || > V_TABLESPACE.TAMANHO || > 'FREE(MB): ' || V_TABLESPACE.FREE || 'USED(MB): ' || V_TABLESPACE.USED; > FETCH C_TABLESPACE INTO V_TABLESPACE; > END LOOP; > IF C_TABLESPACE%ISOPEN THEN > CLOSE C_TABLESPACE; > END IF; > END; > > Grato, > > Márcio. > > - Original Message - > From: jlchiappa > To: oracle_br@yahoogrupos.com.br > Sent: Friday, June 26, 2009 8:07 PM > Subject: [oracle_br] Re: Monitoramento Tablespaces... > > > > > > Sim, o comportamento do Oracle é : quando vc vai gravar algo no banco e é > preciso abrir espaço a mais, ele ** NÃO ** aloca byte-a-byte o espaço até > chegar os X bytes necessários justinhos pra gravar o seu dado, o que ele faz > é alocar de uma vez só um PEDAÇÂO chamado EXTENT, dentro do extent alocado > ele usa os X bytes que precisava , a proxima gravação vai usar mais desse > espaço que sobrou no extent, depois a próxima ainda mais, até uma hora que o > extent encheu, aí OUTRO pedação é alocado e vai ser usado, assim vai > Então sim, faz sentido, TRANQUILAMENTE pode ser que o seu extent seja de 8 > Mb, aí foi preciso espaço e não tinha ele alocou um novo extent de 8 Mb no > primeiro dia, sobrou bastante espaço nesse extent, dái as gravações do > segundo e terceiro dia usaram o que sobrou no extent, não foram necessárias > novas alocações, sim... Pravc confirmar isso, ** extraia ** o DDL (via > DBMS_METADATA, Oracle SQL Developer, export+import com indexfile, o que for) > dessa tabela (pra ver qual foi o extent size usado na criação, pra qual > tablespace está indo o LOB, etc) , e ** consulte ** as views DBA_SEGMENTS , > DBA_EXTENTS , DBA_FREE_SPACE , DBA_TABLESPACES e DBA_DATA_FILES que vc vai > saber como foi alocado o espaço, que REALMENTE está alocando e usando espaço > nessa tablespace, quanto vc tem livre, tudo está registrado nelas, yes ? > > Quanto ao email, veja lá na documentação que na package de UTL_MAIL a > rotina que envia o email aceita uma VARIÀVEL STRING como o texto da mensagem, > então bastaria vc escrever num PL/SQL um SELECT INTO da informação numa > variável, ok ? PROVAVELMENTE vc vai querer ter não uma, mas N tablespaces, > então a consulta vai retornar N linhas, aí vc tera que escrever um CURSOR > para concatenar todas numa string e usar essa string como argumento na rotin > de envio, ok ? > > []s > > Chiappa > []s > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br, Márcio Ricardo Alves da Silva > escreveu > > > > Untitled DocumentBoas. > > > > Estou fazendo o monitoramento de algumas tablespace e achei estranho o > crescimento de uma delas. No primeiro dia, essa tablespace tinha crescido > 8MB, no dia seguinte não cresceu nada, e posteriormente nada também. A ún
Re: [oracle_br] Re: Monitoramento Tablespaces...
"A regra é clara" hehe Vc precisa *explicitamente* dar um grant nas tabelas que a procedure vai usar ou seja execute: grant select on dba_tablespaces to USUARIO OWNER DA PROCEDURE 2009/7/2 Márcio Ricardo Alves da Silva > > > Obrigado Chiappa pela explicação, ficou claro agora. > > Estou montando a minha procedure para o envio do e-mail. O select que eu > rodo para pegar o espaço da tablespace funciona perfeitamente. Quando eu > coloco esse select no CURSOR da minha procedure, dá a mensagem de table or > view not exists para a tabela dba_tablespaces. > > A procedure que estou montando é essa: > > CREATE OR REPLACE PROCEDURE MONITORA_TABLESPACE IS > CURSOR C_TABLESPACE IS > SELECT ts.tablespace_name AS DESC_TABLESPACE, > QTDE_ARQUIVOS, > TRUNC("SIZE(MB)", 2) AS TAMANHO, > TRUNC(fr."FREE(MB)", 2) AS FREE, > TRUNC("SIZE(MB)" - "FREE(MB)", 2) AS USED, > (fr."FREE(MB)" / df."SIZE(MB)") * 100 AS PERC_FREE > FROM (SELECT tablespace_name, > SUM (bytes) / (1024 * 1024) "FREE(MB)" > FROM dba_free_space > WHERE TABLESPACE_NAME IN ('NFE_TAB', 'NFE_LOB', 'NFE_IDX') > GROUP BY tablespace_name) fr, > (SELECT tablespace_name, SUM(bytes) / (1024 * 1024) "SIZE(MB)", > COUNT(*) AS QTDE_ARQUIVOS > FROM dba_data_files > WHERE TABLESPACE_NAME IN ('NFE_TAB', 'NFE_LOB', 'NFE_IDX') > GROUP BY tablespace_name) df, > (SELECT tablespace_name > FROM dba_tablespaces > WHERE TABLESPACE_NAME IN ('NFE_TAB', 'NFE_LOB', 'NFE_IDX')) ts > WHERE fr.tablespace_name = df.tablespace_name (+) > AND fr.tablespace_name = ts.tablespace_name (+) > ORDER BY PERC_FREE desc; > > V_TABLESPACE C_TABLESPACE%ROWTYPE; > V_RESULTADO VARCHAR2(1000); > > BEGIN > V_RESULTADO := ''; > IF NOT C_TABLESPACE%ISOPEN THEN > OPEN C_TABLESPACE; > END IF; > FETCH C_TABLESPACE INTO V_TABLESPACE; > WHILE C_TABLESPACE%NOTFOUND LOOP > V_RESULTADO := V_RESULTADO || V_TABLESPACE.DESC_TABLESPACE || 'SIZE(MB): ' > || V_TABLESPACE.TAMANHO || > 'FREE(MB): ' || V_TABLESPACE.FREE || 'USED(MB): ' || V_TABLESPACE.USED; > FETCH C_TABLESPACE INTO V_TABLESPACE; > END LOOP; > IF C_TABLESPACE%ISOPEN THEN > CLOSE C_TABLESPACE; > END IF; > END; > > Grato, > > Márcio. > > - Original Message - > From: jlchiappa > To: oracle_br@yahoogrupos.com.br > Sent: Friday, June 26, 2009 8:07 PM > Subject: [oracle_br] Re: Monitoramento Tablespaces... > > Sim, o comportamento do Oracle é : quando vc vai gravar algo no banco e é > preciso abrir espaço a mais, ele ** NÃO ** aloca byte-a-byte o espaço até > chegar os X bytes necessários justinhos pra gravar o seu dado, o que ele faz > é alocar de uma vez só um PEDAÇÂO chamado EXTENT, dentro do extent alocado > ele usa os X bytes que precisava , a proxima gravação vai usar mais desse > espaço que sobrou no extent, depois a próxima ainda mais, até uma hora que o > extent encheu, aí OUTRO pedação é alocado e vai ser usado, assim vai > Então sim, faz sentido, TRANQUILAMENTE pode ser que o seu extent seja de 8 > Mb, aí foi preciso espaço e não tinha ele alocou um novo extent de 8 Mb no > primeiro dia, sobrou bastante espaço nesse extent, dái as gravações do > segundo e terceiro dia usaram o que sobrou no extent, não foram necessárias > novas alocações, sim... Pravc confirmar isso, ** extraia ** o DDL (via > DBMS_METADATA, Oracle SQL Developer, export+import com indexfile, o que for) > dessa tabela (pra ver qual foi o extent size usado na criação, pra qual > tablespace está indo o LOB, etc) , e ** consulte ** as views DBA_SEGMENTS , > DBA_EXTENTS , DBA_FREE_SPACE , DBA_TABLESPACES e DBA_DATA_FILES que vc vai > saber como foi alocado o espaço, que REALMENTE está alocando e usando espaço > nessa tablespace, quanto vc tem livre, tudo está registrado nelas, yes ? > > Quanto ao email, veja lá na documentação que na package de UTL_MAIL a > rotina que envia o email aceita uma VARIÀVEL STRING como o texto da > mensagem, então bastaria vc escrever num PL/SQL um SELECT INTO da informação > numa variável, ok ? PROVAVELMENTE vc vai querer ter não uma, mas N > tablespaces, então a consulta vai retornar N linhas, aí vc tera que escrever > um CURSOR para concatenar todas numa string e usar essa string como > argumento na rotin de envio, ok ? > > []s > > Chiappa > []s > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br , > Márcio Ricardo Alves da Silva escreveu > > > > Untitled DocumentBoas. > > > > Estou fazendo o monitoramento de algumas tablespace e achei estranho o > crescimento de uma delas. No primeiro dia, essa tablespace tinha crescido > 8MB, no dia seguinte não cresceu nada, e posteriormente nada também. A única > mudança que foi feita, foi adicionar mais um datafile para a tablespace de > LOB de 2GB. > > Isso é normal? Será que nesse caso, o oracle já alocou um tanto de espaço > e quando chegar a esse tanto, ele aloca mais 8MB? > > > > Outra coisa, esse monitoramento estou fazendo com um select toda manhã. > Sei que posso fazer uma procedure, e criar um job para ser executado, e > posso utilizar a package UTL_MAIL para enviar e-mail. Mas como eu faço para >
Re: [oracle_br] Re: Monitoramento Tablespaces...
Obrigado Chiappa pela explicação, ficou claro agora. Estou montando a minha procedure para o envio do e-mail. O select que eu rodo para pegar o espaço da tablespace funciona perfeitamente. Quando eu coloco esse select no CURSOR da minha procedure, dá a mensagem de table or view not exists para a tabela dba_tablespaces. A procedure que estou montando é essa: CREATE OR REPLACE PROCEDURE MONITORA_TABLESPACE IS CURSOR C_TABLESPACE IS SELECT ts.tablespace_name AS DESC_TABLESPACE, QTDE_ARQUIVOS, TRUNC("SIZE(MB)", 2) AS TAMANHO, TRUNC(fr."FREE(MB)", 2) AS FREE, TRUNC("SIZE(MB)" - "FREE(MB)", 2) AS USED, (fr."FREE(MB)" / df."SIZE(MB)") * 100 AS PERC_FREE FROM (SELECT tablespace_name, SUM (bytes) / (1024 * 1024) "FREE(MB)" FROM dba_free_space WHERE TABLESPACE_NAME IN ('NFE_TAB', 'NFE_LOB', 'NFE_IDX') GROUP BY tablespace_name) fr, (SELECT tablespace_name, SUM(bytes) / (1024 * 1024) "SIZE(MB)", COUNT(*) AS QTDE_ARQUIVOS FROM dba_data_files WHERE TABLESPACE_NAME IN ('NFE_TAB', 'NFE_LOB', 'NFE_IDX') GROUP BY tablespace_name) df, (SELECT tablespace_name FROM dba_tablespaces WHERE TABLESPACE_NAME IN ('NFE_TAB', 'NFE_LOB', 'NFE_IDX')) ts WHERE fr.tablespace_name = df.tablespace_name (+) AND fr.tablespace_name = ts.tablespace_name (+) ORDER BY PERC_FREE desc; V_TABLESPACE C_TABLESPACE%ROWTYPE; V_RESULTADO VARCHAR2(1000); BEGIN V_RESULTADO := ''; IF NOT C_TABLESPACE%ISOPEN THEN OPEN C_TABLESPACE; END IF; FETCH C_TABLESPACE INTO V_TABLESPACE; WHILE C_TABLESPACE%NOTFOUND LOOP V_RESULTADO := V_RESULTADO || V_TABLESPACE.DESC_TABLESPACE || 'SIZE(MB): ' || V_TABLESPACE.TAMANHO || 'FREE(MB): ' || V_TABLESPACE.FREE || 'USED(MB): ' || V_TABLESPACE.USED; FETCH C_TABLESPACE INTO V_TABLESPACE; END LOOP; IF C_TABLESPACE%ISOPEN THEN CLOSE C_TABLESPACE; END IF; END; Grato, Márcio. - Original Message - From: jlchiappa To: oracle_br@yahoogrupos.com.br Sent: Friday, June 26, 2009 8:07 PM Subject: [oracle_br] Re: Monitoramento Tablespaces... Sim, o comportamento do Oracle é : quando vc vai gravar algo no banco e é preciso abrir espaço a mais, ele ** NÃO ** aloca byte-a-byte o espaço até chegar os X bytes necessários justinhos pra gravar o seu dado, o que ele faz é alocar de uma vez só um PEDAÇÂO chamado EXTENT, dentro do extent alocado ele usa os X bytes que precisava , a proxima gravação vai usar mais desse espaço que sobrou no extent, depois a próxima ainda mais, até uma hora que o extent encheu, aí OUTRO pedação é alocado e vai ser usado, assim vai Então sim, faz sentido, TRANQUILAMENTE pode ser que o seu extent seja de 8 Mb, aí foi preciso espaço e não tinha ele alocou um novo extent de 8 Mb no primeiro dia, sobrou bastante espaço nesse extent, dái as gravações do segundo e terceiro dia usaram o que sobrou no extent, não foram necessárias novas alocações, sim... Pravc confirmar isso, ** extraia ** o DDL (via DBMS_METADATA, Oracle SQL Developer, export+import com indexfile, o que for) dessa tabela (pra ver qual foi o extent size usado na criação, pra qual tablespace está indo o LOB, etc) , e ** consulte ** as views DBA_SEGMENTS , DBA_EXTENTS , DBA_FREE_SPACE , DBA_TABLESPACES e DBA_DATA_FILES que vc vai saber como foi alocado o espaço, que REALMENTE está alocando e usando espaço nessa tablespace, quanto vc tem livre, tudo está registrado nelas, yes ? Quanto ao email, veja lá na documentação que na package de UTL_MAIL a rotina que envia o email aceita uma VARIÀVEL STRING como o texto da mensagem, então bastaria vc escrever num PL/SQL um SELECT INTO da informação numa variável, ok ? PROVAVELMENTE vc vai querer ter não uma, mas N tablespaces, então a consulta vai retornar N linhas, aí vc tera que escrever um CURSOR para concatenar todas numa string e usar essa string como argumento na rotin de envio, ok ? []s Chiappa []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Márcio Ricardo Alves da Silva escreveu > > Untitled DocumentBoas. > > Estou fazendo o monitoramento de algumas tablespace e achei estranho o crescimento de uma delas. No primeiro dia, essa tablespace tinha crescido 8MB, no dia seguinte não cresceu nada, e posteriormente nada também. A única mudança que foi feita, foi adicionar mais um datafile para a tablespace de LOB de 2GB. > Isso é normal? Será que nesse caso, o oracle já alocou um tanto de espaço e quando chegar a esse tanto, ele aloca mais 8MB? > > Outra coisa, esse monitoramento estou fazendo com um select toda manhã. Sei que posso fazer uma procedure, e criar um job para ser executado, e posso utilizar a package UTL_MAIL para enviar e-mail. Mas como eu faço para pegar o resultado desse select para ser enviado no meu e-mail toda manhã? Só não sei como enviar o resultado do select com e-mail, com isso conseguiria ter o monitoramento dos finais de semana e de quando estou viajando também > > Grato, > Márcio Ricardo. > > > > [As partes desta mensagem que não continham texto foram removidas] > [