Mais uma aula do Mestre Chiappa !!!!

Thiago M. Zerbinato
Oracle Certified Professional
Linux Professional desde 1997
Ribeirao Preto / SP
---
http://thiagomz.hpg.com.br
Linux User  #286429
Debian User #534

"Primeiro eles o ignoram. Depois riem de voce. Entao eles
o combatem. Ai voce vence"

Mohandas Gandhi


jlchiappa wrote:
> ** Nenhuma ** necessidade de coleta de estatística só pra saber uso 
> de espaço, isso já é AUTOMATICAMENTE registrado nas views do sistema, 
> assim :
> 
> SQL*Plus: Release 9.2.0.5.0 - Production on Seg Jan 9 09:45:20 2006
> 
> Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
> 
> 
> Conectado a:
> Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
> With the Partitioning, Oracle Label Security, OLAP and Oracle Data 
> Mining options
> JServer Release 9.2.0.5.0 - Production
> 
> [EMAIL PROTECTED]:SQL>create tablespace TESTE datafile 'D:\O9IR2\O9IR2
> \TESTE.DBF' size 50m autoextend on;
> 
> Tablespace criado.
> 
> 
> ==> primeiro ponto, DEPENDENDO da versão, o default é tablespace LMT 
> (Local-Managed Tablespace), com extents de tamanho variável 
> controlados pelo sistema, é o meu caso :
> [EMAIL PROTECTED]:SQL>select * from dba_tablespaces where 
> tablespace_name='TESTE';
> 
> TABLESPACE_NAME                        BLOCK_SIZE     
> INITIAL_EXTENT        NEXT_EXTENT        MIN_EXTENTS        
> MAX_EXTENTS       PCT_INCREASE         MIN_EXTLEN STATUS    CONTENTS  
> LOGGING   FOR EXTENT_MAN ALLOCATIO PLU SEGMEN
> ------------------------------ ------------------ ------------------ -
> ----------------- ------------------ ------------------ --------------
> ---- ------------------ --------- --------- --------- --- ---------- -
> -------- --- ------
> TESTE                                        8192              
> 65536                                     1         
> 2147483645                                 65536 ONLINE    PERMANENT 
> LOGGING   NO  LOCAL      SYSTEM    NO  MANUAL
> 
> ==> já que é LMT, de cara em cima da qtdade que vc especificou o 
> banco SUBTRAI 64Kb, pra criar o bitmap de controle : veja que eu 
> especifiquei 50 Mb (ie, 52428800 bytes, coluna BYTES abaixo), só 
> obtive disponível pra mim 52363264 bytes (coluna USER_BYTES) :
> 
> [EMAIL PROTECTED]:SQL>select * from dba_data_files where 
> tablespace_name='TESTE';
> 
> FILE_NAME                                                             
>           FILE_ID TABLESPACE_NAME                             
> BYTES             BLOCKS STATUS          RELATIVE_FNO AUT           
> MAXBYTES          MAXBLOCKS       INCREMENT_BY         
> USER_BYTES        USER_BLOCKS
> -------------------------------------------------------------------- -
> ----------------- ------------------------------ ------------------ --
> ---------------- --------- ------------------ --- ------------------ -
> ----------------- ------------------ ------------------ --------------
> ----
> D:\O9IR2\O9IR2
> \TESTE.DBF                                                            
>  11 TESTE                                    52428800               
> 6400 AVAILABLE                 11 YES        34359721984            
> 4194302                  1           52363264               6392
> 
> ==> vamos ver quanto tenho nunca usado, ie, totalmente disponível :
> 
> [EMAIL PROTECTED]:SQL>l
>   1  select * from dba_free_space
>   2* where tablespace_name='TESTE'
> [EMAIL PROTECTED]:SQL>/
> 
> TABLESPACE_NAME                           FILE_ID           
> BLOCK_ID              BYTES             BLOCKS       RELATIVE_FNO
> ------------------------------ ------------------ ------------------ -
> ----------------- ------------------ ------------------
> TESTE                                          11                  
> 9           52363264               6392                 11
> 
> ==>> exato e perfeito, tenho 52363264 livres, é isso mesmo ... Agora 
> vamos criar um objeto que consome espaço, tabela pra seguir o seu 
> caso :
> 
> [EMAIL PROTECTED]:SQL>create table teste
>   2   (id number)
>   3   tablespace teste
>   4  storage (initial 10m next 1m);
> 
> Tabela criada.
> 
> ==>> Aqui é que entra o CONCEITO-CHAVE pra se entender storage no bd 
> Oracle, que é provavelmente onde vc está falhando : pra ter sempre a 
> maior performance possível em INSERTs, o bd Oracle usa de vários 
> trucões, um deles é : quando vc cria uma objeto de banco que consome 
> espaço em disco (tabela, índice, o que for), nesse EXATO momento, 
> mesmo estando inicialmente vazio, o bd ** IMEDIATAMENTE ** já cria, 
> aloca e reserva dentro da tablespace o espaço inicial (o initial 
> extent). A vantagem disso é que quando chegarem os INSERTs, o espaço 
> JÀ ESTARÁ "formatado", prontinho pra usar... Trucão básico. Vamos ver 
> que é isso mesmo :
> 
> [EMAIL PROTECTED]:SQL>select * from dba_free_space
>   2  where tablespace_name='TESTE';
> 
> TABLESPACE_NAME                           FILE_ID           
> BLOCK_ID              BYTES             BLOCKS       RELATIVE_FNO
> ------------------------------ ------------------ ------------------ -
> ----------------- ------------------ ------------------
> TESTE                                          11               
> 1289           41877504               5112                 11
> 
> é o real aqui, vc mandou o initial extent ser de 10 Mb (ie, 10485760 
> bytes), é isso aí, 52363264 bytes que eu tinha livres, MENOS os 
> 10485760 bytes do initial extent automaticamente criado, resultam em 
> 41877504 bytes livres ...
> 
> Pra vc conferir que é isso mesmo, o extent FOI criado mesmo sem 
> dados  :
> 
> [EMAIL PROTECTED]:SQL>select * from dba_extents where 
> tablespace_name='TESTE';
> 
> OWNER            SEGMENT_NAME                        
> PARTITION_NAME                 SEGMENT_TYPE       
> TABLESPACE_NAME                         EXTENT_ID            
> FILE_ID           BLOCK_ID              BYTES             
> BLOCKS       RELATIVE_FNO
> ---------------- ----------------------------------- -----------------
> ------------- ------------------ ------------------------------ ------
> ------------ ------------------ ------------------ ------------------
>  ------------------ ------------------
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 0                 11                  9            
> 1048576                128                 11
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 1                 11                137            
> 1048576                128                 11
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 2                 11                265            
> 1048576                128                 11
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 3                 11                393            
> 1048576                128                 11
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 4                 11                521            
> 1048576                128                 11
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 5                 11                649            
> 1048576                128                 11
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 6                 11                777            
> 1048576                128                 11
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 7                 11                905            
> 1048576                128                 11
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 8                 11               1033            
> 1048576                128                 11
> SYSTEM           
> TESTE                                                              
> TABLE              TESTE                                           
> 9                 11               1161            
> 1048576                128                 11
> 
> 
> e antes que vc pergunte, porque ele criou 10 extents de 1Mb ?? É que 
> vc pediu por 10 Mb, MAS como mostrado no select anterior da 
> dba_tablespaces, no meu bd se eu não especificar a tablespace é 
> SYSTEM-allocated, é o caso, e esse tipo de tablespace funciona assim, 
> ela primeiro tenta dividir o espaço pedido em 64 Kb, em não dando vai 
> pra 1 Mb, daí pra 64 Mb... No caso, 10 Mb ela dividiu em 10 extents 
> de 1 Mb, é isso.
> 
> ==> Então a sua resposta é : pra vc ver o que está EFETIVAMENTE 
> livre, é consultar a DBA_FREE_SPACE, e pra vc ver o que está 
> reservado, é consultar a DBA_EXTENTS, é isso. A última informação que 
> vc pode querer é, dentro desse espaço reservado, QUANTO já foi 
> efetivamente preenchido com dados/usado, e quanto ainda não ? Isso vc 
> obtém com a package DBMS_SPACE, um script pra a consultar poderia ser 
> o abaixo, que eu adaptei dum original de Tom Kyte, em 
> http://asktom.oracle.com
> 
> []s
> 
>  Chiappa
>  
>  -- ===============================================
>  accept type      prompt "Enter the TYPE of segment to check 
> (i=index, t=table) : "
> accept obj_owner prompt "Enter the OWNER of the object to 
> check .............. : "
> accept obj_name  prompt "Enter the NAME of the object to 
> check ............... : "
> set serveroutput on size 1000000
> set feedback off
> --
> DECLARE
>   v_total_blocks   NUMBER;
>   v_total_bytes    NUMBER;
>   v_unused_blocks  NUMBER;
>   v_unused_bytes   NUMBER;
>   v_file_id        NUMBER;
>   v_block_id       NUMBER;
>   v_last_block     NUMBER;
>   v_used           NUMBER;
>   v_owner          VARCHAR2(12);
>   v_segment        VARCHAR2(80);
>   v_type           VARCHAR2(6);
> 
> BEGIN
>   select DECODE(upper('&type'), 'I', 'INDEX', 'TABLE') into v_type 
> from dual;
>   v_owner   := upper('&obj_owner');
>   v_segment := upper('&obj_name');
>   --
>   DBMS_SPACE.UNUSED_SPACE(v_owner, v_segment, v_type, v_total_blocks, 
> v_total_bytes,
>                                    v_unused_blocks, v_unused_bytes, 
> v_file_id, v_block_id, v_last_block);
>   --
>   DBMS_OUTPUT.PUT_LINE(CHR(10));
>   DBMS_OUTPUT.PUT_LINE('======== Ocupação do Espaço =======');
>   DBMS_OUTPUT.PUT_LINE('Index Name                   = '||v_segment);
>   DBMS_OUTPUT.PUT_LINE('Total Blocks                 
> = '||v_total_blocks);
>   DBMS_OUTPUT.PUT_LINE('Total Bytes                  
> = '||v_total_bytes);
>   DBMS_OUTPUT.PUT_LINE('Unused (Free) Blocks         
> = '||v_unused_blocks);
>   DBMS_OUTPUT.PUT_LINE('Unused (Free) Bytes          
> = '||v_unused_bytes);
>   v_used := v_total_blocks - v_unused_blocks;
>   DBMS_OUTPUT.PUT_LINE('Used Blocks                  = '||v_used);
>   v_used := v_total_bytes - v_unused_bytes;
>   DBMS_OUTPUT.PUT_LINE('Used Bytes                   = '||v_used);
>   DBMS_OUTPUT.PUT_LINE('Last used extents file id    = '||v_file_id);
>   DBMS_OUTPUT.PUT_LINE('Last used extents block id   = '||v_block_id);
>   DBMS_OUTPUT.PUT_LINE('Last used block              
> = '||v_last_block);
>   DBMS_OUTPUT.PUT_LINE
> ('=============================================');
> END;
> /
> set serveroutput off
> set feedback on
> 
> 
> 
> 
> --- Em oracle_br@yahoogrupos.com.br, Marcus Vinicius Miguel Pedro 
> <[EMAIL PROTECTED]> escreveu
> 
>>Olá pessoal, tudo bom?!
>>   
>>  Estou com uma dúvida quanto ao espaço livre nos tablespaces.
>>   
>>  Vamos lá:
>>   
>>  SQL> create tablespace teste
>>  2  datafile '/oracle/oradata13/teste.dbf'
>>  3  size 50m
>>  4  autoextend on;
>>  Tablespace created.
>>   
>>  SQL> create table teste
>>  2  (id number)
>>  3  tablespace teste
>>  4  storage (initial 10m next 1m);
>>  Table created.
>>
>>  Tablespace e tabela criadas. Até aí beleza...
>>   
>>  A questão é, não populei nada ainda na tabela correto? Ou seja, 
> 
> mesmo especificando que a extensão inicial ocupará 10M, fisicamente 
> não há nada de dados na extensão.
> 
>>   
>>  SQL> select bytes/1024/1024 tam_mb,tablespace_name
>>  2  from dba_free_space
>>  3  where tablespace_name='TESTE';
>>
>>  TAM_MB   TABLESPACE_NAME
>>------------     ----------------------------------
>>39.9375     TESTE
>>
>>   
>>  A dúvida é, existe alguma maneira onde eu consiga *realmente* 
> 
> saber quanto de espaço eu tenho ocupado na minha tablespace??! Sei 
> que se rodar o analyze table eu consigo algo, mas não quero e não 
> posso rodar estatísticas...
> 
>>   
>>  Um abraço
>>   
>>  Vinicius
>>   
>>   
>>
>>              
>>---------------------------------
>> Yahoo! doce lar. Faça do Yahoo! sua homepage.
>>
>>[As partes desta mensagem que não continham texto foram removidas]
>>
> 
> 
> 
> 
> 
> 
> 
> --------------------------------------------------------------------------------------------------------------------------
> Atenção! As mensagens deste grupo são de acesso público e de inteira 
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
> --------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________
> Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423  
> Links do Yahoo! Grupos
> 
> 
> 
> 
>  
> 
> 
> 
> __________ NOD32 1.1356 (20060108) Information __________
> 
> This message was checked by NOD32 antivirus system.
> http://www.eset.com
> 
> 
> 

        

        
                
_______________________________________________________ 
Yahoo! doce lar. Faça do Yahoo! sua homepage. 
http://br.yahoo.com/homepageset.html 



--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________
Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a