Pular para o conteúdo

Gerenciamento de Índices Unusable: Como alterar o status do índice e opções de rebuild

Gerenciamento de Índices com o Status Unusable

Indexes com o status Unusable acontecem quando o Rowid da tabela ao qual o índice se refere foi alterado. Isto se deve ao fato de o rowid ser o ponteiro físico que serve de localização para a chave de índice fazer a referência. Para tanto, toda vez que se deseja executar um comando PL/SQL na base de dados, deve-se primeiramente alterar o status do índice.

Para se identificar o status de um índice, basta se fazer um select na DBA_INDEXES;

SQL> select OWNER, INDEX_NAME, STATUS from dba_indexes;

OWNER INDEX_NAME STATUS
—————————— —————————— ——–
BR INDTAB01 UNUSABLE
BR INDTAB02 VALID

Para se alterar o status do índice, deve-se efetuar o seguinte statement:

SQL> ALTER INDEX BR.INDTAB01 REBUILD;

Index altered.

O comando abaixo, efetua rebuild sem gerar Redo. Todavia, esta opção não possibilita a recuperação do índice em situações que necessitem de Recovery da base de dados.

SQL> ALTER INDEX BR.INDTAB01 REBUILD NOLOGGING;

Index altered.

Utilizando a opção ONLINE, habilita comandos DML (Insert, Update , Delete) durante a execução do Rebuild do índice. Uma vez que durante o rebuild, por padrão, o Oracle bloqueia este tipo de comando.

SQL> ALTER INDEX BR.INDTAB01 REBUILD ONLINE;

Index altered.

Utilizando a opção PARALLEL, aumenta a rapidez da execução do rebuild. Uma vez que o paralelismo, utiliza o número de CPUs disponíveis, e divide o workload entre eles.

SQL> ALTER INDEX BR.INDTAB01 PARALLEL;

Index altered.

ou

SQL> ALTER INDEX BR.INDTAB01 PARALLEL degree 2;

Index altered.

Ps: O número após a palavra degree, se refere ao número de CPUs (Processadores) existentes no ambiente. Do qual, é definido o número de CPUs que dividirão a carga de trabalho durante o rebuild do índice.

Utilizando a opção REVERSE, faz com que os blocos do índice, sejam armazenados na ordem inversa , durante a reconstrução do índice.

SQL> ALTER INDEX BR.INDTAB01 REBUILD REVERSE;

Index altered.

Utilizando a opção NOREVERSE, faz com que os blocos do índice, não sejam armazenados na ordem reversa , durante a reconstrução do índice.

SQL> ALTER INDEX BR.INDTAB01 REBUILD NOREVERSE;

Index altered.

Para se identificar o status de um índice particionado, basta se fazer um select na DBA_IND_PARTITIONS;

SQL> SET PAGESIZE 180
SQL> SET LINESIZE 180
SQL> SELECT INDEX_OWNER, INDEX_NAME, STATUS, PARTITION_NAME FROM DBA_IND_PARTITIONS;

INDEX_OWNER INDEX_NAME STATUS PARTITION_NAME
—————————— —————————— ——– ———— ——————
BR BRINDBR232 UNUSABLE BRPR_N
BR BRINDBR212 USABLE BRPR_S

Efetuando rebuild em índices com partições:

SQL> ALTER INDEX BR.BRINDBR232 REBUILD PARTITION BRPR_N;

Index altered.

Ps: Para questão de curiosidade: Quando se faz um select em um index , pode se obter como valor no campo STATUS = N/A. Essa questão intriga muitas pessoas, e aliás, me intrigou pela primeira vez que o obtive. Esse STATUS com o valor N/A, não quer dizer que o index , seja ele particionado ou não, está inutilizado. Esse STATUS, apenas elucida que o índice em questão, é um índice com subpartições, um outro tipo de particionamento. Assim sendo, não apresenta problema. Segue:

–> Um index com subpartições: Select executado na DBA_IND_SUBPARTITIONS reporta como status Usable ou Unusable, enquanto que na DBA_INDEXES reporta N/A e na DBA_IND_PARTITIONS , também N/A.

–>Um index sem partições: Select executado na DBA_INDEXES reporta como status Valid ou Invalid.

–>Um index com partições: Select executado na DBA_IND_PARTITIONS reporta Unusable ou Usable, enquanto que na DBA_INDEXES, reporta N/A.

Espero tê-lo ajudado, Abraços !

Quão útil foi este post ?

Clique em uma estrela para classificar o post

nota média 5 / 5. Contagem de votos: 14

Sem votos ! Seja o primeiro a classificar !

Deixe um comentário

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

plugins premium WordPress