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!