Opa, no final do item 4) ficou faltando uma parte do texto , ele deveria estar :
" ... Devo dizer também que a opção de se ter uma única tablespace TB_USUARIOS (digamos) também Poderia Sim te servir, pois (SE criada corretamente, com extent size correto, etc) após o drop de um usuário e seus objetos , a recriação de um novo na mesma tablespace VAI SIM reusar o espaço anteriormente em uso, sim... " []s Chiappa --- Em oracle_br@yahoogrupos.com.br, José Laurindo <jlchia...@...> escreveu > > Colega, ao que parece ninguém te respondeu, vou tentar o fazer : de cara > porém tenho que avisar que é ** Impossível ** te dar um passo-a-passo exato e > preciso, não há tempo nem espaço disponíveis, e nem é esse o foco do Grupo - > sendo assim, vou dar DICAS, diretivas, que depois vc ** TEM QUE ** > complementar estudando os manuais e bons livros de referência, pra poder > entender do que estou falando...Lembro também que a esmagadora maioria das > interfaces gráficas Não Te Dão a informação completa, elas 'escondem' parte > da info, então vou nesta resposta sempre sugerir a Consulta nas fontes Reais > de informação (tabelas/views internas do Sistema) onde cabível. Segue : > > 1) extents : o conceito fundamental é que quando o bd Oracle precisa alocar > espaço, ele aloca ** não ** em bytes, nem em blocos, mas sim aloca um > 'pedação' de blocos contíguos em disco, o chamado EXTENT - o tamanho de cada > extent é definido na criação dos objetos (tabelas/índices/o que for), se não > especificado usa o default da tablespace. Isso n > os leva à distorções do tipo, tabela minúscula com extent size enorme, esse > espaço VAI ser alocado e o RESIZE *** Não tem como *** diminuir, não tem como > quebrar um extent, ele tem o tamanho que tem...Num caso desses, só recriando > o objeto, veja 3) para opções. Consulte a DBA_EXTENTS/DBA_SEGMENTS para as > tablespaces em questão, veja se os tamanhos são razoáveis em face dos dados > > 2) tablespace LMT ou DMT : derivado do fato acima, quando o espaço é liberado > é o EXTENT que é marcado como livre, e quem precisar de espaço adicional vai > tentar usar extents também - sendo assim, Óbvio, se vc tiver um espaço livre > de X bytes em extents liberados ** mas ** o objeto sendo aumentado requer Y > bytes como tamanho de extent, esse extent livre Não Vai Ser re-usado... Se vc > estiver usando as (horrivelmente velhas e não-recomendadas) tablespaces > gerenciadas pro Dicionário (DMT) vc pode ter valores os mais esdrúxulos e > DIFERENTES para tamanhos de extents, podendo levar ao cenário descrito. Já SE > vc estiver usando as modernas e Recomendadas tablespaces gerenciadas por > bitmap local (LMT), com elas OU vc tem extents sempre iguais (usando a opção > de UNIFORM SIZE na criação) , OU vc tem extents de Poucos tamanhos diferentes > e sempre múltiplos entre si (usando a opção de AUTOALLOCATE/gerenciamente > automático) na criação, consulte a DBA_TABLESPACES pra ver o que vc tem > hoje... A recomendação quanto a isso é, SE vc sabe exatamente o tamanho que > vai usar, avalie a hipótese de tablespace LMT uniform size, se não > souber/tiver como saber (ex, são dados 'aleatórios', enviados pelos usuários, > digamos), avalie AUTOALLOCATE > > 3) sim, é ** péssimo ** deixar se criar o que for que não seja interno na > tablespace SYSTEM, vc terá que corrigir isso re-criando os objetos, mas usar > o exp como vc pensa é TOTALMENTE DESNECESSÁRIO : gerar um dump file tem > sentido se vc quer recriar o objeto em OUTRO DATABASE, sendo no mesmo banco > vc tem Diversas outras opções, como o comando ALTER TABLE nnn MOVE/ALTER > INDEX nn REBUILD, ou o DBMS_REDEFINE, ou o CREATE nn AS (select dos dados > atuais), cheque as docs pra sintaxes e restrições > > 4) absolutamente ****** NÃO É VERDADE ****** que após a exclusão de usuários > (supondo DROP USER, com a opção PURGE se for bd 10g ou superior) deixe espaço > não usável : SENDO o extent de tamanho correto, o espaço dentro da tablespace > vai ser SIM re-usado.... > Outra coisa que pode acontecer no cenário que vc descreve (de cada usuário > ter a sua tablespace) é que, quando vc dropa o usuário, a tablespace que ele > usava NÃO É DROPADA automaticamente, o espaço em disco continua sendo > alocado, vc TEM que fazer a Remoção dos datafiles, normalmente com o comando > DROP TABLESPACE nnn INCLUDING DATAFILES; , cheque o manual de SQL Reference > para detalhes. > Devo dizer também que a opção de se ter uma única tablespace TB_USUARIOS > (digamos) > > 5) uma tablespace tempo pra cada usuário **** NÃO FAZ O MENOR SENTIDO ****, > pois o comportamento Natural delas é Automaticamente liberar o espaço quando > do COMMIT, o reuso é Automático e Natural : as views V$SORT_SEGMENT e > V$SORT_USAGE mostram o consumo/liberação... > > 6) SE vc tem espaço limitado em disco, as opções de Compactação vão ser > Cruciais, e na sua maioria elas dependem da VERSÃO DE BANCO, que vc pra > variar não cita : cheque as docs da sua versão > > 7) controle de espaço dentro dos blocos : uma vez alocado o extent, cada > registro vai sendo gravado nos blocos do extent, começando pelo primeiro > bloco, depois qundo esse enche o segundo, etc - além disso vc tem como > controlar o espaço reservado em cada bloco para futuros UPDATEs, numa > situação de espaço ultra-limitado é Crítico que isso esteja ajustado > corretamente, veja as opções de PCTFREE/PCTUSED e STORAGE para a > criação/recriação de objetos. > > 8) Finalmente, embora como disse acima não é aplicável no seu caso afaik o > exp, só respondendo : é *** IMPOSSÍVEL *** se estimar com alguma exatidão o > tamanho da importação a partir do tamanho do dump file, pelo seguinte : o > dump file (pode comprovar abrindo-o num editor binário) é composto por > INSTRUÇÕES, tipo : > > INSERT INTO minhatabeladeteste values(1, 'Linha1'); > > a linha acima ocupou 52 bytes ** mas ** os dados '1' ocuparia 1 byte > (digamos) e 'Linha 1' ocuparia 8, no total coisa de dez bytes contra os 52 > da instrução... Ou ainda é FÁCIL termos situação onde os dados ocupam MAIS > que o texto do DML contido no dump file... Em resumo, **** NÃO DÁ *** pra > estimar a partir do tamanho do dump file, yes ??? A Única maneira mais > confiável de se estimar isso é importar um pedaço apenas dos dados e > extrapolar, OU então totalizar o tamanho dos dados na Origem, o espaço > necessário no Destino deve ser similar - não digo IDÊNTICO porque como disse > acima há opções de Compactação, de uso de espaço nos blocos, etc, que PODEM > estar em efeito num banco e não em outro... > > []s > > Chiappa > > > --- Em oracle_br@yahoogrupos.com.br, "Israel Borges" <israelborgess@> escreveu > > > > Bom dia amigos, vou explicar a minha situação, e ja lhes digo que tenho > > muito pouco conhecimento em Oracle, por isso estou aqui pedindo a ajuda de > > vocês. > > > > Assumi a empresa a um mês, e tenho um servidor suse com o oracle 10g > > instalado e funcionando. A empresa é desenvolvedora de sistemas, portanto > > possui vários usuários criados. Os usuários foram criados todos com a mesma > > tablespace temporary. Em relação a default tablespace foi criado uma e > > vários usuarios utilizam a mesma. Alguns usuários usam a tablespace em que > > o oracle útiliza para gerencia interna a SYSTEM e SYSAUX. Em suma, tenho > > dois problemas. > > 1) Com a criação e exclusão de usuários, o espaço alocado das tablespaces > > assumiram um tamanho muito grande porém com pouca utilização. Portanto > > preciso reduzir esse espaço que a tablespace assumiu. Creio que um resize > > resolveria esse meu problema, porém ai surge o problema numero 2. > > 2) Com o resize, temporariamente resolveria meu problema, se eu fosse > > continuar com o banco como está hoje. Porém, a empresa precisa duplicar > > todos os usuários, e eu não sei qual é o real espaço ocupado dos usuarios > > em cada tablespace. Portanto não posso falar que o meu disco rigigo, hoje > > não suporta esse procedimento. Para resolver o problema numero 1 em > > definitivo, pensei em criar uma tablespace dos datafile e uma tablespace > > temporary para cada usuário. Assim com as diversas criações e exclusões de > > usuários, não precisaria me preocupar com esse acumulo de espaço alocado > > sem uso novamente. > > > > PROBLEMA: No intuito de executar a resolução descrita no problema 2. Tenho > > também dúvidas de como proceder. Fiz um exp de todos os usuários do banco > > de dados. > > exp usuario/se...@database file=usuario.dmp > > usuario.dmp com o tamanho de 1,6G. > > Qual deve ser o tamanho da tablespace datafile e temporary que eu deveria > > criar para comportar esse dump? > > > > > > Bom, desculpa pelas várias duvidas e questionamentos, porém tentei > > descrever o que ja pensei sobre o assunto. Aguardo auxilio. > > > > Atenciosamente, > > > > Israel Borges. > > >