• Categoría: Oracle
  • Visto: 53764

Ratio: 4 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio desactivado
 
Oracle

En muchas ocasiones necesitamos mover o cambiar tablas de un tablespace a otro, las razones pueden ser múltiples, tablas que se han creado en un tablespace erróneo, para tareas de tuning, etc. para realizar el movimiento o cambio de tablas entre tablespaces usaremos la instrucción ALTER TABLE con la cláusula MOVE.

 


ALTER TABLE nombre_tabla MOVE TABLESPACE nombre_tablespace;

 

Por ejemplo para mover una tabla desde el tablespace actual al tablespace DATOS1 lo haremos así.

 


SQL>ALTER TABLE ventas.clientes MOVE TABLESPACE DATOS1;

 

Sencillo verdad, si queremos mover todas las tablas de un esquema ¿Como lo podemos hacer?

 

Bien vamos a preparar una DDL (Data Definition Language) para que no tengamos que realizar el ALTER de cada una de las tablas de nuestro esquema.

 

Tenemos que mover todas la tablas del esquema VENTAS al Tablespace DATOS1, pues bien desde sqlplus y como usuario SYS tecleamos las siguientes instrucciones: 


SQL>SET HEAD OFF
SQL>SET LINE 200
SQL>SET PAGESIZE 3000
SQL>SET FEED OFF
SQL>spool mover_tablas_VENTAS.ddl
SQL>SELECT 'ALTER TABLE VENTAS.'||table_name||' MOVE TABLESPACE DATOS1;'
     FROM DBA_TABLES
     WHERE OWNER = 'VENTAS';
SQL>spool off


 

Con este bloque de instrucciones hemos generado el fichero mover_tablas_VENTAS.ddl que contiene todas las instrucciones ALTER para todas las tablas del esquema VENTAS, vamos a editar el fichero generado antes de procesarlo por que tenemos que eliminar algunas líneas que nos sobran, dado que hemos generado un fichero de texto utilizaremos el vi si estáis en Linux/Unix y si por el contrario estáis trabajando en Windows os recomiendo el editor free PSPAD (Descargar desde aquí), excelente, nuestra DDL contendrá algo parecido a esto. 


SQL>  SELECT 'ALTER TABLE VENTAS.'||table_name||' MOVE TABLESPACE DATOS1;'
  2    FROM DBA_TABLES
  3    WHERE OWNER = 'VENTAS';

ALTER TABLE VENTAS.FACTURAS MOVE TABLESPACE DATOS1;

ALTER TABLE VENTAS.PEDIDOS MOVE TABLESPACE DATOS1;

ALTER TABLE VENTAS.COMERCIALES MOVE TABLESPACE DATOS1;

ALTER TABLE VENTAS.ALBARANES MOVE TABLESPACE DATOS1;

ALTER TABLE VENTAS.PEDIDOS MOVE TABLESPACE DATOS1;

SQL> spool off


 

Borramos las tres líneas de la sentencia SELECT y al final la línea spool off, salvamos el fichero y desde SQLPLUS lo procesamos, desde SQLPLUS y como usuario SYS ejecutamos la DDL mover_tablas_VENTAS.ddl


SQL> @mover_tablas_VENTAS.ddl

 

Si todo ha ido bien tendremos todas las tablas de esquema VENTAS en el Tablespace DATOS1.

 

Articulos relacionados: Creación de tablas en Oracle

 

Compatibilidad: Oracle 10g y Oracle 11g