Continuando
con las nuevas funcionalidades de Datapump en Oracle 12c. Ahora nos toca
revisar las funcionalidades nuevas para la versión Oracle 12c Release 2.
1.
Exportación e importación
de la Metadata en paralelo
Hasta la
versión Oracle 12c Release 1, por más que uno define la opción PARALLEL a una operación de
exportación o importación de Metadata, esta acción se realizaba de manera
serial.
En la
versión Oracle 12c Release 2, ya es posible realizar la exportación e
importación en paralelo.
Si la
base de datos contiene información de tablas e índices particionados, la
exportación de la Metadata de cada partición puede ejecutarse de manera
paralela. Además, durante una importación, es posible realizar la creación de
índices y constraint en forma paralela.
expdp
system@ORCL DUMPFILE=METADATA_DB_%U.dmp LOGFILE=exp_meta_full.log
DIRECTORY=EXP_DIR FULL=Y CONTENT=METADATA_ONLY
PARALLEL=2
Export: Release
12.2.0.1.0 - Production on Sat Feb 10 21:24:01 2018
Copyright (c)
1982, 2017, Oracle and/or its affiliates.
All rights reserved.
Password:
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Starting
"SYSTEM"."SYS_EXPORT_FULL_01": system/********@ORCL
DUMPFILE=METADATA_DB_%U.dmp LOGFILE=exp_meta_full.log DIRECTORY=EXP_DIR FULL=Y
CONTENT=METADATA_ONLY PARALLEL=2
…
Dump file set
for SYSTEM.SYS_EXPORT_FULL_01 is:
/u01/dump/METADATA_DB_01.dmp
/u01/dump/METADATA_DB_02.dmp
Job "SYSTEM"."SYS_EXPORT_FULL_01"
successfully completed
2.
Parfile en el log de Oracle
Datapump
Cuando
ejecutar el comando EXPDP o IMPDP junto al parámetro PARFILE. El contenido del
archive se imprime en el log del comando ejecutado.
Esta
funcionalidad es muy útil para poder revisar la ejecución de una operación de
exportación cuando no conocemos el procedimiento que se ha utilizado.
Creamos
un Parfile de ejemplo
[oracle@oracle12c dump]$ cat parfileDUMP.txt
DUMPFILE=dump_SH_OE%U.dmp
LOGFILE=exp_SH_OE.log
DIRECTORY=EXP_DIR
SCHEMAS=HR,OE
PARALLEL=2
Ejecutamos
el comando EXPDP y utilizamos el Parfile.
expdp
system@ORCL parfile=parfileDUMP.txt
Export: Release
12.2.0.1.0 - Production on Sat Feb 10 21:43:15 2018
Copyright (c)
1982, 2017, Oracle and/or its affiliates.
All rights reserved.
Password:
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Starting
"SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********@ORCL parfile=parfileDUMP.txt
…
Revisamos
el log de la ejecución y observamos los parámetros del Parfile definidos.
[oracle@oracle12c
dump]$ cat exp_SH_OE.log
;;;
Export: Release
12.2.0.1.0 - Production on Sat Feb 10 21:43:15 2018
Copyright (c)
1982, 2017, Oracle and/or its affiliates.
All rights reserved.
;;;
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
;;;
**************************************************************************
;;; Parfile values:
;;; parfile: parallel=2
;;; parfile: schemas=HR,OE
;;; parfile: directory=EXP_DIR
;;; parfile: logfile=exp_SH_OE.log
;;; parfile: dumpfile=dump_SH_OE%U.dmp
;;;
**************************************************************************
Starting
"SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********@ORCL parfile=parfileDUMP.txt
…
3.
Nuevas opciones para
nombrar los archivos Dump.
En
versiones anteriores cuando se realiza una operación de exportación en
paralelo, se debe colocar la variable %U en el nombre de los archivos
Dump. Es necesario para poder
diferenciar los nombres de los diferentes archivos generados. %U utiliza una
variable numérica que puede ir de 00 a 99.
En Oracle
12c Release 2 tenemos nuevas opciones para poder nombrar los archivos Dumps.
Los más utilizados son:
·
%T o %t: Define la fecha en formato YYYYMMDD
·
%L o %l: Realiza la misma operación que la variable %U,
pero expande su límite hasta 10 dígitos (valor límite: 2147483646)
También
podemos utilizar las variables que identifican solo una porción de la fecha
actual.
·
%D o %d :
Define el día en formato DD
·
%M o %m: Define el mes en formato MM
·
%Y o %y: Define el año en formato YYYY
Ejecutamos
el comando EXPDP y verificamos el nombre de los archivos generados.
expdp
system@ORCL DUMPFILE=FULL_DB_%T_%L.dmp
LOGFILE=exp_bd_full.log DIRECTORY=EXP_DIR FULL=Y PARALLEL=4
Export: Release
12.2.0.1.0 - Production on Sun Feb 11 01:24:55 2018
Copyright (c)
1982, 2017, Oracle and/or its affiliates.
All rights reserved.
Password:
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Starting
"SYSTEM"."SYS_EXPORT_FULL_01": system/********@ORCL
DUMPFILE=FULL_DB_%T_%L.dmp LOGFILE=exp_bd_full.log DIRECTORY=EXP_DIR FULL=Y
PARALLEL=4
…
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_FULL_01 is:
/u01/dump/FULL_DB_20180211_01.dmp
/u01/dump/FULL_DB_20180211_02.dmp
/u01/dump/FULL_DB_20180211_03.dmp
/u01/dump/FULL_DB_20180211_04.dmp
4.
Nuevos valores para el
parámetro DATA_OPTION con EXPDP
El
parámetro DATA_OPTION tiene nuevas opciones
tanto para EXPDP como IMPDP.
Detallemos
primero las opciones para EXPDP.
4.1 GROUP_PARTITION_TABLE_DATA
Indica al Datapump que cargue la información de
una tabla particionada en una sola operación, en lugar de cargar las
particiones por separado.
La definición de la tabla no se toma en cuenta
al momento de hacer el importado, lo que permite realizar la tarea mucho más
rápido.
Es importante aclarar que la estructura de la
tabla se mantiene sin cambios. Esta opción solo permite acelerar la operación
de exportación e importación.
Ejecutamos
el comando EXPDP sin la opción GROUP_PARTITION_TABLE_DATA y observamos como exporta las particiones de
una tabla.
expdp
system@ORCL DUMPFILE=SH_SALES2.dmp LOGFILE=exp_SH_SALES2.log DIRECTORY=EXP_DIR
TABLES=SH.SALES
…
Processing
object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing
object type TABLE_EXPORT/TABLE/INDEX/BITMAP_INDEX/INDEX
. . exported
"SH"."SALES":"SALES_Q4_2001" 2.258 MB 69749 rows
. . exported
"SH"."SALES":"SALES_Q3_1999" 2.166 MB 67138 rows
. . exported
"SH"."SALES":"SALES_Q3_2001" 2.130 MB 65769 rows
. . exported
"SH"."SALES":"SALES_Q2_2001" 2.051 MB 63292 rows
. . exported
"SH"."SALES":"SALES_Q1_1999" 2.071 MB 64186 rows
. . exported
"SH"."SALES":"SALES_Q1_2001" 1.965 MB 60608 rows
. . exported
"SH"."SALES":"SALES_Q4_1999" 2.014 MB 62388 rows
. . exported
"SH"."SALES":"SALES_Q1_2000" 2.012 MB 62197 rows
. . exported
"SH"."SALES":"SALES_Q3_2000" 1.910 MB 58950 rows
. . exported
"SH"."SALES":"SALES_Q4_2000" 1.814 MB 55984 rows
Master table
"SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
.
.
elapsed 0 00:00:37
Ejecutamos
nuevamente el comando EXPDP, pero con la opción GROUP_PARTITION_TABLE_DATA y observamos que la
tabla se exporta de una sola operación y un poco más rápido.
expdp
system@ORCL DUMPFILE=SH_SALES.dmp LOGFILE=exp_SH_SALES.log DIRECTORY=EXP_DIR
TABLES=SH.SALES DATA_OPTIONS=GROUP_PARTITION_TABLE_DATA
…
Processing
object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing
object type TABLE_EXPORT/TABLE/INDEX/BITMAP_INDEX/INDEX
. . exported
"SH"."SALES" 29.62 MB 918843 rows
Master table
"SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
.
.
elapsed 0
00:00:35
4.2 VERIFY_STREAM_FORMAT
Valida el formato de la data antes que se
escriba en los archivos Dumps. Esto
permite asegurarnos que no hay errores en los archivos Dumps generados.
Puede ser útil para archivos Dumps que serán
almacenados en discos externos o Cintas.
expdp
system@ORCL DUMPFILE=HR_valid.dmp LOGFILE=exp_HR_valid.log DIRECTORY=EXP_DIR
SCHEMAS=HR DATA_OPTIONS=VERIFY_STREAM_FORMAT
Export: Release
12.2.0.1.0 - Production on Sun Feb 11 03:25:56 2018
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Starting
"SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********@ORCL DUMPFILE=HR_valid.dmp
LOGFILE=exp_HR_valid.log DIRECTORY=EXP_DIR SCHEMAS=HR DATA_OPTIONS=VERIFY_STREAM_FORMAT
…
Dump file set
for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
/u01/dump/HR_valid.dmp
Job
"SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at
Sun Feb 11 03:26:52 2018 elapsed 0 00:00:53
5.
Nuevos valores para el
parámetro DATA_OPTION con IMPDP
Ahora veremos
las opciones para IMPDP
5.1 TRUST_EXISTING_TABLE_PARTITIONS
La opción TRUST_EXISTING_TABLE_PARTITIONS le indica al Datapump
que la estructura de una tabla particionada ya existe en la base de datos
destino y es igual a la base de datos origen.
De tal manera, Datapump puede realizar la importación de datos en
paralelo en las diferentes particiones.
Si la estructura no es igual podría darse un
error de carga.
ORA-31693: Table
data object "SH"."SALES ":"SALES_Q3_2001" failed
to load/unload and is being skipped due to error:
ORA-29913: error
in executing ODCIEXTTABLEFETCH callout
ORA-14401:
inserted partition key is outside specified partition
Para explicarlo mejor, revisamos el siguiente
ejemplo.
Cuando realizamos operaciones de exportación e importación sobre una tabla particionada, esta operación se realiza de manera
serial, por más que uno le define paralelismo.
El paralelismo ayuda en diferentes tablas, pero no en particiones de una
tabla.
Lo podemos observar en la siguiente tarea de
exportación con la opción METRICS=Y (una tarea de importación funciona de igual
manera)
expdp
system@ORCL DUMPFILE=SH_SALES3_%U.dmp LOGFILE=exp_SH_SALES3.log
DIRECTORY=EXP_DIR TABLES=SH.SALES METRICS=Y PARALLEL=2
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Starting
"SYSTEM"."SYS_EXPORT_TABLE_01": system/********@ORCL DUMPFILE=SH_SALES3_%U.dmp
LOGFILE=exp_SH_SALES3.log DIRECTORY=EXP_DIR TABLES=SH.SALES METRICS=Y
PARALLEL=2
W-1 Startup took 0 seconds
W-2 Startup took 1 seconds
…
W-1 . . exported
"SH"."SALES":"SALES_Q4_2001" 2.258 MB 69749 rows in 0 seconds using direct_path
W-1 . . exported
"SH"."SALES":"SALES_Q3_1999" 2.166 MB 67138 rows in 0 seconds using direct_path
W-1 . . exported
"SH"."SALES":"SALES_Q3_2001" 2.130 MB 65769 rows in 1 seconds using direct_path
W-1 . . exported
"SH"."SALES":"SALES_Q2_2001" 2.051 MB 63292 rows in 0 seconds using direct_path
W-1 . . exported
"SH"."SALES":"SALES_Q1_1999" 2.071 MB 64186 rows in 0 seconds using direct_path
W-1 . . exported
"SH"."SALES":"SALES_Q1_2001" 1.965 MB
60608 rows in 0 seconds using direct_path
W-1 . . exported
"SH"."SALES":"SALES_Q4_1999" 2.014 MB 62388 rows in 0 seconds using direct_path
Ahora,
volvemos a ejecutar la importación en la base de datos, pero con la opción TRUST_EXISTING_TABLE_PARTITIONS, además utilizamos la
opción TABLE_EXISTS_ACTION = TRUNCATE.
Vamos a
observar que tanto el proceso W-1 y W-2 realizan la cargar los datos en cada
partición.
impdp system@PRD
DUMPFILE=SH_SALES3_%U.dmp LOGFILE=imp_SH_SALES3.log DIRECTORY=IMP_DIR
TABLES=SH.SALES METRICS=Y PARALLEL=2 TABLE_EXISTS_ACTION
= TRUNCATE DATA_OPTIONS=TRUST_EXISTING_TABLE_PARTITIONS
Import: Release
12.2.0.1.0 - Production on Sun Feb 11 03:56:03 2018
W-1 Startup took
0 seconds
W-1 Master table
"SYSTEM"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting
"SYSTEM"."SYS_IMPORT_TABLE_01": system/********@PRD DUMPFILE=SH_SALES3_%U.dmp
LOGFILE=imp_SH_SALES3.log DIRECTORY=IMP_DIR TABLES=SH.SALES METRICS=Y
PARALLEL=2 TABLE_EXISTS_ACTION=TRUNCATE
DATA_OPTIONS=TRUST_EXISTING_TABLE_PARTITIONS
W-1 Processing
object type TABLE_EXPORT/TABLE/TABLE
W-1 Table
"SH"."SALES" exists and has been truncated. Data will be
loaded but all dependent metadata will be skipped due to table_exists_action of
truncate
W-1 Completed 1 TABLE objects in 4 seconds
W-1 Completed by worker 1 1 TABLE objects in
4 seconds
W-1 Processing
object type TABLE_EXPORT/TABLE/TABLE_DATA
W-2 Startup took
6 seconds
W-1 . . imported
"SH"."SALES":"SALES_Q4_2001" 2.258 MB 69749 rows in 5 seconds using external_table
W-2 . . imported
"SH"."SALES":"SALES_Q1_1999" 2.071 MB 64186 rows in 4 seconds using external_table
W-2 . . imported
"SH"."SALES":"SALES_Q1_2001" 1.965 MB 60608 rows in 3 seconds using external_table
W-1 . . imported
"SH"."SALES":"SALES_Q3_1999" 2.166 MB 67138 rows in 5 seconds using external_table
W-2 . . imported
"SH"."SALES":"SALES_Q4_1999" 2.014 MB 62388 rows in 4 seconds using external_table
W-1 . . imported
"SH"."SALES":"SALES_Q3_2001" 2.130 MB 65769 rows in 3 seconds using external_table
W-2 . . imported
"SH"."SALES":"SALES_Q1_2000" 2.012 MB 62197
rows in 2 seconds using external_table
W-2 . . imported
"SH"."SALES":"SALES_Q3_2000" 1.910 MB 58950 rows in 3 seconds using external_table
W-1 . . imported
"SH"."SALES":"SALES_Q2_2001" 2.051 MB 63292 rows in 5 seconds using external_table
W-2 . . imported
"SH"."SALES":"SALES_Q4_2000" 1.814 MB
5.2 VALIDATE_TABLE_DATA
Durante las tareas de importación; Datapump
valida los campos de Numero y Fecha de una tabla antes de realizar la carga de
datos. Ante algún error podría devolver
un mensaje de error.
ORA-02374: conversion error loading table
"HR"."EMPLOYEES"
ORA-12899: value
too large for column C1 (actual: 500, maximum: 498)
ORA-02372: data
for row: C8 : '
Esta opción podría servir de mucho cuando
estamos haciendo migraciones de base de datos con diferente CHARACTER SET.
impdp system@PRD
DUMPFILE=HR_schema.dmp LOGFILE=imp_HR1.log DIRECTORY=IMP_DIR SCHEMAS=HR DATA_OPTIONS=VALIDATE_TABLE_DATA
Import: Release
12.2.0.1.0 - Production on Sun Feb 11 08:31:57 2018
Copyright (c)
1982, 2017, Oracle and/or its affiliates.
All rights reserved.
6.
Nuevas opciones para
NETWORK_LINK
El
parámetro NETWORK_LINK es un parámetro
bastante utilizado porque nos permite realizar operaciones de importación sin
necesidad de archivos Dumps.
Lastimosamente, tiene sus limitaciones.
En Oracle 12c reléase 2 algunas de esas limitaciones han sido superadas.
Entre
ellas tenemos
·
Soporte
de Tipos de datos LONG. Una tabla con este
tipo de dato, no utiliza el procedimiento común de INSERT AS SELECT sino el procedimiento OCIDirPathUnload.
·
El
parámetro ACCESS_METHOD ya puede ser
utilizado junto con NETWORK_LINK
·
Compresión
de datos por la red con los parámetros DATA_OPTIONS = ENABLE_NETWORK_COMPRESSION y ACCESS_METHOD =
DIRECT_PATH. La
compresión se realiza en la base de datos origen y luego se envía por la
red.
Finalmente,
la data se descomprime al llegar a la base de datos destino.
impdp system@PRD
LOGFILE=imp_SH.log SCHEMAS=SH NETWORK_LINK=orcl DATA_OPTIONS=ENABLE_NETWORK_COMPRESSION ACCESS_METHOD=DIRECT_PATH
Import: Release
12.2.0.1.0 - Production on Sun Feb 11 08:31:57 2018
Copyright (c)
1982, 2017, Oracle and/or its affiliates.
All rights reserved.
7.
Cambio de nombre de
directorio para datafiles
Cuando
deseamos cambiar el nombre a un Datafile durante una importación, utilizamos la
opción REMAP_DATAFILE, pero si es una
gran cantidad de archivos, es difícil realizar el cambio de nombre uno a
uno.
En Oracle
12c reléase 2 podemos utilizar la opción REMAP_DIRECTORY para poder cambiar el
nombre de todo un grupo de datafiles que se encuentran en un directorio
especifico. Los parámetros REMAP_DATAFILE y REMAP_DIRECTORY no pueden ser
definidos en un mismo comando IMPDP.
Ejecutamos
una exportación del tablespace USERS
expdp
system@ORCL DUMPFILE=USER_tbs.dmp LOGFILE=exp_USER_tbs.log DIRECTORY=EXP_DIR TABLESPACES=USERS
Realizamos
la importación en la base de datos destino con las opciones
·
REMAP_TABLESPACE para cambiar el nombre al tablespace
·
REMAP_DIRECTORY para crear los datafiles en otro directorio.
impdp system@PRD
DUMPFILE=USER_tbs.dmp LOGFILE=imp_USER_tbs.log DIRECTORY=IMP_DIR
REMAP_TABLESPACE=USERS:USERS2 REMAP_DIRECTORY="'+DG_DATA':'+DG_FRA'"
Espero
les pueda servir de ayuda.
No hay comentarios.:
Publicar un comentario