A veces es necesario cambiar todos los índices de un usuario a un tablespace espécífico de índices. Esto era muy importante en versiones 7, 8 y 9 de Oracle. Una manera sencilla de hacerlo es desde sqlplus.
La idea es hacer un script que genere otro script con la sentencia sql que permita hacer el cambio. Sería como sigue …
Creamos un fichero llamado alter_ind_ts.sql y dentro copiamos el siguiente contenido:
$ vi alter_ind_ts.sql
Copiamos lo siguiente dentro …
spool alter_ind_ts_usuario.sql set heading off set linesize 180 select 'alter index '||owner||'.'||index_name||' rebuild tablespace <Poner_tablespace_destino>;' from dba_indexes where owner = '<nombre_usuario_propietario_indices>' / spool off
Posteriormente ejecutamos desde sqlplus conectados como system por ejemplo el script alter_ind_ts.sql :
SQL> start alter_ind_ts.sql;
Esto nos generará el script alter_ind_ts_usuario.sql que después de “recrearlo”, es decir, quitar la línea del final donde nos indica las filas devueltasy ponerle un “spool” al inicio del fichero y al final para que nos guarde el resultado de la ejecución del script. Podremos ejecutarlo posteriormente desde el mismo sqlplus y nos realizará el cambio de tablespace de los índices del usuario especificado.
SQL> start alter_ind_ts_usuario.sql ;