Re: [oracle_br] Re: Ajuda query

2018-07-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]

 Sorry, quis dizer DBA_TEMP_FILES, óbvio...
 
---Em oracle_br@yahoogrupos.com.br,  escreveu:

 Esse é o ponto, não vi muito sentido em se dar ao trabalho de consultar a 
DBA_DATA_FILES sendo que depois o WHERE contents in ('TEMPORARY'  vai Eliminar 
os dados desse select - tanto que cfrme meu resultado a minha tablespace TEMP 
nem aparece...
 

 []s
 

   Chiappa
 

 

---Em oracle_br@yahoogrupos.com.br,  escreveu:

 
 Muito obrigado pela ajuda Chiappa.
 

 Só para complementar, essa query foi retirada do blog do Tanel Poder. Todos os 
scripts que ele disponibiliza foi ele mesmo quem criou. Em relação a UNDO e 
TEMP, tinha adicionado a consulta para excluir as duas tablespaces da query:


 AND t.tablespace_name not in (select tablespace_name from dba_tablespaces 
where contents in ('TEMPORARY','UNDO'))

 

 Já possuo as queries que fazem o monitoramento do UNDO e da TEMP
 Obrigado.

 Em quarta-feira, 4 de julho de 2018 13:55:57 BRT, jlchia...@yahoo.com.br 
[oracle_br]  escreveu:
 

 

   Blz ? Então, antes de tar a sua resposta, uma Obs : tenha ** certeza ** que 
a lógica implementada nesse tal script aí está correta principalmente no 
tocante à tablespace de UNDO e tablespace TEMP - como Acredito que vc deve 
saber, o espaço usado REAL na tablespace de UNDO vc deve consultar na 
V$TRANSACTION e o espaço REAL em uso na temp tablespace vc consulta na 
V$SORT_USAGE/V$SORT_SEGMENT Outra coisa é CUIDADO ao calcular %used e %free 
em datafiles auto-extensíveis : como vc sabe, o valor máximo de extensão é um 
limite FUTURO, a ser imposto AO SISTEMA OPERACIONAL não agora mas apenas QUANDO 
a tablespace crescer.. Assim, então em tese vc deveria SOMAR os autoextensíveis 
todos, verificar quanto vc tem livre em disco no sistema operacional e o espaço 
livre ** REAL ** seria a diferença desses dois...

 Muito bem, aviso dado vamos à resposta : primeiro vamos executar a tua query 
sem alterações :
 
SYSTEM:@O11GR2SE:SQL>get t.sql
  1 SELECT t.tablespace_name, t.mb  "TotalMB" 
  2 ,t.mb - nvl(f.mb,0) "UsedMB" 
  3 ,   nvl(f.mb,0) "FreeMB" 
  4 ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% Used" 
  5 ,t.ext "Ext" 
  6 , 
'|'||rpad(lpad('#',ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*20),'#'),20,' 
')||'|' "Used" 
  7  FROM 
  8 ( 
  9   select tablespace_name, trunc(sum(bytes)/1048576) MB 
 10 from dba_free_space 
 11group by tablespace_name 
 12   union all 
 13   select tablespace_name, trunc(sum(bytes_free)/1048576) MB 
 14 from v$temp_space_header 
 15group by tablespace_name 
 16  ) f, 
 17 (select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext 
 18from dba_data_files 
 19   group by tablespace_name 
 20  union all 
 21  select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext 
 22from dba_temp_files 
 23   group by tablespace_name 
 24  ) t 
 25 WHERE t.tablespace_name = f.tablespace_name (+) 
 26   AND t.tablespace_name not in (select tablespace_name from dba_tablespaces 
where contents in ('TEMPORARY','UNDO')) 
 27 ORDER BY t.tablespace_name; 

 SYSTEM:@O11GR2SE:SQL>@t

TABLESPACE_NAME   TotalMB UsedMB FreeMB % Used Ext Used
-- -- -- -- -- --- 
--
EXAMPLE   313 3927413% YES |### 
|
STATSPACK 372355 1796% YES 
||
SYSAUX580537 4393% YES 
|### |
SYSTEM   1760   1721 3998% YES 
||
TS_TESTE  363346 1796% YES 
||
USERS1297   1235 6296% YES 
||

6 linhas selecionadas.

==> Okdoc... Bem, pelo que entendi a tua dúvida decorre primeiro do fato de a 
coluna "% Used" ser o resultado de uma expressão, o que o Oracle não deixa usar 
em GROUP BY, em WHERE A solução para isso é simplesmente ter um query 
EXTERNA, que use na cláusula de FROM a query original, assim 'materializando' 
as expressões O segundo ponto que imagino te  pegou foi o FATO de que essa 
coluna é uma CONTA/expressão numérica CONCATENADA com um caracter '%' : 
necessariamente se vc concatena uma string com uma conta o resultado é string, 
pra vc poder restringir com >= vc TEM que converter de volta pra número, assim :

SYSTEM:@O11GR2SE:SQL>get t.sql
  1  select *
  2  from
  3 (
  4 SELECT t.tablespace_name, t.mb  "TotalMB"
  5 ,t.mb - nvl(f.mb,0) "UsedMB"
  6 ,   nvl(f.mb,0) "FreeMB"
  7 ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% 

Re: [oracle_br] Re: Ajuda query

2018-07-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Ah, e como eu falei repito : ** espero ** que tuas rotinas pra achar o %free 
real dos datafiles/tempfiles autoextensíveis some o que está alocado hoje, some 
o total livre em disco lá 'fora', lá no sistema operacional  e aí sim calcule 
ESSA diferença... Não é porque vc tem 10 datafiles autoextensíveis cada um com 
10 GB que vc EFETIVAMENTE possa crescer até 100 GB , isso só ocorrerá se o 
sistema operacional/storage de discos realmente tem esse espaço livre...
 

 []s
 

   Chiappa



Re: [oracle_br] Re: Ajuda query

2018-07-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Esse é o ponto, não vi muito sentido em se dar ao trabalho de consultar a 
DBA_DATA_FILES sendo que depois o WHERE contents in ('TEMPORARY'  vai Eliminar 
os dados desse select - tanto que cfrme meu resultado a minha tablespace TEMP 
nem aparece...
 

 []s
 

   Chiappa
 

 

---Em oracle_br@yahoogrupos.com.br,  escreveu:

 
 Muito obrigado pela ajuda Chiappa.
 

 Só para complementar, essa query foi retirada do blog do Tanel Poder. Todos os 
scripts que ele disponibiliza foi ele mesmo quem criou. Em relação a UNDO e 
TEMP, tinha adicionado a consulta para excluir as duas tablespaces da query:


 AND t.tablespace_name not in (select tablespace_name from dba_tablespaces 
where contents in ('TEMPORARY','UNDO'))

 

 Já possuo as queries que fazem o monitoramento do UNDO e da TEMP
 Obrigado.

 Em quarta-feira, 4 de julho de 2018 13:55:57 BRT, jlchia...@yahoo.com.br 
[oracle_br]  escreveu:
 

 

   Blz ? Então, antes de tar a sua resposta, uma Obs : tenha ** certeza ** que 
a lógica implementada nesse tal script aí está correta principalmente no 
tocante à tablespace de UNDO e tablespace TEMP - como Acredito que vc deve 
saber, o espaço usado REAL na tablespace de UNDO vc deve consultar na 
V$TRANSACTION e o espaço REAL em uso na temp tablespace vc consulta na 
V$SORT_USAGE/V$SORT_SEGMENT Outra coisa é CUIDADO ao calcular %used e %free 
em datafiles auto-extensíveis : como vc sabe, o valor máximo de extensão é um 
limite FUTURO, a ser imposto AO SISTEMA OPERACIONAL não agora mas apenas QUANDO 
a tablespace crescer.. Assim, então em tese vc deveria SOMAR os autoextensíveis 
todos, verificar quanto vc tem livre em disco no sistema operacional e o espaço 
livre ** REAL ** seria a diferença desses dois...

 Muito bem, aviso dado vamos à resposta : primeiro vamos executar a tua query 
sem alterações :
 
SYSTEM:@O11GR2SE:SQL>get t.sql
  1 SELECT t.tablespace_name, t.mb  "TotalMB" 
  2 ,t.mb - nvl(f.mb,0) "UsedMB" 
  3 ,   nvl(f.mb,0) "FreeMB" 
  4 ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% Used" 
  5 ,t.ext "Ext" 
  6 , 
'|'||rpad(lpad('#',ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*20),'#'),20,' 
')||'|' "Used" 
  7  FROM 
  8 ( 
  9   select tablespace_name, trunc(sum(bytes)/1048576) MB 
 10 from dba_free_space 
 11group by tablespace_name 
 12   union all 
 13   select tablespace_name, trunc(sum(bytes_free)/1048576) MB 
 14 from v$temp_space_header 
 15group by tablespace_name 
 16  ) f, 
 17 (select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext 
 18from dba_data_files 
 19   group by tablespace_name 
 20  union all 
 21  select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext 
 22from dba_temp_files 
 23   group by tablespace_name 
 24  ) t 
 25 WHERE t.tablespace_name = f.tablespace_name (+) 
 26   AND t.tablespace_name not in (select tablespace_name from dba_tablespaces 
where contents in ('TEMPORARY','UNDO')) 
 27 ORDER BY t.tablespace_name; 

 SYSTEM:@O11GR2SE:SQL>@t

TABLESPACE_NAME   TotalMB UsedMB FreeMB % Used Ext Used
-- -- -- -- -- --- 
--
EXAMPLE   313 3927413% YES |### 
|
STATSPACK 372355 1796% YES 
||
SYSAUX580537 4393% YES 
|### |
SYSTEM   1760   1721 3998% YES 
||
TS_TESTE  363346 1796% YES 
||
USERS1297   1235 6296% YES 
||

6 linhas selecionadas.

==> Okdoc... Bem, pelo que entendi a tua dúvida decorre primeiro do fato de a 
coluna "% Used" ser o resultado de uma expressão, o que o Oracle não deixa usar 
em GROUP BY, em WHERE A solução para isso é simplesmente ter um query 
EXTERNA, que use na cláusula de FROM a query original, assim 'materializando' 
as expressões O segundo ponto que imagino te  pegou foi o FATO de que essa 
coluna é uma CONTA/expressão numérica CONCATENADA com um caracter '%' : 
necessariamente se vc concatena uma string com uma conta o resultado é string, 
pra vc poder restringir com >= vc TEM que converter de volta pra número, assim :

SYSTEM:@O11GR2SE:SQL>get t.sql
  1  select *
  2  from
  3 (
  4 SELECT t.tablespace_name, t.mb  "TotalMB"
  5 ,t.mb - nvl(f.mb,0) "UsedMB"
  6 ,   nvl(f.mb,0) "FreeMB"
  7 ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% 
Used"
  8 ,t.ext "Ext"
  9

[oracle_br] Re: Ajuda query

2018-07-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
INCLUSIVE, num teste rápido aqui me parece que esse teu script tá furando em 
relação à temp usage - veja que retirei a condição extra de WHERE :

SYSTEM:@O11GR2SE:SQL>get t
  1  SELECT t.tablespace_name, t.mb  "TotalMB"
  2 ,t.mb - nvl(f.mb,0) "UsedMB"
  3 ,   nvl(f.mb,0) "FreeMB"
  4 ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% 
Used"
  5 ,t.ext "Ext"
  6 , 
'|'||rpad(lpad('#',ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*20),'#'),20,' 
')||'|' "Used"
  7  FROM
  8 (
  9   select tablespace_name, trunc(sum(bytes)/1048576) MB
 10 from dba_free_space
 11group by tablespace_name
 12   union all
 13   select tablespace_name, trunc(sum(bytes_free)/1048576) MB
 14 from v$temp_space_header
 15group by tablespace_name
 16  ) f,
 17 (select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext
 18from dba_data_files
 19   group by tablespace_name
 20  union all
 21  select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext
 22from dba_temp_files
 23   group by tablespace_name
 24  ) t
 25 WHERE t.tablespace_name = f.tablespace_name (+)
 26   AND t.tablespace_name not in (select tablespace_name from 
dba_tablespaces where contents in ('TEMPORARY','UNDO'))
 27 ORDER BY t.tablespace_name
 28* ;
SYSTEM:@O11GR2SE:SQL>

==> aí, num banco de teste meu, onde SÓ EU ESTOU CONECTADO, executo ele :

SYSTEM:@O11GR2SE:SQL>@t

TABLESPACE_NAME   TotalMB UsedMB FreeMB % Used Ext Used
-- -- -- -- -- --- 
--
EXAMPLE   313 3927413% YES |### 
|
STATSPACK 373356 1796% YES 
||
SYSAUX580540 4094% YES 
|### |
SYSTEM   1760   1721 3998% YES 
||
TS_TESTE  363346 1796% YES 
||
USERS1297   1235 6296% YES 
||

6 linhas selecionadas.


>>> OLHA AGORA : vou consumir algum espaço temp , no caso criando uma GTT 
'grande' :

SCOTT:@O11GR2SE:SQL>CREATE GLOBAL TEMPORARY TABLE a
  2  ON COMMIT PRESERVE ROWS
  3  AS
  4  select * from all_objects;

Tabela criada.

SCOTT:@O11GR2SE:SQL>


===>> Isso NÂO É MOSTRADO no teu script :

SYSTEM:@O11GR2SE:SQL>@t

TABLESPACE_NAME   TotalMB UsedMB FreeMB % Used Ext Used
-- -- -- -- -- --- 
--
EXAMPLE   313 3927413% YES |### 
|
STATSPACK 373356 1796% YES 
||
SYSAUX580540 4094% YES 
|### |
SYSTEM   1760   1721 3998% YES 
||
TS_TESTE  363346 1796% YES 
||
USERS1297   1235 6296% YES 
||

6 linhas selecionadas.

SYSTEM:@O11GR2SE:SQL>

===> mas o espaço ESTÁ SIM CONSUMIDO :

SYSTEM:@O11GR2SE:SQL>select * from v$sort_segment;

TABLESPACE_NAME SEGMENT_FILE SEGMENT_BLOCK EXTENT_SIZE 
CURRENT_USERS TOTAL_EXTENTS TOTAL_BLOCKS USED_EXTENTS
---  - --- 
- -  
USED_BLOCKS FREE_EXTENTS FREE_BLOCKS ADDED_EXTENTS EXTENT_HITS FREED_EXTENTS 
FREE_REQUESTS   MAX_SIZE MAX_BLOCKS MAX_USED_SIZE
---  --- - --- - 
- -- -- -
MAX_USED_BLOCKS MAX_SORT_SIZE MAX_SORT_BLOCKS RELATIVE_FNO
--- - --- 
TEMP   0 0 128  
   128  3584   7
896   212688 0   8 0
 0 28   3584 7
896 7 8960


SYSTEM:@O11GR2SE:SQL>

==>> OKDOC ??? Cuidado então antes de implementar isso num mecanismo de 
monitoração em PROD

[]s

  Chiappa

Re: [oracle_br] Re: Ajuda query

2018-07-04 Por tôpico Rafael Mendonca raffaell.t...@yahoo.com [oracle_br]
 Muito obrigado pela ajuda Chiappa.
Só para complementar, essa query foi retirada do blog do Tanel Poder. Todos os 
scripts que ele disponibiliza foi ele mesmo quem criou. Em relação a UNDO e 
TEMP, tinha adicionado a consulta para excluir as duas tablespaces da query:

AND t.tablespace_name not in (select tablespace_name from dba_tablespaces where 
contents in ('TEMPORARY','UNDO'))

Já possuo as queries que fazem o monitoramento do UNDO e da TEMPObrigado.Em 
quarta-feira, 4 de julho de 2018 13:55:57 BRT, jlchia...@yahoo.com.br 
[oracle_br]  escreveu:  
 
     
Blz ? Então, antes de tar a sua resposta, uma Obs : tenha ** certeza ** que a 
lógica implementada nesse tal script aí está correta principalmente no tocante 
à tablespace de UNDO e tablespace TEMP - como Acredito que vc deve saber, o 
espaço usado REAL na tablespace de UNDO vc deve consultar na V$TRANSACTION e o 
espaço REAL em uso na temp tablespace vc consulta na 
V$SORT_USAGE/V$SORT_SEGMENT Outra coisa é CUIDADO ao calcular %used e %free 
em datafiles auto-extensíveis : como vc sabe, o valor máximo de extensão é um 
limite FUTURO, a ser imposto AO SISTEMA OPERACIONAL não agora mas apenas QUANDO 
a tablespace crescer.. Assim, então em tese vc deveria SOMAR os autoextensíveis 
todos, verificar quanto vc tem livre em disco no sistema operacional e o espaço 
livre ** REAL ** seria a diferença desses dois...

 Muito bem, aviso dado vamos à resposta : primeiro vamos executar a tua query 
sem alterações :
 
SYSTEM:@O11GR2SE:SQL>get t.sql
  1 SELECT t.tablespace_name, t.mb  "TotalMB" 
  2 ,    t.mb - nvl(f.mb,0) "UsedMB" 
  3 ,   nvl(f.mb,0) "FreeMB" 
  4 ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% Used" 
  5 ,    t.ext "Ext" 
  6 , 
'|'||rpad(lpad('#',ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*20),'#'),20,' 
')||'|' "Used" 
  7  FROM 
  8 ( 
  9   select tablespace_name, trunc(sum(bytes)/1048576) MB 
 10 from dba_free_space 
 11    group by tablespace_name 
 12   union all 
 13   select tablespace_name, trunc(sum(bytes_free)/1048576) MB 
 14 from v$temp_space_header 
 15    group by tablespace_name 
 16  ) f, 
 17 (select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext 
 18    from dba_data_files 
 19   group by tablespace_name 
 20  union all 
 21  select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext 
 22    from dba_temp_files 
 23   group by tablespace_name 
 24  ) t 
 25 WHERE t.tablespace_name = f.tablespace_name (+) 
 26   AND t.tablespace_name not in (select tablespace_name from dba_tablespaces 
where contents in ('TEMPORARY','UNDO')) 
 27 ORDER BY t.tablespace_name; 

 SYSTEM:@O11GR2SE:SQL>@t

TABLESPACE_NAME   TotalMB UsedMB FreeMB % Used Ext Used
-- -- -- -- -- --- 
--
EXAMPLE   313 39    274    13% YES |### 
    |
STATSPACK 372    355 17    96% YES 
||
SYSAUX    580    537 43    93% YES 
|### |
SYSTEM   1760   1721 39    98% YES 
||
TS_TESTE  363    346 17    96% YES 
||
USERS    1297   1235 62    96% YES 
||

6 linhas selecionadas.

==> Okdoc... Bem, pelo que entendi a tua dúvida decorre primeiro do fato de a 
coluna "% Used" ser o resultado de uma expressão, o que o Oracle não deixa usar 
em GROUP BY, em WHERE A solução para isso é simplesmente ter um query 
EXTERNA, que use na cláusula de FROM a query original, assim 'materializando' 
as expressões O segundo ponto que imagino te  pegou foi o FATO de que essa 
coluna é uma CONTA/expressão numérica CONCATENADA com um caracter '%' : 
necessariamente se vc concatena uma string com uma conta o resultado é string, 
pra vc poder restringir com >= vc TEM que converter de volta pra número, assim :

SYSTEM:@O11GR2SE:SQL>get t.sql
  1  select *
  2  from
  3 (
  4 SELECT t.tablespace_name, t.mb  "TotalMB"
  5 ,    t.mb - nvl(f.mb,0) "UsedMB"
  6 ,   nvl(f..mb,0) "FreeMB"
  7 ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% 
Used"
  8 ,    t.ext "Ext"
  9 , 
'|'||rpad(lpad('#',ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*20),'#'),20,' 
')||'|' "Used"
 10  FROM
 11 (
 12   select tablespace_name, trunc(sum(bytes)/1048576) MB
 13 from dba_free_space
 14    group by tablespace_name
 15   union all
 16   select tablespace_name, 

[oracle_br] Re: Ajuda query

2018-07-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Blz ? Então, antes de tar a sua resposta, uma Obs : tenha ** certeza ** que a 
lógica implementada nesse tal script aí está correta principalmente no tocante 
à tablespace de UNDO e tablespace TEMP - como Acredito que vc deve saber, o 
espaço usado REAL na tablespace de UNDO vc deve consultar na V$TRANSACTION e o 
espaço REAL em uso na temp tablespace vc consulta na 
V$SORT_USAGE/V$SORT_SEGMENT Outra coisa é CUIDADO ao calcular %used e %free 
em datafiles auto-extensíveis : como vc sabe, o valor máximo de extensão é um 
limite FUTURO, a ser imposto AO SISTEMA OPERACIONAL não agora mas apenas QUANDO 
a tablespace crescer.. Assim, então em tese vc deveria SOMAR os autoextensíveis 
todos, verificar quanto vc tem livre em disco no sistema operacional e o espaço 
livre ** REAL ** seria a diferença desses dois...

 Muito bem, aviso dado vamos à resposta : primeiro vamos executar a tua query 
sem alterações :
 
SYSTEM:@O11GR2SE:SQL>get t.sql
  1 SELECT t.tablespace_name, t.mb  "TotalMB" 
  2 ,t.mb - nvl(f.mb,0) "UsedMB" 
  3 ,   nvl(f.mb,0) "FreeMB" 
  4 ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% Used" 
  5 ,t.ext "Ext" 
  6 , 
'|'||rpad(lpad('#',ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*20),'#'),20,' 
')||'|' "Used" 
  7  FROM 
  8 ( 
  9   select tablespace_name, trunc(sum(bytes)/1048576) MB 
 10 from dba_free_space 
 11group by tablespace_name 
 12   union all 
 13   select tablespace_name, trunc(sum(bytes_free)/1048576) MB 
 14 from v$temp_space_header 
 15group by tablespace_name 
 16  ) f, 
 17 (select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext 
 18from dba_data_files 
 19   group by tablespace_name 
 20  union all 
 21  select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext 
 22from dba_temp_files 
 23   group by tablespace_name 
 24  ) t 
 25 WHERE t.tablespace_name = f.tablespace_name (+) 
 26   AND t.tablespace_name not in (select tablespace_name from dba_tablespaces 
where contents in ('TEMPORARY','UNDO')) 
 27 ORDER BY t.tablespace_name; 

 SYSTEM:@O11GR2SE:SQL>@t

TABLESPACE_NAME   TotalMB UsedMB FreeMB % Used Ext Used
-- -- -- -- -- --- 
--
EXAMPLE   313 3927413% YES |### 
|
STATSPACK 372355 1796% YES 
||
SYSAUX580537 4393% YES 
|### |
SYSTEM   1760   1721 3998% YES 
||
TS_TESTE  363346 1796% YES 
||
USERS1297   1235 6296% YES 
||

6 linhas selecionadas.

==> Okdoc... Bem, pelo que entendi a tua dúvida decorre primeiro do fato de a 
coluna "% Used" ser o resultado de uma expressão, o que o Oracle não deixa usar 
em GROUP BY, em WHERE A solução para isso é simplesmente ter um query 
EXTERNA, que use na cláusula de FROM a query original, assim 'materializando' 
as expressões O segundo ponto que imagino te  pegou foi o FATO de que essa 
coluna é uma CONTA/expressão numérica CONCATENADA com um caracter '%' : 
necessariamente se vc concatena uma string com uma conta o resultado é string, 
pra vc poder restringir com >= vc TEM que converter de volta pra número, assim :

SYSTEM:@O11GR2SE:SQL>get t.sql
  1  select *
  2  from
  3 (
  4 SELECT t.tablespace_name, t.mb  "TotalMB"
  5 ,t.mb - nvl(f.mb,0) "UsedMB"
  6 ,   nvl(f.mb,0) "FreeMB"
  7 ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% 
Used"
  8 ,t.ext "Ext"
  9 , 
'|'||rpad(lpad('#',ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*20),'#'),20,' 
')||'|' "Used"
 10  FROM
 11 (
 12   select tablespace_name, trunc(sum(bytes)/1048576) MB
 13 from dba_free_space
 14group by tablespace_name
 15   union all
 16   select tablespace_name, trunc(sum(bytes_free)/1048576) MB
 17 from v$temp_space_header
 18group by tablespace_name
 19  ) f,
 20 (select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext
 21from dba_data_files
 22   group by tablespace_name
 23  union all
 24  select tablespace_name, trunc(sum(bytes)/1048576) MB, 
max(autoextensible) ext
 25from dba_temp_files
 26   group by tablespace_name
 27  ) t
 28 WHERE t.tablespace_name = f.tablespace_name (+)
 29   AND 

Re: [oracle_br] Re: Ajuda query

2014-09-24 Por tôpico Rafael Mendonca raffaell.t...@yahoo.com [oracle_br]
Obrigado Chiappa.

Mas a última query para descobrir quais usuários nunca logaram no database, 
rodou por mais de 10 horas e acabei cancelando a consulta.

 select * from dba_users where username not in
 (select distinct username from dba_audit_session);

No mais, obrigado pelas dicas.



Em ter, 23/9/14, jlchia...@yahoo.com.br [oracle_br] 
oracle_br@yahoogrupos.com.br escreveu:

 Assunto: [oracle_br] Re: Ajuda query
 Para: oracle_br@yahoogrupos.com.br
 Data: Terça-feira, 23 de Setembro de 2014, 15:43
 
 
  
 
 
 
   
 
 
 
   
   
   Bem, primeiro que fique ** CLARO ** que o que vamos
 comentar aqui é válido SE a apenas ** SE ** o database em
 questão está rodando com a opção de audit session
 ligada, okdoc ?? Isso é default nas versões mais recentes
 mas Não Necessariamente vc pode assumir que está ativa no
 seu database, ok ??
   Isso posto :
 consultar os logons dos usuários é simplérrimo :
 
 select username, timestamp
 from dba_audit_session where action_name = 'LOGON'
 group by username;
 
 para
 alterar para trazer só o último logon (de modo que se
 possa comparar com a data de hoje e ver se já passou um
 ano, que é o que vc vai querer) é simplesmente :
   
 select username,
 max(timestamp) ultimo_logon from dba_audit_session where
 action_name = 'LOGON' group by username;
 
 aí, para poder colocar uma
 cláusula de filtro na coluna de último logon, eu faria
 assim :
 
 select * from (
    select username, max(timestamp)
 ultimo_logon from dba_audit_session where action_name =
 'LOGON' group by username
    )
  where (sysdate - ultimo_logon)  365;
  
   Blz ? Taí Eu só
 diria para vc ** não ** listar os usuários que não
 estejam presentes na DBA_AUDIT_SESSION, pois não tem como
 saber se  usuário realmente era pra logar mas nunca logou
 OU se é um schema criado só pra conter objetos, e que
 assim nunca deveria ter logado no banco mesmo...
    No máximo, o que eu faria se fosse vc,
 além da query acima eu faria uma outra, para mostrar
 usuários que nunca logaram :
    
 select * from dba_users where username not in
 (select distinct username from dba_audit_session);
 
  == MAS depois confira
 essa lista com o pessoal da aplicação, para tentar
 identificar quais desses usuários que nunca logaram são
 simples repositórios e quais realmente são usuários que
 iriam logar no database mas nunca o fizeram ...
 
   []s
   
     Chiappa
 
 
  
 
 
 
 
 
 
 #yiv7667436662 #yiv7667436662 --
   #yiv7667436662ygrp-mkp {
 border:1px solid #d8d8d8;font-family:Arial;margin:10px
 0;padding:0 10px;}
 
 #yiv7667436662 #yiv7667436662ygrp-mkp hr {
 border:1px solid #d8d8d8;}
 
 #yiv7667436662 #yiv7667436662ygrp-mkp #yiv7667436662hd {
 color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px
 0;}
 
 #yiv7667436662 #yiv7667436662ygrp-mkp #yiv7667436662ads {
 margin-bottom:10px;}
 
 #yiv7667436662 #yiv7667436662ygrp-mkp .yiv7667436662ad {
 padding:0 0;}
 
 #yiv7667436662 #yiv7667436662ygrp-mkp .yiv7667436662ad p {
 margin:0;}
 
 #yiv7667436662 #yiv7667436662ygrp-mkp .yiv7667436662ad a {
 color:#ff;text-decoration:none;}
 #yiv7667436662 #yiv7667436662ygrp-sponsor
 #yiv7667436662ygrp-lc {
 font-family:Arial;}
 
 #yiv7667436662 #yiv7667436662ygrp-sponsor
 #yiv7667436662ygrp-lc #yiv7667436662hd {
 margin:10px
 0px;font-weight:700;font-size:78%;line-height:122%;}
 
 #yiv7667436662 #yiv7667436662ygrp-sponsor
 #yiv7667436662ygrp-lc .yiv7667436662ad {
 margin-bottom:10px;padding:0 0;}
 
 #yiv7667436662 #yiv7667436662actions {
 font-family:Verdana;font-size:11px;padding:10px 0;}
 
 #yiv7667436662 #yiv7667436662activity {
 
background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}
 
 #yiv7667436662 #yiv7667436662activity span {
 font-weight:700;}
 
 #yiv7667436662 #yiv7667436662activity span:first-child {
 text-transform:uppercase;}
 
 #yiv7667436662 #yiv7667436662activity span a {
 color:#5085b6;text-decoration:none;}
 
 #yiv7667436662 #yiv7667436662activity span span {
 color:#ff7900;}
 
 #yiv7667436662 #yiv7667436662activity span
 .yiv7667436662underline {
 text-decoration:underline;}
 
 #yiv7667436662 .yiv7667436662attach {
 clear:both;display:table;font-family:Arial;font-size:12px;padding:10px
 0;width:400px;}
 
 #yiv7667436662 .yiv7667436662attach div a {
 text-decoration:none;}
 
 #yiv7667436662 .yiv7667436662attach img {
 border:none;padding-right:5px;}
 
 #yiv7667436662 .yiv7667436662attach label {
 display:block;margin-bottom:5px;}
 
 #yiv7667436662 .yiv7667436662attach label a {
 text-decoration:none;}
 
 #yiv7667436662 blockquote {
 margin:0 0 0 4px;}
 
 #yiv7667436662 .yiv7667436662bold {
 font-family:Arial;font-size:13px;font-weight:700;}
 
 #yiv7667436662 .yiv7667436662bold a {
 text-decoration:none;}
 
 #yiv7667436662 dd.yiv7667436662last p a {
 font-family:Verdana;font-weight:700;}
 
 #yiv7667436662 dd.yiv7667436662last p span {
 margin-right:10px;font-family:Verdana;font-weight

Re: [oracle_br] Re: Ajuda query

2014-09-24 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Provavelmente vc deve ter presente nesse database dados de auditoria de 
mito tempo atrás, ocupando espaço, ou talvez vc não tenha estatísticas 
adequadas nas tabelas do sistema e por isso o banco esteja gerando um full 
table scan nalguma tabela interna grande .
 Verifique a possibilidade de coletar estatísticas nas tabelas internas do 
sistema, e se não resolver, experimente um select distinct username na 
dba_audit_session : se um select simples for razoavelmente bem, crie uma tabela 
sua com essas dados e use-a na query

 []s

  Chiappa

[oracle_br] Re: Ajuda query

2014-09-23 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Bem, primeiro que fique ** CLARO ** que o que vamos comentar aqui é válido SE a 
apenas ** SE ** o database em questão está rodando com a opção de audit session 
ligada, okdoc ?? Isso é default nas versões mais recentes mas Não 
Necessariamente vc pode assumir que está ativa no seu database, ok ??
  Isso posto : consultar os logons dos usuários é simplérrimo :

select username, timestamp from dba_audit_session where action_name = 'LOGON' 
group by username;

para alterar para trazer só o último logon (de modo que se possa comparar com a 
data de hoje e ver se já passou um ano, que é o que vc vai querer) é 
simplesmente :
  
select username, max(timestamp) ultimo_logon from dba_audit_session where 
action_name = 'LOGON' group by username;

aí, para poder colocar uma cláusula de filtro na coluna de último logon, eu 
faria assim :

select * from (
   select username, max(timestamp) ultimo_logon from dba_audit_session where 
action_name = 'LOGON' group by username
   )
 where (sysdate - ultimo_logon)  365;
 
  Blz ? Taí Eu só diria para vc ** não ** listar os usuários que não 
estejam presentes na DBA_AUDIT_SESSION, pois não tem como saber se  usuário 
realmente era pra logar mas nunca logou OU se é um schema criado só pra conter 
objetos, e que assim nunca deveria ter logado no banco mesmo...
   No máximo, o que eu faria se fosse vc, além da query acima eu faria uma 
outra, para mostrar usuários que nunca logaram :
   
select * from dba_users where username not in (select distinct username from 
dba_audit_session);

 == MAS depois confira essa lista com o pessoal da aplicação, para tentar 
identificar quais desses usuários que nunca logaram são simples repositórios e 
quais realmente são usuários que iriam logar no database mas nunca o fizeram ...

  []s
  
Chiappa

[oracle_br] Re: Ajuda - Query Range de datas para Range de datas

2014-08-06 Por tôpico jlchia...@yahoo.com.br [oracle_br]
  Bem, só no verbal sem nenhum exemplinho é meio difícil de pensar, mas ao que 
entendi vc quer ter dois ranges de datas e quer comparar esses dois ranges, e 
verificar se há intersecção entre eles ? Se sim, dá um look em 
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:4921012347969
 que vc encontra algumas possibilidades diversas

   []s

 Chiappa

Re: [oracle_br] Re: Ajuda - Query Range de datas para Range de datas

2014-08-06 Por tôpico Saulo Brito saulo.brit...@gmail.com [oracle_br]
Fala Chiappa, obrigado pela resposta

Bom, minha especificação mudou de uma hora para outra e tive que fazer de
outra forma ... e já fiz .. hehe

Conhecia este link e tenho uma função parecida com ele que no caso verifica
em um range de datas se existem registros que estão dentro daquela
situação. Tentei adapta-lo só que não deu muito certo.

---

O problema com exemplos era:

supondo que na minha tabela tem:

id  | dt_ini   | dt_fim

1   | 01/01/2014  |  15/01/2014
2   | 16/01/2014  |  18/01/2014
3   | 21/01/2014  |  25/01/2014

supondo que tenho os ranges passados por parâmetros

a) 01/01/2014 e 20/01/2014
b) 15/01/2014 e 21/01/2014
c) 22/01/2014 e 25/01/2014

A query do exemplo atenderia se fossem válidos furos entre as datas, ou
seja, funcionaria para as 3 letras (a), (b) e (c) que retornariam os
registros 1 - 2,  1 - 2 e - 3 respectivamente.
Só que a única correta é a (c) que traz o registro 3 sem furos na data
especificada

agora supondo que tenho

a) 02/01/2014 e 18/01/2014
b) 02/01/2014 e 19/01/2014

Então minha tela azul estava em trazer sem furos os registros.
No exemplo de cima, sei que a letra (a) me traria os registros -1 e -2. Já
a letra (b) não me deveria trazer nenhum porque não se tem um range
completo na base que compreende 02/01 até 19/01... faltaria 1 dia.

Não sei se fui claro, se estou viajando. Talvez tenha alguma forma simples
de fazer que eu ainda não sei qual é.



Como falei no inicio minha especificação mudou e acabou me salvando de cair
nesse caso, mas segue o exemplo onde acho que consegui explicar e mesmo não
tendo que fazer, gostaria de tirar a dúvida de como faria. kkk

Obrigado!


Em 6 de agosto de 2014 14:59, jlchia...@yahoo.com.br [oracle_br] 
oracle_br@yahoogrupos.com.br escreveu:



   Bem, só no verbal sem nenhum exemplinho é meio difícil de pensar, mas ao
 que entendi vc quer ter dois ranges de datas e quer comparar esses dois
 ranges, e verificar se há intersecção entre eles ? Se sim, dá um look em
 https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:4921012347969
 que vc encontra algumas possibilidades diversas

[]s

  Chiappa