GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

How to do reorg in a table in Oracle Database / Como fazer reorg em uma tabela no Banco de Dados Oracle

O artigo de hoje será como efetuar um reorg em uma tabela em um Banco de Dados Oracle. Verificando os segmentos de uma tabela chamada TBD_BRUNO_CUSTOMER no banco de dados, foi verificado que a mesma necessitava de um reorg, pois o número de linhas da mesma estava com uma disparidade muito grande ao número de bytes da mesma. O reorg é uma operação que efetua a remoção de buracos existentes na tabela, em decorrência dos diversos inserts e updates  frequentemente realizados.

Com isso, segue abaixo como efetuar reorg em uma tabela. Reiterando, que o reorg apresentado neste post, será como efetuar um reorg apenas em uma tabela, e não na tablespace inteira onde ela está estruturada (nestes casos, teríamos que criar uma tablespace auxiliar com a mesma estrutura da original para ser utilizada durante este tipo de reorg, o reorg deste artigo não utiliza uma tablespace auxiliar).

Segue:

-> Step onde foi verificado a necessidade do reorg, através da consulta na dba_segments:

SQL> select * from dba_segments where segment_name='TBD_BRUNO_CUSTOMER';

OWNER SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE SEGMENT_SU
------------------------------ --------------------------------------------------------------------------------- ------------------------------ ------------------ ----------
TABLESPACE_NAME HEADER_FILE HEADER_BLOCK BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE RETENTI MINRETENTION
------------------------------ ----------- ------------ ---------- ---------- ---------- -------------- ----------- ----------- ----------- ---------- ------- ------------
PCT_INCREASE FREELISTS FREELIST_GROUPS RELATIVE_FNO BUFFER_ FLASH_C CELL_FL
------------ ---------- --------------- ------------ ------- ------- -------
BR   TBD_BRUNO_CUSTOMER TABLE ASSM
TSD_TUDO 270 983178 2952790016 360448 11 104857600 268435456 1 2147483645
0 270 DEFAULT DEFAULT DEFAULT

-> Após isso, inicia-se o reorg. Primeiramente verificamos o nome do index da tabela em questão:

SQL> select OWNER,INDEX_NAME,INDEX_TYPE,TABLE_NAME from dba_indexes where TABLE_NAME='TBD_BRUNO_CUSTOMER';

OWNER     INDEX_NAME                          INDEX_TYPE         TABLE_NAME
------------------------------ ------------------------------ --------------------------- ------------------------------
BR       XPK_TBD_BRUNO_CUSTOMER      NORMAL           TBD_BRUNO_CUSTOMER

-> Posteriormente, movemos a tabela para se efetuar a remoção dos buracos existentes na mesma:

SQL> alter table BR.TBD_BRUNO_CUSTOMER move;

Table altered.

-> Posteriormente, efetuamos o rebuild do index. Uma vez que, o mesmo fica com o status UNUSABLE, após o reorg.

Sintaxe: alter index OWNER.INDEXNAME rebuild;

SQL> alter index BR.XPK_TBD_BRUNO_CUSTOMER rebuild;

Index altered.

-> Para finalizar, atualizamos as estatísticas para questões de performance em consultas futuras.

Sintaxe:

execute SYS.DBMS_STATS.gather_table_stats (ownname=>’Owner_Name_Here’,tabname=>’Table_Name_Here’,estimate_percent => 30,cascade => TRUE);

SQL> execute SYS.DBMS_STATS.gather_table_stats(ownname=>'BR',tabname=>'TBD_BRUNO_CUSTOMER', estimate_percent => 30,cascade => TRUE);

PL/SQL procedure successfully completed.

Espero tê-lo ajudado, abraços!!!

Share

You may also like...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *