[ 2017-03-16 ]

Moviendo tablas ONLINE en Oracle Database 12cR2 (12.2)

Una de las "new features" de 12cR2 que me resulta particularmente atractiva, es sin dudas la de poder mover tablas de manera ONLINE.
No tanto por lo novedosa y compleja, sino por como esto puede simplificarnos un poco la vida a los DBAs. Evitandonos tal vez, horarios extraños, madrugones o fines de semanas cortados para realizar tareas de mantenimiento en ambientes críticos.

De que se trata?
Tanto el "move" de la tabla como el "rebuild" del indice es ONLINE. Y puede ser realizado en una misma operación.

Veamos un ejemplo:

Creamos primero una tabla con un indice primary key: 

SQL> create table T1 (c1 number, c2 varchar2(20));

Table created


SQL> alter table T1 add constraint PK_T1 primary key (c1);

Table altered

Realizamos el "move" indicando la palabra ONLINE y UPDATE INDEXES para generar también el rebuild.

SQL> alter table T1 move tablespace users ONLINE update indexes;

Table altered.

Mientras la ejecución del comando está activa, podremos acceder a la tabla y no tendremos errores del tipo:

ORA-01502: index 'SD.PK_T1' or partition of such index is in unusable state


Al finalizar el comando, podemos verificar y efectivamente el indice queda en estado VALIDO.

SQL> select index_name,status from user_indexes;

INDEX_NAME                     STATUS
------------------------------ --------
PK_T1                          VALID


Claro que también existen algunas restricciones a tener en cuenta:
(Asi podemos verlo en la documentación)

http://docs.oracle.com/database/122/SQLRF/ALTER-TABLE.htm#SQLRF01001

  • You cannot combine this clause with any other clause in the same statement.
  • You cannot specify this clause for a partitioned index-organized table.
  • You cannot specify this clause if a domain index is defined on the table.
  •  Parallel DML and direct path INSERT operations require an exclusive lock on the table. Therefore, these operations are not supported concurrently with an ongoing online table MOVE, due to conflicting locks.
  • You cannot specify this clause for index-organized tables that contain any LOB, VARRAY, Oracle-supplied type, or user-defined object type columns.
Bastante interesante y útil esta opción, a probar y utilizarla!

No hay comentarios:

Publicar un comentario