Como cargar datos a tablas DB2/400 desde otros

Anuncio
http://www.teknodatips.com.ar
Teknoda - Notas técnicas – Tips de AS400 – iseries –
System i
Tip en detalle Nro. 29
(Lo nuevo, lo escondido, o simplemente lo de siempre pero bien explicado)
"Tips en breve/Tips en detalle" se envía con frecuencia variable y absolutamente sin cargo como un servicio a nuestros
clientes AS/400. Contiene principalmente notas técnicas y no contiene mensajes publicitarios.
Este mensaje se envía en concordancia con la nueva legislación sobre correo electrónico: Por sección 301,párrafo (a) (2)
(c) de S.1618 bajo el decreto s.1618 titulo 3º aprobado por el 105 congreso base de las normativas internacionales sobre
SPAM, este e-mail no podrá ser considerado SPAM mientras incluya una forma de ser removido
Conteste este mail con asunto “REMOVER” si no desea recibir más esta publicación. Si desea suscribir otra dirección
de e-mail para que comience a recibir los “Tips”, envíe un mensaje desde esa dirección a [email protected]
aclarando nombre, empresa y cargo del suscriptor.
Cómo cargar datos a tablas DB2/400 desde otros entornos con
el comando CPYFRMIMPF
Tema:
Base de Datos, Interfaces, Aplicaciones, CL, Comandos.
Utilidad:
Como introducir datos íntegros al DB2/400 generados fuera de este entorno.
Nivel:
Intermedio/Avanzado.
Lista de Tips publicados hasta la fecha:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Modificación de los parámetros por default que rigen en los comandos del OS/400
Restricción de comandos pesados a modalidad batch
Cómo generar un entorno de prueba para año 2000
Cómo salvar y restaurar spool
Cómo agregar pantallas de confirmación/validación para comandos delicados
Defragmentación del espacio en disco no utilizado : STRDSKRGZ, ENDDSKRGZ
Manipulación de bases de datos desde programas CL, a través de Query/400
Generación de spool AS/400 en formato PDF (Adobe Acrobat Reader) para almacenar en CD´s
Cómo proteger columnas de un archivo físico o lógico
Cómo cambiar la pantalla de signon
Cómo automatizar transferencias de archivos con TCP/IP desde AS/400
Control de accesos sobre archivos de spool
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Aproveche lo que ya tiene: FILE SERVING con NETSERVER/400
EMULACION 5250 vía Internet con lo que ya tiene instalado
Editor alternativo: Comando EDTF (Edit File)
Auditoría sobre objetos en AS/400
Cómo personalizar los comandos del menú de petición del sistema
Acceso a archivos multimiembros en un entorno cliente/servidor o SQL
Cómo agregar opciones de usuario al producto PDM
Auditoría sobre usuarios en AS/400
Cómo obtener línea de comandos en pantallas que no la tienen.
Cómo enviar por e-mail objetos de QSYS.LIB
Cómo transferir archivos de spool a la PC usando Operations Navigator
Qué es el IFS y cómo accederlo
Recursos y curiosidades de la programación CL – Parte I
Cómo gestionar y controlar la seguridad a través del menú SECTOOLS – Parte I
Vuelco de spool a archivos de base de datos en forma automática, usando COLAS DE DATOS
Recursos y curiosidades de la programación CL - Parte II
Temas de próximos tips:
•
•
Consideraciones sobre el menú SECTOOLS.
Cómo rutear usuarios a subsistemas según el nombre y no el dispositivo
Resumen ejecutivo e Introducción
El mandato CPYFRMIMPF (Copy From Import File) es un potente y elegante comando del CL/400 que
permite introducir datos en las tablas físicas del DB2/400 desde archivos planos, tanto ASCII como
EBCDIC, en forma relativamente inteligente, esto es, ejecutando validaciones, “parseando” y convirtiendo los
campos, y generando un registro de errores. A través de este comando es posible entre otras cosas , “importar”
datos desde archivos generados en otras plataformas, por ejemplo, desde SQL Server, Access, Excel, FoxPro,
mejorando la mayoría de las herramientas anteriores.
A diferencia del CPYF (Copy File), que puede generar tablas DB2/400 desde archivos físicos de fuente
(*FILE PF-SRC), el CPYFRMIMPF puede tomar archivos ASCII del Integrated File System ( Ver Tip nro 24
– Qué es el IFS y cómo accederlo), admitiendo muchas variantes de formato para el separador de campos, el
delimitador de strings y el fin de registro. Esto lo hace compatible con casi cualquier herramienta de PC, ya
que abarca los típicos formatos .csv (comma separated values) o .txt.
A diferencia de los File-Transfer o el FTP, el CPYFRMIMPF actúa dentro del mismo sistema, es decir,
tomando los datos del IFS. Este comando tiene utilidad real cuando se utiliza en combinación con NetServer,
es decir, cuando el AS/400 se usa como servidor de disco y se definen carpetas de archivos o unidades lógicas
(F:, G:) en el AS/400 ( Ver Tip nro 13 - Aproveche lo que ya tiene: FILE SERVING con NETSERVER/400).
Los archivos a copiar deben copiarse al IFS a través de Netserver o bien generarse directamente allí dentro.
En uno u otro caso, esto es extremadamente rápido y simple. Los tiempos de ejecución del CPYFRMIMPF
son notablemente más eficientes que los de cualquier variante tipo SQL, ODBC o File Transfer.
Existe el mandato asociado llamado CPYTOIMPF que permite realizar el mismo proceso en sentido inverso,
es decir, exportar datos desde el DB2/400 en formato delimitado por comas o similar hacia otras bases de
datos, data warehouses, etc.
Si bien el CPYFRMIMPF ofrece varias formas de explotación, en el presente tip se analizarán los parámetros
básicos a utilizar para poder realizar una copia exitosa.
Archivo origen y archivo destino de la copia
Antes de comenzar con el proceso de importación, es necesario comprender algunos conceptos que se
utilizarán en el resto del tip.
Archivo origen o from file: es el archivo que contendrá los registros a importarse. Este archivo puede ser
un stream file (parámetro FROMSTMF) o un *FILE PF-DTA (parámetro FROMFILE). En el caso de ser
un stream file (lo que cubrirá este tip) el mismo puede generarse a través de las facilidades de
exportación de los distintos productos de software de PC (Access, Excel, Foxpro, etc). El formato
comúnmente usado es el denominado .csv (comma separated values), donde el carácter “,” actúa como
separador de campos. Existe también la opción de generar archivos .txt, donde además se selecciona el
tabulador como separador de campos. Para que la importación resulte satisfactoria es necesario tener
conocimiento de la información almacenada dentro de las tablas y de su formato. Por ejemplo:
datos núméricos o alfanuméricos, valores enteros o con decimales, fechas, horas, longitudes de los
campos, cuál es el carácter separador de decimales, etc.
Otros tipos de archivo origen soportados: archivos físico de fuentes, archivos DDM, archivos físicos
distribuídos, archivos físicos descriptos por programas, archivos lógicos de formato simple, archivo de
cinta. Para cada uno de ellos, las especificaciones del comando pueden ser variadas.
Archivo destino o tofile: es el archivo de base de datos (objeto de tipo *FILE) que recibirá los registros
a copiar. Este archivo debe existir antes de la ejecución del comando. Puede crearse a partir de la
definición de un fuente DDS o a través de las facilidades de creación de tablas del Operations Navigator.
La tabla creada deberá tener un formato acorde a los datos que recibirá. Es importante destacar que,
si el archivo destino tiene restricciones referenciales y triggers definidos sobre él, éstos actuarán de
acuerdo a las restricciones ya establecidas, en el momento que la copia se realice. Observar su incidencia
en la performance.
Otros tipos de archivo destino soportados: archivos físico de fuentes, archivos DDM, archivos físicos
distribuídos, archivos físicos descriptos por programas, archivos físicos descriptos en forma externa.
En la próxima sección se analizará un ejemplo de importación de archivo con CPYFRMIMPF.
Utilización del comando CPYFRMIMPF
Los siguientes son los pasos necesarios para realizar una importación de datos a una tabla del DB2/400
utilizando CPYFRMIMPF:
1.
Generar un archivo con la herramienta de PC deseada que contendrá los datos a importar al
AS/400. De acuerdo al separador de campos que se haya determinado usar (“,” o tabulaciones), se
generan archivos con extensión .csv o .txt respectivamente. Si la información de un determinado
campo incluye el caracter “ , ”, deberá seleccionarse .txt con tabulaciones para que la interpretación de
campos sea correcta. Otra consideración es cuál es el delimitador de strings que se utiliza. Existen
productos que establecen el uso de las comillas (“) como delimitador de campos de caracteres por
default, pero se pueden seleccionar otros delimitadores.
Tener en cuenta además que el mandato CPYFRMIMPF exige que el archivo origen esté almacenado
en el IFS (Integrated File System). En el momento de su generación, se puede almacenar en el disco de
la PC y luego transferirlo al IFS, o salvarlo directamente en un directorio compartido del IFS. Estas
posibilidades están naturalmente presentes cuando se trabaja con NetServer. También es posible
realizar la transferencia con cualquier otra herramienta de file transfer.
2.
Crear el archivo destino de la copia. Este archivo es un *FILE PF-DTA, que puede crearse a partir
de la definición de un fuente DDS o a través de las facilidades de creación de tablas del Operations
Navigator. Recordar que la tabla creada deberá tener un formato acorde a los datos que recibirá.
3.
Ejecutar el comando CPYFRMIMPF con los siguientes parámetros:
Copiar de archivo importación (CPYFRMIMPF)
Teclee elecciones, pulse Intro.
A
Archivo continuo origen
. . . . > '/paraimps/prods.txt'
Desde archivo:
Archivo . . . . . . . . . . .
Biblioteca . . . . . . . . .
Miembro . . . . . . . . . . .
B
A archivo de base de
Archivo . . . . .
Biblioteca . . .
Miembro . . . . .
datos:
. . . . . . > PRODUCTOS
. . . . . . >
QGPL
. . . . . .
*FIRST
Sustituir o añadir registros . .
Long registro arch continuo . .
C
Delimitador de registro
E
F
*ADD
*TOFILE
. . . . > *CRLF
Formato reg arch importación . .
D
*LIBL
*FIRST
*DLM
Nombre
Nombre, *LIBL, *CURLIB
Nombre, *FIRST
Nombre
Nombre, *LIBL, *CURLIB
Nombre, *FIRST
*ADD, *REPLACE, *UPDADD
Número, *TOFILE
Valor tipo carácter, *ALL...
*DLM, *FIXED
Delimitador de serie . . . . . . > *NONE
Valor tipo carácter, *NONE
Eliminar blancos iniciales . . .
*LEADING, *NONE
*LEADING
Delimitador de campo . . . . . . > *TAB
Valor tipo carácter, *TAB
Coma decimal . . . . . . . . .
Formato de fecha . . . . . . .
Formato de hora . . . . . . .
Copiar desde número registro:
Copiar desde número registro
Número de registros a copiar
Errores permitidos . . . . . .
Archivo de registro errores:
Archivo . . . . . . . . . .
Biblioteca . . . . . . . .
Miembro . . . . . . . . . .
Sustituir o añadir registros .
Sustituir valores nulos
.
.
.
*PERIOD
*ISO
*ISO
*PERIOD, *COMMA
*ISO, *USA, *EUR, *JIS...
*ISO, *USA, *EUR, *JIS, *HMS
.
*FIRST
*END
*NOMAX
Número, *FIRST
Número, *END
Número, *NOMAX
*NONE
Nombre, *NONE
Nombre, *LIBL, *CURLIB
Nombre, *FIRST
*ADD, *REPLACE
.
.
.
.
*ADD
. . . . > *FLDDFT
*NO, *FLDDFT
Final
F3=Salir
F4=Solicitud
F5=Renovar
F13=Cómo utilizar esta pantalla
F12=Cancelar
F24=Más teclas
Observaciones:
A) Archivo continuo origen: permite especificar el path del IFS donde el archivo a importar está
localizado. Este parámetro es excluyente con el parámetro Desde Archivo (palabra clave FROMFILE).
B) A archivo de base de datos: nombre del archivo destino que contendra los registros a importar. Es el
objeto *FILE PF-DTA creado en el paso 2 de este procedimiento. Este parámetro es excluyente con el
parámetro Desde archivo (palabra clave FROMFILE). En la sección anterior existen otras posibilidades
para este parámetro. También es posible especificar el miembro que contendrá los nuevos registros; en
caso de no existir, es automáticamente creado.
Observar el parámetro Sustituir o añadir registros. El valor *REPLACE “pisa” los registros existentes
en el miembro seleccionado. La opción *ADD agrega directamente los datos al final de los ya existentes.
Con *UPDADD, agrega los nuevos registros, y actualiza los ya existentes.
C) Delimitador de registro: especifica el delimitador de registro que se usó en el archivo origen.
Comúnmente se utiliza *CRLF.
D) Delimitador de serie: indica, en el archivo origen, cuál es el delimitador que se utiliza para los campos
de caracteres. Esto es dependiente de cómo se haya generado el archivo origen. Este parámetro fue
establecido en *NONE, porque los campos de caracteres no fueron generados con delimitadores.
E) Delimitador de campo: establece el delimitador de campo que se utilizó en el archivo origen. Este
valor se usa para determinar dónde finaliza un campo y comienza el próximo. El delimitador default es la
“ , ” (válido si el archivo origen tiene extensión .csv). Para el caso de los .txt, el delimitador es el
tabulador (valor *TAB). Si el software de PC con el cual se realiza la generación del archivo origen
acepta otros caracteres como separadores de campos, éste deberá ingresarse aquí.
El parámetro Formato reg arch importación con el valor *DLM, produce la aparición de los
parámetros: Delimitador de serie y Delimitador de campo. *DLM indica que el archivo origen contiene
caracteres delimitadores que deberán interpretarse para que la importación sea exitosa.
F) Sustituir valores nulos: especifica si los valores nulos de los campos serán reemplazados en el archivo
destino cuando se copian los registros. El valor *NO indica que los valores nulos no serán reemplazados.
Si se detecta un valor nulo, cuando graba un nuevo registro, un mensaje de error es enviado y la
operación de copia falla. Si el valor para este parámetro es *FLDDFT, se almacena en el campo el valor
default establecido basado en el tipo de campo o el valor default definido en las DDS’s. *FLDDFT es
necesario cuando se especificó, en el momento de crear el archivo destino, que los campos deben
contener valores.
En el paso F) terminan las observaciones sobre la pantalla del comando presentada previamente.
4.
Una vez que se presionó “Intro” y la operación de copia comienza aparece un mensaje de estado que
avisa que se están copiando los registros. Cuando el archivo origen es un stream file ubicado en el IFS,
durante el proceso de copia será creado un archivo físico temporario para contener la información del
archivo origen. Este archivo temporario será creado con el nombre QACPxxxxxx en la biblioteca
QRECOVERY, donde xxxxxx es un nombre generado por el sistema. La información será copiada
desde el archivo temporario al archivo destino. Luego que la copia finaliza, el archivo temporario es
automáticamente eliminado por el sistema.
El mensaje de escape CPF2817 es enviado ante diversas condiciones de error que pueden ocurrir
durante la copia. Presionar ayuda sobre el mismo y observar el código de razón que informa, con más
precisión, los motivos de la falla.
También, con respecto al manejo de errores, es importante observar los parámetros Errores
permitidos y Archivo de registro errores. El primero de ellos especifica el número máximo de
errores recuperables de lectura y grabación sobre el archivo destino que se toleran durante la copia. Si
el valor para este parámetro es “0”, no se permiten errores durante la ejecución del comando. El valor
*NOMAX establece que la operación de copia continúe, independientemente de la cantidad de errores
que se produzcan.
El parámetro Archivo de registro de errores, se puede utilizar para especificar el nombre de un
archivo físico de fuentes (*FILE PF-SRC) donde se almacenará el log de errores de la copia. Los
registros que no se copiaron debido a algún inconveniente, se almacenarán en este archivo. De esta
manera, fácilmente se puede determinar cuáles registros no se copiaron y corregirlos manualmente o
procesarlos con alguna herramienta.
5.
Verificar con QUERY/400 o simplemente DSPPFM que los registros copiados están almacenados en
el archivo destino, y que la interpretación de los campos se realizó correctamente.
Consideraciones de Performance
Para mejorar la performance de la copia tener en cuenta lo siguiente:
•
Suprimir cualquier archivo lógico conectado con el archivo destino antes de realizar la ejecución del
comando CPYFRMIMPF.
•
Remover todas las restricciones y triggers que pudiera tener el archivo destino antes de realizar la
ejecución del comando CPYFRMIMPF.
•
Asegurarse que los registros del archivo origen se van a copiar correctamente, intentando primero hacer
una copia de algunos pocos registros, usando el parámetro Copiar desde número registro (palabra clave
FROMRCD) y la opción número de registros, antes de copiar todos los registros.
•
Usar el parámetro ERRLVL(*NOMAX) después de asegurarse que los datos se van a copiar
correctamente.
•
Una importante característica del comando CPYFRMIMPF es la habilidad de copiar la información del
archivo origen en paralelo. Para lograr ésto se necesita usar el comando CHGQRYA (Change Query
Attributes). El número de tareas usado para realizar la copia está determinado por el parámetro Grado de
proceso en paralelo (palabra clave DEGREE) de este comando y además tiene que estar instalada la
opción del sistema DB2 Symmetric Multiprocesing para OS/400.
Para tener en cuenta...
•
En V4R2 del OS/400, el comando CPYFRMIMPF está presente, pero con posibilidades limitadas.
Tampoco está incluido en la lista de comandos relacionados con “copiar” (GO CMDCPY).
•
El comando CPYFRMIMPF puede ejecutarse en forma batch y también incluírse dentro de
programas CL. Esto brinda la posibilidad de automatizar el proceso de copia y además planificarla.
•
Si el parámetro Formato reg arch importación está establecido en *FIXED y la información está
en columnas fijas en cada registro (no se usan delimitadores), la descripción del formato de los datos
debe estar contenida en el miembro de archivo identificado por el parámetro Archivo de definición
de campos (palabra clave FLDDFNFILE).
•
El comando CPYFRMIMPF posee un grupo de parámetros que dan la posibilidad de especificar, en
el archivo origen, cuál es el caracter que se utilizó como punto decimal, cuál es el formato de fecha
y su separador, el formato de hora para los campos hora y su separador.
•
Si en el parámetro Sustituir o añadir registros se especifica *ADD o *UPDADD y el archivo
destino no contiene registros, la operación se completa normalmente. Si, en cambio, se especifica
*REPLACE y el archivo destino no contiene registros, la operación de copia finaliza de forma
anómala.
http://www.teknodatips.com.ar Copyright Febrero 2002 Teknoda S.A. - AS/400 y OS/400 son marcas
registradas de IBM.
Dudas o consultas a [email protected].}
Descargar