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!!!