Hola
Vamos hoy con un pequeño expediente X. tenemos una base de datos 11g de la que queremos mover los datos a una base de datos de test. Lo primero que se nos ocurre es hacer un export de la misma con el comando exp y llevarla a el entorno de test.
Sinembargo, al llegar a allí nos damos cuenta de que faltan objetos.
¿como es posible que nuestro export de toda la vida no haya sacado todas las tablas del esquema?
La respuesta es sencilla : por haber usado nuestro export de toda la vida
Aunque muchas veces sea mas comodo el uso del exp que de el expdp ( especialmente por no tener que crear un directorio en la instancia), el uso del exdp debería de ser obligatorio en nuestro día a dia, ya que nos salvará de quebraderos de cabeza como este.
Pero, seguramente os estaréis preguntando a que es debido este problema.
Oracle 11g viene con la nueva funcionalidad deferred_segment-creation=TRUE activada por defecto. Esto provoca que, al crear los objetos del esquema de la aplicacion en la base de datos no cree todos los segmentos de los mismos, sino que solamente creee los segmentos que contienen datos.
Nuestro «export de toda la vida» no es capaz de detectar esto, exportandonos «solamente» los segmentos exsistentes en la base de datos, sin embargo, el nuevo expdp es mas listo, y es capaz de exportar todos los objetos, independientemente de que contengan datos o no.
¿Como saber si tengo este tipo de tablas?
Podemos ver que objetos no están creados con la columna SEGMENT_CREATED de las vistas del USER_TABLES, USER_INDEXES o USER_LOBS.
pregunta a ver que tablas no tienen segmentos, si estásen una 11g seguramente te lleves una sorpresa.
select * from user_TABLES where SEGMENT_CREATED='N'
Y en lo que se refiere a esta nueva funcionalidad de la 11g, cuidadito con ella, por que, seguramente nos traera algún que otro susto mas.