« Oracle 12c New Features : Deshabilitar el logging al momento de importar una tablaOracle 12c New Features : Movimiento de datafiles ONLINE »

Oracle 12c New Features : Exportar una vista como tabla (expdp)



En Oracle 12c nace una característica muy novedosa, el hecho de poder exportar la data de una vista y dejarla en un archivo dmp como tabla, o sea, se puede importar nuevamente, esto es extremadamente útil si tenemos tablas demasiado grandes para la conformación de la vista



El nuevo parámetro para exportar una vista como tabla es el parámetro VIEWS_AS_TABLES , que se conforma de la siguiente manera

VIEWS_AS_TABLES=usuario_dueño.nombre_vista:tabla_de_origen


En tabla_de_origen va el nombre de una de las tablas que componen el origen de la vista

El formato para exportar una vista es el siguiente

expdp usuario/password directory=data_pump_dir dumpfile=nombre.dmp VIEWS_AS_TABLES=usuario_dueño.nombre_vista:tabla_de_origen


Un ejemplo práctico

Tenemos la tabla1 y la tabla2 con los siguientes datos

ORACLE> select * from tabla1;

CAMPO1;CAMPO2
----------;--------
1;17/07/13
2;16/07/13
3;15/07/13

ORACLE> select * from tabla2;

CAMPO1;CAMPO3
----------;----------
1;Fecha 1
2;Fecha 2
3;Fecha 3


Creamos una vista con la siguiente estructura

create view v_consolida as
select tabla1.campo1 , tabla2.campo3
from tabla1, tabla2
where tabla1.campo1 = tabla2.campo1;


Y cuando consultamos sus datos aparece lo siguiente

ORACLE> select * from v_consolida;

CAMPO1;CAMPO3
----------;----------
1;Fecha 1
2;Fecha 2
3;Fecha 3


Procedemos a exportar la data de la vista , pero como tabla :>>

expdp system/oracle1@prod12c directory=DATA_PUMP_DIR dumpfile=sys_%u.dmp views_as_tables=sys.v_consolida:tabla2

Export: Release 12.1.0.1.0 - Production on Vie Jul 19 00:01:29 2013

Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Iniciando "SYSTEM"."SYS_EXPORT_TABLE_03": system/********@prod12c directory=DATA_PUMP_DIR dumpfile=sys_%u.dmp views_as_tables=SYS.v_consolida:tabla2
Estimaci¾n en curso mediante el mÚtodo BLOCKS...
Procesando el tipo de objeto TABLE_EXPORT/VIEWS_AS_TABLES/TABLE_DATA
Estimaci¾n total mediante el mÚtodo BLOCKS: 64 KB
Procesando el tipo de objeto TABLE_EXPORT/VIEWS_AS_TABLES/TABLE
. . "SYS"."V_CONSOLIDA" 5.492 KB 3 filas exportadas
La tabla maestra "SYSTEM"."SYS_EXPORT_TABLE_03" se ha cargado/descargado correctamente
******************************************************************************
El juego de archivos de volcado para SYSTEM.SYS_EXPORT_TABLE_03 es:
C:\APP\INMETRICS-HECTOR\ADMIN\PROD\DPDUMP\SYS_01.DMP
El trabajo "SYSTEM"."SYS_EXPORT_TABLE_03" ha terminado correctamente en Vie Jul 19 00:01:37 2013 elapsed 0 00:00:06


Para importar la data de la vista , que ya se encuenta en el archivo, ocupamos el siguiente comando de impdp

impdp system/oracle1@prod12c directory=DATA_PUMP_DIR dumpfile=SYS_01.dmp tables=sys.v_consolida remap_table=sys.v_consolida:vista2

Import: Release 12.1.0.1.0 - Production on Vie Jul 19 00:06:27 2013

Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
La tabla maestra "SYSTEM"."SYS_IMPORT_TABLE_01" se ha cargado/descargado correctamente
Iniciando "SYSTEM"."SYS_IMPORT_TABLE_01": system/********@prod12c directory=DATA_PUMP_DIR dumpfile=SYS_01.dmp tables=sys.v_consolida remap_table=sys.v_consolida:vista1
Procesando el tipo de objeto TABLE_EXPORT/VIEWS_AS_TABLES/TABLE
Procesando el tipo de objeto TABLE_EXPORT/VIEWS_AS_TABLES/TABLE_DATA
. . "SYS"."VISTA1" 5.492 KB 3 filas importadas
El trabajo "SYSTEM"."SYS_IMPORT_TABLE_01" ha terminado correctamente en Vie Jul 19 00:06:31 2013 elapsed 0 00:00:02

NOTA : Se usa el REMAP_TABLE para cambiar el nombre de la tabla a crear en el import desde SYS.V_CONSOLIDA a VISTA1


Y al consultar la nueva tabla , esta aparece con datos que son iguales a los que tenía la vista

ORACLE> select * from vista1;

CAMPO1;CAMPO3
----------;----------
1;Fecha 1
2;Fecha 2
3;Fecha 3



Algunos errores a tener en cuenta

- Puede aparecer un mensaje de error de la siguiente forma al ejecutar un expdp, esto se debe a la tabla que estamos colocando en el parámetro VIEWS_AS_TABLES

Procesando el tipo de objeto TABLE_EXPORT/VIEWS_AS_TABLES/TABLE
ORA-31693: Fallo del objeto de datos de tabla "SYS"."V_CONSOLIDA" al cargarse/descargarse y se estß saltando debido al error:
ORA-00904: "CAMPO2": identificador no vßlido
La tabla maestra "SYSTEM"."SYS_EXPORT_TABLE_03" se ha cargado/descargado correctamente
******************************************************************************


- Si no se declara una de las tablas de origen , aparece el siguiente mensaje de error ej. parámetro VIEWS_AS_TABLES=SYS.v_consolida

Estimaci¾n total mediante el mÚtodo BLOCKS: 0 KB
ORA-39166: No se ha encontrado el objeto SYS.V_CONSOLIDA.
ORA-31655: no se ha seleccionado ningún objeto de datos ni de metadatos para el trabajo


- Si colocamos todas las tablas que componen la vista ejemplo VIEWS_AS_TABLES=SYS.v_consolida:tabla1,SYS.v_consolida.tabla2, aparece el siguiente mensaje de error (quizás sea un BUG)

ORA-39126: Error fatal inesperado de worker en KUPW$WORKER.MOVE_DATA [TABLE_DATA:"SYS"."V_CONSOLIDA"]
SELECT flags, NVL(target_xml_clob, xml_clob) FROM "SYSTEM"."SYS_EXPORT_TABLE_04" WHERE process_order > 0 AND duplicate = 0 AND object_schema = :1 AND object_name = :2 AND object_type
tition_name IS NULL AND subpartition_name IS NULL
ORA-01422: la recuperaci¾n exacta devuelve un n·mero mayor de filas que el solicitado
ORA-01403: No se ha encontrado ning·n dato


Aunque aún me quedan dudas con esta nueva característica , los invito a probarla, quizás sea de su gusto.

Espero les sirva


by Ligarius
17.07.13. 22:46:49. 890 words, 3843 views. Categories: Oracle 12c ,