Pular para o conteúdo

Como movimentar um index de uma tablespace para outra tablespace

Movimentando index para outra tablespace

Durante uma navegada no GPO ontem, vi uma questão no fórum sobre como movimentar um index de uma tablespace para outra tablespace. Como essa é uma das funcionalidades do escopo de DBAs, decidir escrever um pouquinho sobre isso.

Para isso, há a necessidade de se ter o nome do index. Com isso, decidir movimentar o index BRUNORS_IDX_TABLE_02 para uma outra tablespace chamada TBS_01 . Segue abaixo, um exemplo de como se ter o nome do mesmo passando o nome da tabela e o dono como cláusula de procura.

SQL> select index_name,tablespace_name from dba_indexes where table_name=’TABLEEXE’ and owner=’BRUNORS’;

INDEX_NAME                          TABLESPACE_NAME
——————————               ——————————
BRUNORS_IDX_TABLE_01                TBS_01
BRUNORS_IDX_TABLE_02                TBS_02

SQL> set pages 2000
SQL> set lines 200
SQL> SELECT INDEX_NAME, TABLE_NAME,TABLE_OWNER FROM USER_INDEXES WHERE TABLE_NAME = ‘TABLEEXE’;

INDEX_NAME                         TABLE_NAME                         TABLE_OWNER
——————————          ——————————          ——————————
BRUNORS_IDX_TABLE_01    TABLEEXE                                   BRUNORS
BRUNORS_IDX_TABLE_02    TABLEEXE                                    BRUNORS

Com a sintaxe “alter index <index_name> rebuild tablespace <tablespace_name>;” segue a alteração do index com o comando abaixo:

SQL> alter index BRUNORS_IDX_TABLE_02 rebuild tablespace TBS_01;

Index altered.

Nesse momento o Oracle faz uma cópia do index BRUNORS_IDX_TABLE_02 na tablespace TBS_01 com o mesmo nome , renomeia temporariamente o index BRUNORS_IDX_TABLE_02 da tablespace TBS_02 ( a tablespace original) para um outro nome e, assim, que finalizar a cópia na tablespace TBS_01(destino), apaga o index com o nome temporário na tablespace TBS_02. Assim, o index BRUNORS_IDX_TABLE_02 só irá existir na tablespace destino, que no caso acima é a TBS_01.

Segue abaixo a modificação:

SQL> select index_name,tablespace_name from dba_indexes where table_name=’TABLEEXE’ and owner=’BRUNORS’;

INDEX_NAME                             TABLESPACE_NAME
——————————                ——————————
BRUNORS_IDX_TABLE_01             TBS_01
BRUNORS_IDX_TABLE_02              TBS_01

Espero ter ajudado!

Abraços!

Bruno Reis

Bruno Reis

DBA ORACLE  na International Business Machines (IBM), fornecendo suporte para grandes clientes. Técnico em Informática pela Escola Técnica Polivalente de Americana e estudante de Ciência Computação . Mantenedor do Weblog sobre Banco de Dados Oracle e Gerenciamento de Serviços de TI: www.brunors.com

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