DB2 9.7: Herramienta IBM Data Movement

Habilite fácilmente aplicaciones de Oracle en DB2

Este artículo presenta una herramienta muy simple y poderosa para permitir que aplicaciones de Oracle se ejecuten sobre IBM®DB2®9.7 for Linux®, UNIX®, and Windows®. Esta herramienta también puede usarse para mover datos de otros sistemas de gestión de bases de datos a DB2 for Linux, UNIX, and Windows y DB2 for z/OS®.

Vikram S. Khatri, Certified Consulting I/T Specialist, EMC

Vikram S Khatri pertenece a la división Sales and Distribution de IBM y es miembro del equipo DB2 Migration. Tiene 24 años de experiencia en TI y se especializa en la habilitación de aplicaciones no DB2 en DB2.Vikram contribuye con la organización de ventas técnicas de DB2 en proyectos de migración de bases de datos de alta complejidad y en la prueba de puntos de referencia de rendimiento de bases de datos.


Nivel de autor contribuyente en developerWorks

01-04-2010 (Primera publicación 01-04-2010)

Introducción

Desde la versión V9.7 de DB2 for Linux, UNIX and Windows no se requiere el Migration Toolkit (MTK) para usar aplicaciones de Oracle en productos DB2. La herramienta aquí presentada reemplaza la funcionalidad MTK por un flujo de trabajo considerablemente simplificado.

Para todo el resto de los escenarios, por ejemplo, para mover datos de una base de datos a DB2 for z/OS, esta herramienta soporta la particularidad MTK en el área de movimiento de datos de alta velocidad. Usando esta herramienta es posible mover hasta 4TB de datos en sólo tres días.

Para los usuarios novatos, una GUI proporciona una interfaz fácil de usar, mientras que los usuarios avanzados pueden optar por la API de línea de comandos.

Preparación

Descarga

Primero, descargue la herramienta de la Sección de descargas a su servidor DB2 de destino. Para mover los datos a DB2 for z/OS deberá realizar pasos adicionales. (Busque la última versión disponible de la herramienta.)

Instalación

Una vez descargado el archivo IBMDataMovementTool.zip, extraiga los archivos a un directorio llamado IBMDataMovementTool en el servidor DB2 de destino. Se recomienda enfáticamente realizar una instalación en el extremo del servidor (DB2) para obtener un rendimiento óptimo del movimiento de datos.

Requisitos previos

  • Si desea habilitar una aplicación Oracle para ejecutarse en DB2 for Linux, UNIX, and Windows, en su servidor de destino deberá tener instalado DB2 V9.7.
  • Deberá tener instalada la versión™ 1.5 de Java (o posteriores) en el servidor de destino. Para verificar su versión de Java actual, ejecute el comando java -version. Predeterminadamente, Java se instala como parte de DB2 for Linux, UNIX, and Windows en <install_dir>\SQLLIB\java\jdk (Windows) o /opt/ibm/db2/V9.7/java/jdk (Linux).
Tabla 1. Ubicación de drivers JDBC para su base de datos de origen y para DB2
Base de datosDrivers JDBC
Oracleojdbc5.jar o ojdbc6.jar o ojdbc14.jar, xdb.jar, xmlparserv2.jar o classes12.jar o classes111.jar for Oracle 7 u 8i
Servidor SQLsqljdbc5.jar o sqljdbc.jar
Sybasejconn3.jar
MySQLmysql-connector-java-5.0.8-bin.jar o último driver
PostgreSQLpostgresql-8.1-405.jdbc3.jar o último driver
DB2 for Linux, UNIX, and Windowsdb2jcc.jar, db2jcc_license_cu.jar o db2jcc4.jar, db2jcc4_license_cu.jar
DB2 for zdb2jcc.jar, db2jcc_license_cisuz.jar o db2jcc4.jar, db2jcc4_license_cisuz.jar
DB2 for ijt400.jar
MS AccessOptional Access_JDBC30.jar

Configuración del entorno

  • UNIX: Inicie sesión en su servidor como “DB2 instance owner” (propietario de instancia DB2).
  • Windows: inicie una ventana de comando DB2.
  • Pase al directorio IBMDataMovementTool. La herramienta es un archivo JAR con dos scripts de drivers que la ejecutan.
     IBMDataMovementTool.cmd - Command script to run the tool on
    Windows. IBMDataMovementTool.sh - Command script to run the tool on UNIX.
     IBMDataMovementTool.jar - JAR file of the tool. Pipe.dll - A DLL required on
                            Windows if pipe option is used.

Creación de la base de datos DB2 de destino

Como se requiere de conexión con la base de datos de destino para ejecutar la herramienta, deberá crear primero la base de datos DB2. En DB2 V9.7, recomendamos usar el almacenamiento automático predeterminado y elegir el tamaño de página de 32KB. Cuando habilite las aplicaciones a ejecutar en DB2 V9.7, la instancia y la base de datos deben estar funcionando en modo de compatibilidad. También se recomienda ajustar el comportamiento de redondeo para que coincida con el de Oracle. Puede implementar objetos mediante el orden de dependencias estableciendo la semántica de revalidación en deferred_force.

En sistemas UNIX

			$ db2set
			DB2_COMPATIBILITY_VECTOR=ORA $ db2set
 DB2_DEFERRED_PREPARE_SEMANTICS=YES $ db2stop force $ db2start $ db2 "create db
                testdb automatic storage yes on /db2data1, /db2data2,/db2data3 
				DBPATH ON /db2system
				PAGESIZE 32 K" $ db2 
				update db cfg for testdb using auto_reval
				deferred_force $ db2
                update db 
				cfg for testdb using decflt_rounding round_half_up

En sistemas Windows

C:\> db2set DB2_COMPATIBILITY_VECTOR=ORA
                C:\> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES C:\> db2stop force
                C:\> db2start C:\> db2 "create db testdb automatic storage yes on
                C:,D: DBPATH ON E: PAGESIZE 32 K" C:\> db2 update db cfg for testdb using
                auto_reval deferred_force C:\> db2 update db cfg for testdb using
                decflt_rounding round_half_up

Extracción de objetos y datos

Antes de ejecutar la herramienta, debe contar con la siguiente información de sus servidores de origen y DB2:

  • Dirección de IP y nombre de host de los servidores de origen y DB2
  • Números de puertos a conectar
  • Nombre de las bases de datos, SID, nombre de subsistema, etc., según se requiera
  • Un ID de usuario con privilegios DBA en la base de datos de origen
  • Contraseña de ese usuario
  • Ubicación de su base de datos de origen y de los drivers JDBC para DB2
  • Suficiente espacio o información de punto de volumen/montaje para guardar los datos

Ejecute IBMDataMovementTool.cmd en Windows o ./IBMDataMovementTool.sh en UNIX. Si el servidor tiene la capacidad de mostrar gráficos, la herramienta iniciará una GUI. De lo contrario, pasará al modo de línea de comandos interactivo para recopilar datos de entrada.

En Windows: IBMDataMovementTool.cmd On UNIX: chmod +x
                IBMDataMovementTool.sh ./IBMDataMovementTool.sh

¿Qué es DB2_COMPATIBILITY_VECTOR?

DB2_COMPATIBILITY_VECTOR se usa para colocar la instancia de DB2 V9.7 y la base de datos en un modo compatible con Oracle. Para obtener más detalles, consulte el Centro de información de DB2 V9.7.

Ahora verá una ventana GUI. Algunos mensajes también aparecerán en la ventana shell. Verifique que estos mensajes no hayan se registrado errores antes de comenzar a usar la GUI.

Si no ha establecido DB2_COMPATIBILITY_VECTOR, la herramienta realizará una advertencia. Siga los pasos para establecer el vector de compatibilidad si aún no lo ha hecho.

			[2010-01-10 17.08.58.578] INPUT Directory = .
[2010-01-10 17.08.58.578] Configuration file loaded: 
	'jdbcdriver.properties'
    [2010-01-10 17.08.58.593] Configuration file loaded: 
'IBMExtract.properties'
   [2010-01-10 17.08.58.593] appJar : 
'C:\IBMDataMovementTool\IBMDataMovementTool.jar'
    [2010-01-10 17.08.59.531] 
DB2 PATH is C:\Program Files\IBM\SQLLIB [2010-01-10 17.35.30.015]
	*** WARNING ***.
	The DB2_COMPATIBILITY_VECTOR is not set. 
	[2010-01-10 17.35.30.015] To set compatibility mode, 
discontinue this program and run the
following commands
[2010-01-10 17.35.30.015]
	db2set DB2_COMPATIBILITY_VECTOR=FFF
[2010-01-10 17.35.30.015] 
	db2stop force [2010-01-10 17.35.30.015]
	db2start

Uso de la interfaz de usuario gráfica

La pantalla GUI de la Figura 1 muestra campos para especificar la información de conexión de las bases de datos de origen y DB2. La secuencia de eventos a realizar en esta pantalla es la siguiente:

  1. Especifique la información de conexión de las bases de datos de origen y DB2.
  2. Haga clic en Connect to Oracle (Conectar con Oracle) para probar la conexión.
  3. Haga clic en Connect to DB2 (Conectar con DB2) para probar la conexión.
  4. Especifique el directorio en funcionamiento al cual deben extraerse el lenguaje de definición de datos (DDL) y los datos (DATA).
  5. Si lo desea, seleccione DDL y/o DATA. Si selecciona solamente DDL, se generará un script genddl adicional.
  6. Haga clic en el botón Extract DDL/Data (Extraer DDL/Data). Puede monitorear el progreso en la ventana de la consola.
  7. Cuando la extracción de datos se haya completado con éxito, revise los archivos de salida resultantes y verifique el estado del movimiento de datos y si existen advertencias, errores u otros posibles problemas.
  8. Opcionalmente, puede hacer clic en el botón View Script/Output (Ver script/datos de salida) para verificar los scripts, DDL y datos generados o el archivo de registro de salida.
  9. Haga clic en el botón Deploy DDL/Data (Implementar DDL/Data) para crear tablas e índices en DB2 y cargar los datos extraídos de la base de datos de origen.
  10. Puede usar Execute DB2 Script (Ejecutar script de DB2) para ejecutar los scripts de DB2 generados en lugar de ejecutar desde la línea de comandos. El movimiento de datos es un ejercicio interactivo. Si necesita eliminar todas las tablas existentes para comenzar de cero, selecciones el script drop table y ejecútelo. Este botón también puede usarse para ejecutar los scripts en el orden deseado.
Figura 1. Parámetros de entrada de las bases de datos de origen y DB2
Parámetros de entrada de las bases de datos de origen y DB2

Luego de hacer clic en el botón Extract DDL/Data, verá mensajes de la herramienta en la pestaña View File (Ver archivo), como muestra la Figura 2:

Figura 2. Extracción de DDL y DATA
Extracción de DDL y DATA

Luego de completada la extracción de DDL y DATA, verá varios nuevos archivos creados en el directorio en funcionamiento. Estos archivos pueden usarse en la línea de comandos para la ejecución en DB2.

Archivos de configuración

Los siguientes scripts de comandos se regenerarán cada vez que se ejecute la herramienta en el modo GUI. Sin embargo, puede usar estos scripts para realizar todos los pasos de movimiento de datos sin la GUI. Esto resulta útil cuando se desea incrustar la herramienta en un proceso por lotes para lograr un movimiento de datos automatizado.

Tabla 2. Scripts de comandos
Nombre del archivoDescripción
IBMExtract.propertiesEste archivo contiene todos los parámetros de entrada que especificó a través de los valores de entrada de la línea de comandos o de la GUI. Este archivo permite la edición manual para modificar o corregir parámetros. Nota: este archivo se sobrescribirá cada vez que ejecute la GUI.
unloadEste script es creado por la herramienta. Su función es descargar datos del servidor de la base de datos de origen a archivos planos, cuando se hayan marcado las opciones DDL y DATA. Este mismo script mueve datos desde la base de datos de origen a DB2 usando canalizaciones si se marca la opción de canalización en la GUI a fin de eliminar los archivos planos intermedios. La canalización se controla con la opción usePipe del archivo IBMExtract.properties.
rowcountEste script es creado por la herramienta. Puede ejecutarlo luego de implementar los datos para verificar los conteos de filas en las bases de datos de origen y DB2.
Figura 3. Archivos creados luego de la extracción de datos
Archivos creados luego de la extracción de datos

Uso del modo de línea de comandos

Puede ejecutar la herramienta usando el modo de línea de comandos, especialmente cuando la capacidad GUI no está disponible. La herramienta pasa automáticamente de un modo al otro si no logra iniciar el modo GUI. Si desea obligar a la herramienta a ejecutarse en el modo interactivo de línea de comandos, especifique la opción -console del comando IBMDataMovementTool.

En Windows: IBMDataMovementTool -console On UNIX:
                ./IBMDataMovementTool.sh -console


Se iniciará un proceso paso a paso con opciones interactivas para especificar los parámetros de conexión de las bases de datos de origen y DB2. A continuación se proporcionan datos salientes de muestra de la ventana de la consola:

			[2010-01-10 20.08.05.390] INPUT Directory = .
                [2010-01-10 20.08.05.390] Configuration file loaded:
				'jdbcdriver.properties'
                [2010-01-10 20.08.05.390] Configuration file loaded:
				'IBMExtract.properties'
                [2010-01-10 20.08.05.390] appJar : 
				'C:\IBMDataMovementTool\IBMDataMovementTool.jar'
                Debug (Yes) :
				1 Debug (No) :
				2 Enter a number
				(Default=2) : IS TARGET DB2 LOCAL
                (YES) : 1 IS TARGET DB2 REMOTE (NO) :
				2 Enter a number (Default=1) : Extract DDL
                (Yes) : 1 Extract DDL (No) : 
				2 Enter a number 
				(Default=1) : Extract Data (Yes) : 1
                Extract Data
				(No) : 2 Enter a number
				(Default=1) : Enter # of rows limit to extract.
                (Default=ALL) : Enter # of rows limit to load data in DB2.
				(Default=ALL) : Compress
                Table in DB2 (No) : 1 Compress Table in DB2 (YES) : 
				2 Enter a number (Default=1) :
                Compress Index in DB2 (No) : 
				1 Compress Index in DB2 (YES) : 2 Enter a number
                (Default=1) : 
				******* Source database information: ***** 
				Oracle : 1 MS SQL Server :
                2 Sybase : 3 MS Access Database : 4 MySQL : 5 PostgreSQL : 
				6 DB2 z/OS : 7 DB2 LUW :
                8 Enter a number (Default 1) : 
				DB2 Compatibility Feature (DB2 V9.7 or later) :
				1 No
                Compatibility feature : 
				2 Enter compatibility feature (Default=1) :

Implementación de objetos y carga de datos

Creación de objetos de destino de base de datos

Luego de extraer DDL y DATA, los objetos extraídos pueden implementarse de tres formas distintas en DB2.

  • Haga clic en el botón Deploy DDL/DATA (Implementar DDL/DATA) desde la pantalla GUI
  • Vaya a la pestaña Interactive Deploy (Implementación interactiva) e implemente los objetos siguiendo el proceso paso a paso.
  • Implemente DDL/DATA usando el script de línea de comandos db2gen

Las opciones a seleccionar para la implementación de datos dependen de los requisitos de movimiento de datos y objetos específicos. Si usted desea migrar únicamente objetos PL/SQL DDL y DATA, alcanzará con usar el script db2gen o hacer clic en el botón Deploy DDL/DATA de la GUI.

La opción de implementación interactiva se recomienda si usted desea además implementar objetos PL/SQL como activadores, funciones, procedimientos y paquetes PL/SQL.

La pantalla GUI que muestra la Figura 4 corresponde a la implementación interactiva de DDL y otros objetos de base de datos. La secuencia de eventos a realizar en esta pantalla es la siguiente:

  1. Verifique que está conectado con DB2 usando la pestaña Extract/Deploy (Extraer/Implementar).
  2. Haga clic en la pestaña Interactive Deploy.
  3. Use el botón Open Directory (Abrir directorio) para seleccionar el directorio en funcionamiento que contiene los objetos antes extraídos. Los objetos se leen y listan en una vista de árbol.
  4. Puede implementar todos los objetos presionando el botón Deploy All Objects (Implementar todos los objetos) de la barra de herramientas. La mayoría de los objetos se implementarán con éxito, pero algunos podrán fallar.
  5. Desde la vista de árbol, haga clic en un objeto que no pudo ser implementado y verá el origen del objeto en la ventana del editor. El motivo de la falla se informa en la lista del registro de implementación, como se muestra a continuación.
  6. El modo de compatibilidad de Oracle generalmente permite la implementación de objetos tal cual están. Sin embargo, es posible que existan características no soportadas que no permitan una implementación exitosa en el primer intento. Puede usar el editor para ajustar el código fuente de estos objetos y resolver cualquier problema. Al implementar el objeto luego del cambio, el origen nuevo se guarda junto con una copia de seguridad del origen antiguo.
  7. Para implementar objetos luego de haberlos editado, seleccione un objeto o varios objetos simultáneamente usando la tecla CTRL y haciendo clic en el botón Deploy Selected Objects (Implementar objetos seleccionados) de la barra de herramientas. Las fallas de implementación suelen ocurrir en forma de cascada, esto es que cuando un objeto se implementa correctamente, otros objetos dependientes también se implementarán con éxito.
  8. Repita los pasos 5 a 7 hasta lograr implementar con éxito todos los objetos.
Figura 4. Implementación interactiva de los objetos
Implementación interactiva de los objetos

Comparación de conteos de filas

  • Vaya al directorio raíz del movimiento de datos y ejecute el script rowcount.
  • Se mostrará un informe generado en el archivo "<source database name>.tables.rowcount". El informe contiene conteos de filas de las bases de datos de origen y destino.
			oracle : 
			db2 "TESTCASE"."CALL_STACKS" : 123
                "TESTCASE"."CALL_STACKS" : 123 
				"TESTCASE"."CLASSES" : 401 
				"TESTCASE"."CLASSES" : 401
                "TESTCASE"."DESTINATION" : 513 
				"TESTCASE"."DESTINATION" : 513

Use de canalizaciones para mover datos

Se recomienda usar canalizaciones para mover los datos cuando el tamaño de la base de datos de origen es demasiado grande y no hay espacio suficiente para guardar archivos de datos intermedios.

En sistemas Windows

La herramienta usa Pipe.dll para crear canalizaciones de Windows y confirmar que dll esté ubicado en el mismo directorio donde se encuentra el archivo IBMDataMovementTool.jar.

En sistemas UNIX

La herramienta crea canalizaciones UNIX usando el comando mkfifo para mover datos desde el origen a DB2.

Antes de usar canalizaciones entre las bases de datos de origen y DB2, es necesario tener creada una definición de tabla. Para ello, siga este procedimiento:

  1. Especifique # Extract Rows =1 en la GUI o establezca LimitExtractRows=1 en IBMExtract.properties si está usando la ventana de la línea de comandos.
  2. Haga clic en el botón Extract DDL/Data para descargar los datos o ejecute el script unload de la ventana de la línea de comandos.
  3. Haga clic en el botón Deploy DDL/Data o ejecute el script db2gen de la ventana de la línea de comandos.
  4. Seleccione Use Pipe (Usar canalización) o establezca usepipe=true en IBMExtract.properties si está usando la ventana de línea de comandos.
  5. Haga clic en el botón Extract / Deploy through Pipe Load (Extraer / Implementar a través de carga canalizada) o ejecute el script unload de la ventana de la línea de comandos.
Figura 5. Uso de canalizaciones para mover datos
Uso de canalizaciones para mover datos

Pasos adicionales para DB2 en z/OS

Proceso UNLOAD en z/OS

  • Esta herramienta requiere la ejecución de USS, pero LOAD de DB2 en z/OS no puede usar archivos HFS para cargar los datos. Por este motivo, deberá usar el kit de herramientas JZOS para crear conjuntos de datos PS en z/OS de Unix System Services. Sin embargo, LOAD de DB2 puede usar archivos USS (o HFS) para LOAD CLOBS/BLOBS en DB2. Entonces, crearemos conjuntos de datos PS en z/OS para mover los datos de la base de datos de origen a z/OS y usaremos archivos HFS de Unix System Services para mantener todos los BLOBS/CLOBS.
  • La instrucción LOAD no puede ejecutarse desde USS. Use los procedimientos almacenados SYSPROC.DSNUTILS para ejecutar LOAD, CHECK DATA y RUN STATS.
  • La creación de conjuntos de datos PS resulta un desafío porque deben realizarse asignaciones para cada tabla. No es posible asignar un tamaño fijo con anticipación debido a que el tamaño de la tabla es desconocido y podría desperdiciarse mucho espacio en z/OS. Para evitar los problemas de espacio, use un algoritmo para asignar el tamaño.

Esta herramienta de z/OS puede usarse para realizar el movimiento de datos de una base de datos de origen a DB2 for z/OS. Sin embargo, se requerirán los siguientes pasos adicionales:

  1. Descargue e instale JZOS desde este vínculo de IBM.
  2. Este archivo zip contiene un archivo llamado jzos.pax. Envíe este archivo por FTP al directorio en el que desee instalar JZOS usando Unix System Services en modo binario.
  3. Pase al directorio donde guardó el archivo .pax.
  4. Ejecute el comando: pax -rvf. Esto creará un subdirectorio llamado jzos en el directorio en funcionamiento. Este subdirectorio se denominará <JZOS_HOME>
  5. En el directorio principal del usuario, cree un archivo de nombre .profile basándose en la plantilla detallada abajo y haciendo los cambios correspondientes para ajustarse a su instalación DB2 z/OS.
    						export
    						JZOS_HOME=$HOME/jzos export 
    						JAVA_PATH=/usr/lpp/java/J1.5
                            export 
    						PATH=$JAVA_HOME/bin:$PATH 
    						export
                            CLPHOME=/usr/lpp/db2/db2910/db2910_base/lib/IBM 
    						export
                            CLASSPATH=
    			$CLASSPATH:/usr/lpp/db2/db2910/db2910_base/lib/clp.jar 
    						export
                            CLPPROPERTIESFILE=$HOME/clp.properties export
                            LIBPATH=$LIBPATH:
    						<JZOS_HOME< 
    						alias db2="java
                            com.ibm.db2.clp.db2"
  6. Dependiendo de su entorno, es posible que deba modificar CLPHOME y CLASSPATH. Reemplace <JZOS_HOME> por el directorio apropiado.
  7. En el directorio principal del usuario, cree un nombre de archivo clp.properties basándose en la siguiente plantilla:
    					#Specify
                            the value as ON/OFF or leave them blank 
    						DisplaySQLCA=ON AutoCommit=ON
                            InputFilename= 
    						OutputFilename= 
    						DisplayOutput= 
    						StopOnError= 
    						TerminationChar=
                            Echo= StripHeaders= MaxLinesFromSelect= 
    						MaxColumnWidth=20 IsolationLevel=
                            <SUBSYSTEM_NAME>=<
    						IP address>:<port
                            number>/<location name>,
    						USER,PASSWD Replace items on
                            the last line as appropriate.
  8. Ejecute el comando chmod 777 <JZOS_HOME>/*.so
  9. Ejecute el comando IBMDataMovementTool.sh -console y especifique los valores de los parámetros a través de la respuesta de usuario interactiva.
  10. Se crearán automáticamente IBMExtract.properties, geninput y scripts unload.
  11. El parámetro zdb2tableseries de IBMExtract.properties se usa para especificar el nombre de la serie para los conjuntos de datos PS. Por ejemplo, si su ID TSO fuera DNET770, y este parámetro estuviese establecido en R, el nombre del conjunto de datos PS que se crearía para la primera tabla sería DNET777.TBLDATA.R0000001
  12. El parámetro znocopypend se usa para agregar el parámetro NOCOPYPEND a la instrucción LOAD. Con este parámetro, el DBA de z/OS DB2 puede realizar la copia de seguridad, ya que la tabla no quedará en COPY pending mode (modo pendiente de copia).
  13. El parámetro zoveralloc especifica la proporción en que desea aumentar sus requisitos de asignación de archivos. Con un valor 1, no se realizará ningún aumento. Esta opción podría funcionar en un entorno con suficiente espacio de almacenamiento libre pero, en un entorno más realista, una estimación aconsejable sería 15/11 (1.3636). Se recomienda comenzar con 1.3636 (15/11) e ir reduciendo el valor gradualmente hasta obtener errores de escritura de archivos y allí aumentar un poco el valor. Si conoce el valor del parámetro SMS REDUCE SPACE UP TO, podrá calcular el valor perfecto de overAlloc estableciendo 1 / (1 - (X/100)) (X es el valor de REDUCE SPACE UP TO expresado como un número entero entre 0 y 100). Tome en cuenta que REDUCE SPACE UP TO representa un porcentaje.
  14. El parámetro zsecondary se usa para asignar extensiones secundarias fijas. Comience ingresando un valor 0 y vaya aumentándolo poco a poco hasta que ocurran errores de archivos; cuando obtenga errores, reduzca un poco el valor
  15. Ejecute el script geninput para crear un archivo de entrada para el proceso de descarga.
  16. Ejecute el script unload para generar DDL y DATA.
  17. Ejecute el script generado para crear los datos de carga y DDL en z/OS DB2.
  18. DSNUTILS fallará si no elimina estos conjuntos de datos. El siguiente programa java logra eliminar estos conjuntos de datos intermedios.
    						java -cp
     /u/dnet770/migr/IBMDataMovementTool.jar:$JZOS_HOME/ibmjzos.jar \
     -Djava.ext.dirs=${JZOS_HOME}:${JAVA_HOME}/lib/ext ibm.Cleanup
  19. Luego de completar la carga de datos en tablas DB2 en z/OS, probablemente encontrará los conjuntos de datos que debe eliminar. Use el siguiente programa java para eliminar dichos conjuntos de datos mediante una limpieza.

    Cree un script jd de la siguiente manera:

    		JZOS_HOME=$HOME/jzos
                            JAVA_HOME=/usr/lpp/java/J1.5
                            CLASSPATH=$HOME/migr/IBMDataMovementTool.jar:
    						$JZOS_HOME/ibmjzos.jar
                            LIBPATH=$LIBPATH:$JZOS_HOME 
    						$JAVA_HOME/bin/java -cp $CLASSPATH \
                            -Djava.ext.dirs=${JZOS_HOME}:
    						${JAVA_HOME}/lib/ext ibm.Jd $1

    Cambie el permiso de archivos a 755 y ejecútelo. Obtendrá los datos de salida mostrados a continuación:

    DNET770:/u/dnet770/migr: >./jd USAGE:
                            ibm.Jd <filter_key> USAGE: ibm.Jd "DNET770.TBLDATA.**" USAGE:
                            ibm.Jd "DNET770.TBLDATA.**.CERR" USAGE: 
    						ibm.Jd "DNET770.TBLDATA.**.LERR"
                            USAGE: ibm.Jd "DNET770.TBLDATA.**.DISC"

    Si desea eliminar todos los conjuntos de datos de "DNET770.TBLDATA", use el siguiente comando:

    DNET770:/u/dnet770/migr: >./jd
                            "DNET770.TBLDATA.**"

Planificación para movimientos de datos de gran volumen

La fortaleza de esta herramienta radica en que posibilita movimientos de datos de gran escala. Con esta herramienta se lograron mover 4TB de datos Oracle en solo tres días con una buena planificación y buenos procedimientos. A continuación se proporcionan los consejos y técnicas que lo ayudarán a lograr movimientos de datos de gran escala dentro de la limitación de tiempo a la que esté sujeto.

Requisitos de hardware y planificación de la capacidad

Si bien los requisitos de hardware y la planificación de la capacidad se encuentran fuera del alcance de este artículo, a continuación se proporcionan algunos puntos importantes a tomar en cuenta para estimar el tiempo que insumirá un movimiento de datos de gran escala.

  • Necesitará una buena conexión de red entre los servidores de origen y DB2, preferentemente de 1GBPS o superior. El lapso de tiempo para completar el movimiento de datos estará limitado por el ancho de banda de red con el que cuente..
  • Un servidor de origen con varias CPU le permitirá descargar tablas múltiples en paralelo. Para una base de datos mayor a 1TB, deberá contar con al menos 4 CPU en el servidor de origen.
  • La cantidad de CPU en el servidor DB2 determinará la velocidad del proceso LOAD. Como regla general, la carga de datos en datos insumirá entre un 1/4 y 1/3 del tiempo y el resto del tiempo será empleado por el proceso de descarga.
  • Planifique con anticipación la disposición de la base de datos DB2. Consulte los documentos de mejores prácticas de IBM para DB2.

Consejos y técnicas

  • Interiorícese acerca de la herramienta en el modo de línea de comandos. Use la GUI para generar scripts de movimientos de datos (geninput y unload) y practique la descarga de datos ejecutando el script unload desde la línea de comandos.
  • Extraiga solamente DDL desde el origen estableciendoGENDDL=true y UNLOAD=false en el script unload. Use el DDL generado para planificar el espacio de tablas y el mapeo de tablas. Use otro directorio de salida para almacenar el DDL y los datos generados; hágalo especificando el directorio de destino usando el parámetro -DOUTPUT_DIR en el script unload. La generación del DDL debe efectuarse antes del movimiento de datos final.
  • Use el script geninput para generar una lista de tablas a mover del origen a DB2. Use el parámetro SRCSCHEMA=ALL y DSTSCHEMA=ALL del script geninput para generar una lista de todas las tablas. Edite el archivo para eliminar tablas no deseadas y fracciónelo en varios archivos de entrada para llevar a cabo un movimiento escalonado mediante el cual se descargue del origen y se cargue en el destino paralelamente.
  • Una vez fraccionado el archivo de entrada de tablas (generado a partir del script geninput) en varios archivos, copie el script unload en la misma cantidad de archivos equivalentes, cambie el nombre del archivo de entrada y especifique un directorio distinto para cada proceso de descarga. Por ejemplo, podría crear 10 scripts unload para descargar 500 tablas de cada script unload, lo que sumaría un total de 5000 tablas.
  • Recuerde mover DDL y DATA en pasos separados. En movimientos de datos de gran volumen, no intente realizar estas tareas en un mismo paso.
  • La herramienta descarga datos de las tablas de origen en paralelo controlada por el parámetro NUM_THREADS del script unload. El valor predeterminado es 5. Puede aumentar este valor hasta un nivel en el que el nivel de utilización de CPU en su servidor de origen se encuentre cerca del 90%.
  • Preste atención a las tablas listadas en el archivo de tablas de entrada. El script geninput no cuenta con inteligencia para ordenar las tablas de una forma específica, pero usted deberá ordenarlas a fin de minimizar el tiempo de descarga. Las tablas listadas en los archivos de entrada se alimentan a un grupo de hilos de ejecución mediante un método round-robin. Por esto, podría suceder que todos los hilos finalicen el proceso de descarga menos uno que continúe ejecutándose. Para mantener todos los hilos ocupados, organice el archivo para las tablas en los números de filas en aumento.
  • Podría suceder que todas las tablas terminen de descargarse y algunos hilos se demoren descargando tablas muy grandes. Puede descargar la misma tabla mediante hilos múltiples si especifica la cláusula WHERE correctamente en el archivo de entrada. Por ejemplo:
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1"
    						WHERE id between 1 and 1000000
                            "ACCOUNT"."T1":
    						SELECT * FROM "ACCOUNT".
    						"T1" WHERE id between 1000001 and
                            2000000 "ACCOUNT"."T1":
    						SELECT * FROM "ACCOUNT".
    						"T1" WHERE id between 2000001
                            and 3000000 "ACCOUNT".
    						"T1":SELECT * 
    						FROM "ACCOUNT"."T1"
    						WHERE id between
                            3000001 and 4000000

    Cerciórese de usar las claves correctas en la cláusula WHERE; preferentemente use la clave primaria o un índice único. La herramienta se ocupa de que los scripts LOAD de DB2 adecuados carguen los datos de los archivos múltiples generados por ella. No es necesario realizar ninguna otra configuración para descargar la misma tabla en hilos múltiples, excepto cuando se desee agregar una cláusula WHERE diferente, para lo cual deberán seguirse los pasos antes explicados.

  • Una vez fraccionado el proceso de descarga en varios pasos, puede comenzar a incorporar datos a DB2 simultáneamente, a medida que los lotes terminen de descargar los datos. La clave es usar un directorio de salida separado para cada lote de descarga. En el directorio de salida se generarán todos los archivos necesarios para incorporar datos a DB2. Para DDL, use el script db2ddl generado para crear definiciones de tabla. Para DATA, use el script db2load para cargar los datos en DB2. Si combinó el movimiento de DDL y DATA en un mismo paso, el nombre del script será db2gen.
  • Automatice todo el proceso en sus shell scripts para sincronizar los procesos de descarga y carga. Cada movimiento de datos de gran volumen de Oracle u otras bases de datos a DB2 es único. Descubrir cómo automatizar todas estas tareas pondrá a prueba sus habilidades. Guarde los datos de salida de las tareas de archivos usando el comando tee para poder ir observando el progreso y que los datos de salida se guarden en un archivo de registro.

Realice pruebas simuladas

Se recomienda realizar una prueba simulada de movimiento para chequear la automatización realizada y confirmar la planificación de descarga escalonada desde el origen y la carga en DB2. El grado de personalización se relaciona únicamente con la creación de shell scripts para ejecutar estas tareas en el orden correcto. Siga los pasos detallados a continuación para ejecutar pruebas simuladas:

  1. Copie sus scripts de movimiento de datos y shell scripts de automatización a un directorio de pruebas simuladas.
  2. Estime el tiempo descargando unas pocas tablas grandes en unos pocos hilos y escalone el movimiento de datos según corresponda.
  3. Agregue una cláusula WHERE para limitar la cantidad de filas para probar el movimiento de datos. Por ejemplo, puede agregar una cláusula ROWNUM para limitar la cantidad de filas en Oracle o usar la cláusula TOP para el servidor SQL.
    						"ACCOUNT"."T1":
    						SELECT * FROM 
    						"ACCOUNT"."T1"
                            WHERE rownum <
    						100 "ACCOUNT"."T2":SELECT * 
    						FROM "ACCOUNT"."T2" 
    						WHERE
                            rownum < 
    						100 "ACCOUNT"."T3":
    						SELECT * FROM "ACCOUNT"."T3"
    						WHERE rownum
                            < 100 "ACCOUNT"."T4":
    						SELECT * FROM "ACCOUNT"."T4" WHERE rownum
                            < 100
  4. Practique con sus scripts, haga los cambios necesarios y prepárese para la ejecución final.

Ejecución final

  1. Ya extrajimos DDL y, si fue necesario, realizamos cambios manuales para el mapeo entre tablas y espacios de tablas.
  2. Use el tiempo de inactividad para efectuar el movimiento de datos.
  3. Cerciórese de tener establecidos alrededor de 10000 cursores abiertos en la base de datos Oracle (si éste es su origen).
  4. Observe los datos de salida del archivo de registro.

En los movimientos de datos de gran volumen, lo más importante es el planeamiento, la disciplina y la habilidad de automatizar trabajos. La herramienta proporciona toda la capacidad requerida para este tipo de movimientos. Esta pequeña herramienta ha movido bases de datos de gran tamaño desde una base de datos de origen a DB2.

Soporte de la herramienta

La organización de soporte de IBM no proporciona soporte para esta herramienta. Sin embargo, puede informar errores y problemas, y realizar sugerencias y solicitudes de mejoras en el foro de soporte.

Preguntas frecuentes

Tabla 3. Preguntas frecuentes
Pregunta/ProblemaRespuesta/Solución
Para que esta herramienta funcione, ¿debo realizar alguna instalación en mi servidor de base de datos de origen?Esta herramienta funciona sin necesidad de realizar ninguna instalación en su servidor de base de datos.
¿Qué plataformas soporta esta herramienta?Windows, z/OS, AIX, Linux, UNIX, HP-UX, Solaris, Mac y cualquier otra plataforma que tenga JVM.
Estoy ejecutando la herramienta desde una ventana shell segura en mi plataforma Linux/Unix y veo algunos mensajes en la línea de comandos pero no encuentro la GUI y parece que la herramienta se colgó.La ventana GUI se ha abierto en un servidor con capacidad de visualización en base a sus configuraciones de DISPLAY. Exporte correctamente sus configuraciones de DISPLAY. Consulte a su administrador de sistemas Unix.
Estoy intentando mover datos desde PostgreSQL y no veo el driver PostgreSQL de JDBC adjunto con la herramienta.No se proporcionan drivers JDBC con la herramienta por cuestiones de licencias. Obtenga el driver de base de datos JDBC de su software con licencia.
No es posible otorgar DBA al usuario que está realizando la extracción de datos desde la base de datos Oracle ¿Cómo puedo usar la herramienta?Como mínimo, el usuario deberá tener otorgados el rol SELECT_CATALOG_ROLE y privilegios SELECT sobre las tablas usadas en la migración.
¿A qué bases de datos se puede conectar esta herramienta?A cualquier base de datos que tenga un driver JDBC tipo IV. Por lo tanto, puede conectarse con MySQL, PostgreSQL, Ingres, SQL Server, Sybase, Oracle, DB2 y otros. También puede conectarse con una base de datos que posea un conector ODBC-JDBC, en este caso podrá también realizar movimientos desde bases de datos Access.
¿Qué versión de Java necesito para ejecutar esta herramienta?Necesita como mínimo Java 1.5 para ejecutar esta herramienta. S requiere Java 1.5 básicamente por el funcionamiento de la porción GUI de la herramienta. Si realmente necesita soporte para Java 1.4.2, comuníquese conmigo y compilaré la herramienta para Java 1.4.2, pero no podrá ejecutar la GUI para la creación de los scripts de drivers de movimientos de datos.

Determine la versión de Java ejecutando este comando:


$ java -version
C:\>java -version
¿Cómo verifico la versión de la herramienta?Ejecute IBMDataMovementTool -version en Windows o ./IBMDataMovementTool.sh -version en Linux/UNIX
Al ejecutar la herramienta, obtengo el error "Unsupported major.minor version 49.0" o "(.:15077): Gtk-WARNING **: cannot open display: " ¿Qué significa?Está usando una versión de Java anterior a 1.5. Instale una versión de Java posterior a 1.4.2 para solucionar este problema. Se recomienda instalar IBM Java.
¿Qué información necesito para que los servidores de base de datos de origen y DB2 ejecuten esta herramienta?Deberá conocer la dirección IP, el número de puerto, el nombre de la base de datos, el ID de usuario y la contraseña de las bases de datos de origen y DB2. El ID de usuario de la base de datos de origen deberá contar con privilegios DBA y el privilegio SYSADM sobre la base de datos DB2.
Estoy ejecutando la herramienta desde una estación de trabajo Windows y su ejecución es extremadamente lenta ¿Qué puedo hacer?La memoria predeterminada asignada a la herramienta desde el script de comando IBMDataMovementTool.cmd o IBMDataMovementTool.sh es de 990MB con el uso de switch –Xmx para la JVM. Intente reduciendo esta memoria, ya que posiblemente cuente con menos memoria en su estación de trabajo.
Estoy efectuando un movimiento de datos de un servidor SQL a DB2 ¿Cómo obtengo el campo TEXT para ir a VARCHAR en DB2?Especifique mssqltexttoclob=true en el archivo IBMExtract.properties.
Estoy efectuando un movimiento de datos de Sybase a DB2 y mis procedimientos T-SQL no se movieron a DB2.El propósito de esta herramienta es únicamente el movimiento de DDL y DATA. Use MTK para mover procedimientos / disparadores.
Estoy efectuando un movimiento de DDL de Sybase a DB2 y mis objetos Sybase están en un archivo. No encuentro la forma de especificar el archivo DDL como origen de datos.El propósito de esta herramienta es el movimiento de datos a alta velocidad y por esta razón no existe una capacidad para transformar un archivo DDL de una base de datos a DB2. Sin embargo, puede usar IBM InfoSphere Data Architect para transformar un DDL de base de datos de origen a base de datos de destino.
Estoy efectuando un movimiento desde MS Access a DB2 y no veo todos los índices, etc. en el DDL generado.El conector básico ODBC-JDBC se usó para realizar la conexión con bases de datos MS Access. Necesitará otro driver comercial de JDBC si busca obtener el conjunto completo de DDL. Pruebe el driver de JDBC HXTT para MS Access. Si usa el driver HXTT, deberá especificar DBVENDOR=hxtt en el script unload generado en lugar de access.
Estoy efectuando un movimiento de datos de Sybase a DB2 usando la herramienta y obtengo muchos errores.Es probable que su base de datos Sybase no esté habilitada para el soporte JDBC requerido. Consulte a su DBA de Sybase para verificar que su base datos Sybase tenga instalados los procedimientos almacenados JDBC correctos.
Estoy efectuando un movimiento de datos de MySQL a DB2 y me estoy quedando sin memoria.Pruebe distintos valores con FETCHSIZE=nnn en el script unload generado y ejecute el movimiento de datos desde la línea de comandos. Si usa la herramienta GUI, se sobrescribirá el script unload.
Estoy efectuando un movimiento de datos de Oracle a DB2 y veo que se requieren 3 archivos jar para el movimiento de datos. Creí que lo único que necesitaba para el movimiento de datos era un driver de JDBC ¿A qué se deben estos archivos jar?Los archivos JAR adicionales se requieren mayormente para tipos de datos Oracle XML. Busque estos archivos en su directorio de instalación de Oracle.
Quiero que el tipo de datos CLOB de Oracle pase a DBCLOB en DB2.Vaya al archivo IBMExtract.properties y establezca DBCLOB=true.
Estoy usando la herramienta para mover datos de Oracle a DB2 y obtengo muchos errores Oracle SQL avisando que no se encontró una tabla.El ID de usuario que se conecta a Oracle debe tener otorgados el SELECT_CATALOG_ROLE y privilegios SELECT sobre las tablas.
No quiero que NCHAR y NVARCHAR2 pasen como GRAPHIC o VARGRAPHIC en DB2. Quiero que pasen como CHAR y VARCHAR2 porque creé la base de datos DB2 como UTF-8.Vaya al archivo IBMExtract.properties y establezca GRAPHIC=false.
¿Puedo mover datos de una base de datos Oracle a DB2 de una versión inferior a V9.7/V9.5?Sí, vaya a IBMExtract.properties y establezca db2_compatibility=false
Veo que la herramienta movió el NUMBER(38) de Oracle a NUMBER(31) y tengo entendido que DB2 soporta sólo hasta 31. No quiero redondear para abajo y quisiera convertirlo a DOUBLE.Vaya a IBMExtract.properties y establezca roundDown_31=false.
Estoy obteniendo muchos datos rechazados ¿Cómo hago para colocar estos datos rechazados en un archivo para poder analizar el motivo de rechazo?Vaya a IBMExtract.properties y establezca dumpfile=true.
Estoy intentando cargar datos desde una estación de trabajo al servidor DB2 y obtengo errores ¿Sólo es posible ejecutar la herramienta desde el servidor?Es preferible ejecutar la herramienta desde el servidor DB2 para extraer datos de la base de datos de origen y evitar la participación de un servidor intermedio. Sin embargo, si desea ejecutar esta herramienta desde un servidor intermedio, puede especificar REMOTELOAD=TRUE en el script unload generado. Recuerde que la utilidad LOAD de DB2 requiere que el servidor tenga disponibles datos BLOBS/CLOBS/XML. Deberá montar los directorios con la misma convención de nombre del servidor DB2 de destino.
Sólo puedo iniciar sesión en mi servidor DB2 a través de un shell SSH y no deseo habilitar X-Windows para ejecutarse en el servidor DB2 ¿Cómo ejecuto la herramienta GUI para mover DDL y DATA?Ejecute IBMDataMovementTool.sh desde su SSH y, si el sistema no soporta gráficos, la herramienta pasará automáticamente al ingreso por línea de comandos. Si por algún motivo la herramienta no pasa al modo de línea de comandos, especifique -console option en el comando IBMDataMovementTool.sh y esto obligará a la herramienta a ejecutarse en el modo de línea de comandos interactivo. El modo de línea de comandos no es más que una manera de reunir los datos de entrada y generar los scripts necesarios para el movimiento de datos. La GUI se usa simplemente para generar los scripts. El trabajo real se realiza mediante los scripts.
¿Por qué aunque no creó la base de datos DB2 a través del script pregunta el nombre de la base de datos?Los DBA solemos crear nuestras bases de datos en base a la información de rutas de almacenamiento. Sin embargo, siempre creamos los espacios de tablas necesarios para que DB2 ubique automáticamente las tablas en el espacio de tablas correcto. Considere leer los documentos de mejores prácticas de IBM para planificar detenidamente la creación de su base de datos. Se recomienda crear la base de datos DB2 con un tamaño predeterminado de 32K.

Agradecimientos

Muchos integrantes de IBM de todo el mundo proporcionaron valiosos comentarios acerca de la herramienta. Sin sus comentarios, la herramienta en su forma actual no hubiera sido posible. Agradezco la gran ayuda, las opiniones, las sugerencias y la orientación proporcionada por las siguientes personas:

  • Jason A Arnold
  • Serge Rielau
  • Marina Greenstein
  • Maria N Schwenger
  • Patrick Dantressangle
  • Sam Lightstome
  • Barry Faust
  • Vince Lee
  • Connie Tsui
  • Raanon Reutlinger
  • Antonio Maranhao
  • Max Petrenko
  • Kenneth Chen
  • Masafumi Otsuki
  • Neal Finkelstein

Exención de responsabilidad

Este artículo contiene una herramienta. IBM le otorga a usted (el "Licenciatario") una licencia no exclusiva y sin pago de regalías para usar la herramienta. No obstante, la herramienta se proporciona tal como está y sin ninguna garantía, ya sea EXPRESA O IMPLÍCITA, NO INCLUYENDO NINGUNA GARANTÍA IMPLÍCITA DE COMERCIABILIDAD, APTITUD PARA UN FIN DETERMINADO O NO VIOLACIÓN. IBM Y SUS EMISORES DE LICENCIAS NO ASUMEN RESPONSABILIDAD ALGUNA POR DAÑOS QUE PUDIERE SUFRIR EL LICENCIATARIO COMO RESULTADO DEL USO DEL SOFTWARE. NI IBM NI SUS EMISORES DE LICENCIAS SERÁN RESPONSABLES BAJO NINGUNA CIRCUNSTANCIA DE PÉRDIDAS DE INGRESOS, GANANCIAS O DATOS, NI DE DAÑOS DIRECTOS, INDIRECTOS, ESPECIALES, CONSECUENCIALES, INCIDENTALES O PUNITIVOS, CUALQUIERA FUERE SU CAUSA Y BAJO CUALQUIER PRINCIPIO DE RESPONSABILIDAD, QUE SURGIEREN DEL USO O DE LA IMPOSIBILIDAD DE USAR SOFTWARE, AÚN CUANDO SE LE HUBIERE INFORMADO A IBM LA POSIBILIDAD DE DICHOS DAÑOS.

Recursos

Aprender

Obtener los productos y tecnologías

Comentar

Más descargas

  • IBM Data Movement Tool (Con frecuencia, luego de depuraciones de errores y nuevas mejoras, se cargan nuevas construcciones de esta herramienta. Haga clic en Help > Check New Version(Ayuda > Buscar nueva versión) en la GUI o ingrese el comando ./IBMDataMovementTool.sh -check para averiguar si se encuentra disponible una construcción nueva para descargar. Encuentre el número de construcción de la herramienta en la opción de menú Help > About(Ayuda > Acerca de) o ingresando el comando ./IBMDataMovementTool.sh -version. Esta herramienta usa paquetes JGoodies Forms 1.2.1, JGoodies Look 2.2.2 y JSyntaxPane 0.9.4 de la interfaz GUI.)

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt
ArticleID=479807
ArticleTitle=DB2 9.7: Herramienta IBM Data Movement
publish-date=04012010