Re: [oracle_br] CPU cost...

2009-07-02 Por tôpico Willian Fernando Frasson
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

2009-07-02 Por tôpico Leonardo Santos da Mata
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

2009-07-02 Por tôpico 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

  -- 
  __
  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

2009-07-02 Por tôpico Leonardo Santos da Mata
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

2009-07-02 Por tôpico Regis Bavaresco
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

2009-07-02 Por tôpico Mária Cristina Silva
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...

2009-07-02 Por tôpico Márcio Ricardo Alves da Silva
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...

2009-07-02 Por tôpico Carlos Alfredo M. de Menezes
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

2009-07-02 Por tôpico candiurudba
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...

2009-07-02 Por tôpico Márcio Ricardo Alves da Silva
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

2009-07-02 Por tôpico 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.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

2009-07-02 Por tôpico jlsecchin
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

2009-07-02 Por tôpico jlsecchin
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

2009-07-02 Por tôpico Fernando Martins
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

2009-07-02 Por tôpico 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



[oracle_br] Re: Monitoramento Tablespaces...

2009-07-02 Por tôpico jlchiappa
 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...

2009-07-02 Por tôpico José Eduardo Batista Juliano
"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...

2009-07-02 Por tôpico 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 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]
  >



  

[