MigraTI - Soluções em banco de dados

quinta-feira, 4 de junho de 2009

Gerenciando Objetos de Usuários

Quem trabalha a tempo com bancos sabe que este é um problema constante em base de dados onde não há nenhum DBA constantemente efetuando manutenções.

Varias vezes eu detectei em muitos clientes owners gravando seus objetos em varios tablespaces.
Isto alem de desorganizado degride a performance do banco, pois como você poderá criar metricas de I/O sendo que você não sabe onde seus dados estão gravando?
Então para você reorganizar novamente e colocar os objetos nos locais devidos abaixo vai uma solução bem simples para você transferir os dados necessários de uma tablespace para outra.

OBS: Para indicces com lob segments aconselho a usar export Datapump!


Com este select você descobre o que esta sendo gravado na tablespace!
select owner,segment_type,segment_name,bytes from dba_segments where tablespace_NAME = 'TABLESPACE_NAME' ORDER BY BYTES;

Você pode efetuar o mesmo select com varias outras clausulas where que poderão lhe auxiliar EX:
select owner,tablespace_name,segment_type,segment_name,bytes from dba_segments where owner like '%OWNER%' ORDER BY BYTES;



Para Mover os indices

select 'alter index ' || owner || '.' || segment_name || ' rebuild tablespace TABLESPACE_NOVA;'
from dba_segments where owner = 'USER' and tablespace_name = 'TABLESPACE_ANTIGA';


Para Mover as tabelas

select 'alter table ' || owner || '.' || segment_name || ' move tablespace TABLESPACE_NOVA'
from dba_segments where owner = 'USER' and tablespace_name = 'TABLESPACE_ANTIGA';



Para Mudar a tablespace padrão do Owner

alter user USUARIO default tablespace TABLESPACE NOVA


Pronto Manutenção efetuada.

Lembrando que poderão ocorrer erros em indices e tabelas que estão sendo utilizadas então recomendo a fazer este processo com o minimo de conexões o possivel no banco.
Este processo irá gerar archives caso seu banco esteja em ARCHIVELOG, caso a manutenção seja muito grande desabilite esta opção.

Nenhum comentário:

Postar um comentário