MigraTI - Soluções em banco de dados

quinta-feira, 9 de julho de 2009

Gerenciando Objetos de Usuários II

Dia 4/06/2009 postei alguns scripts para gerenciar objetos de usuários.
Como mover de uma tablespace para outra etc...

Existia uma duvida em minha cabeça.
Será que o oracle 10G ainda não havia um modo de mover os campos LOB para outro local sem ser pelo famoso EXPDP?
Bom Pesquisando um pouco no metalink e no santo google da vida encontrei alguns procedimentos bem úteis.
Porem fiquei com a impressão de que não seria fácil.
No metalink eu encontrei o Doc ID: 386341.1, ele tem vários passos para efetuar a manutenção destes objetos.
Porem se você é contratado por uma empresa e você nunca nem olhou para os objetos daquela empresa você vai ficar na mão quanto a descobrir informações sobre o LOBSEGMENT.
então vou postar aqui alguns "passos" a mais que para quem não conhece a estrutura das tabelas possa se virar.


Este Select lhe mostrará quais os segmentos de lob estão na tablespace.
SELECT OWNER,SEGMENT_NAME,
SEGMENT_TYPE,TABLESPACE_NAME,BYTES/1024/1024
from dba_segments
where SEGMENT_TYPE='LOBSEGMENT'
and TABLESPACE_NAME='<>';

Pegando o nome do segmento vc inclui no select abaixo para descobrir qual tabela e qual coluna tem o campo lob.
SELECT TABLE_NAME,COLUMN_NAME,
SEGMENT_NAME,INDEX_NAME
FROM DBA_LOBS
WHERE SEGMENT_NAME='<>';


Após receber os dados deste dois select é só você alterar a tabela com o campo lob.

ALTER TABLE <>
MOVE LOB( <>) STORE AS (
TABLESPACE <> )
/

exemplo.

SQL> CREATE TABLE LANA_LOB (
id NUMBER
, xml_file CLOB
, image BLOB
);

Tabela criada.

SQL> select OWNER,SEGMENT_NAME,SEGMENT_TYPE,
TABLESPACE_NAME,BYTES/1024/1024
from dba_segments
where SEGMENT_TYPE='LOBSEGMENT'
and TABLESPACE_NAME='LANA';

OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES/1024/1024
------------- ---------------------------- ------------------ ------------------ ----------------
LANA SYS_LOB0000016287C00003$$ LOBSEGMENT LANA ,0625
LANA SYS_LOB0000016287C00002$$ LOBSEGMENT LANA ,0625
LANA SYS_LOB0000016282C00003$$ LOBSEGMENT LANA ,0625
LANA SYS_LOB0000016282C00002$$ LOBSEGMENT LANA ,0625



SQL> SELECT TABLE_NAME,COLUMN_NAME,
SEGMENT_NAME,INDEX_NAME
FROM DBA_LOBS
WHERE SEGMENT_NAME='SYS_LOB0000016287C00003$$';

TABLE_NAME COLUMN_NAME SEGMENT_NAME INDEX_NAME
------------- -------------- ------------------------------ ------------------------------
LANA_LOB IMAGE SYS_LOB0000016287C00003$$ SYS_IL0000016287C00003$$

SQL> CREATE TABLESPACE LANA_LOB
DATAFILE '/u01/app/oracle/oradata/lana/lana_LOB.DBF'
size 50m autoextend on next 50m maxsize 500m;

Tablespace criado.

SQL> ALTER TABLE LANA_LOB
MOVE LOB(image) STORE AS (
TABLESPACE LANA_LOB )
/

Tabela alterada.

SQL> select OWNER,SEGMENT_NAME,SEGMENT_TYPE,
TABLESPACE_NAME,BYTES/1024/1024
from dba_segments
where SEGMENT_TYPE='LOBSEGMENT'
and TABLESPACE_NAME='LANA';

OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES/1024/1024
--------- ----------------------------- ------------------ ------------------ ---------------
LANA SYS_LOB0000016287C00002$$ LOBSEGMENT LANA ,0625
LANA SYS_LOB0000016282C00003$$ LOBSEGMENT LANA ,0625
LANA SYS_LOB0000016282C00002$$ LOBSEGMENT LANA ,0625

SQL> select OWNER,SEGMENT_NAME,SEGMENT_TYPE,
TABLESPACE_NAME,BYTES/1024/1024
from dba_segments
where SEGMENT_TYPE='LOBSEGMENT'
and TABLESPACE_NAME='LANA_LOB';

OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES/1024/1024
---------- ----------------------------- ------------------ ------------------ ----------------
LANA SYS_LOB0000016287C00003$$ LOBSEGMENT LANA_LOB ,0625

SQL>

Nenhum comentário:

Postar um comentário