Controlador DB2 for z/OS
Esta documentación explica la implementación del controlador DB2 for z/OS y cómo los parámetros de conexión se corresponden con los campos de la interfaz de usuario en la aplicación Gigantic.
Parámetros de Conexión
En la lista de controladores aparece como DB2 Z/OS. Los dos modos de conexión usan los mismos campos.
| Campo UI | Implementación Técnica | Descripción | Requerido | Valor por Defecto |
|---|---|---|---|---|
| Modo de backend | backendMode en el datasource, que llega al controlador como mode | Cómo se conecta Gigantics a DB2 for z/OS. Ver Modos de Conexión | No | IBM-DB |
| Host | host | El nombre de host o dirección IP del servidor DB2 for z/OS | Sí | localhost |
| Puerto | port | El puerto TCP/IP (DRDA) en el que escucha el subsistema DB2. Cambiar el modo de backend no lo cambia | Sí | 50000 |
| Base de Datos | DATABASE= en la cadena de conexión de IBM-DB, database en JS390 | El nombre de ubicación (location) del subsistema DB2 | Sí | Ninguno (debe ser especificado) |
| Esquema | schema (dbSchema) | El esquema a usar para consultas y extracción de metadatos | Sí | Ninguno (debe ser especificado) |
| Nombre de Usuario | user | Usuario de base de datos para autenticación | Sí | Ninguno (debe ser especificado) |
| Contraseña | password | Contraseña para el usuario de base de datos | Sí | Ninguno (debe ser especificado) |
Nota: el formulario rellena el Puerto con 50000. Los controladores usan el puerto 5025 solo cuando no les llega ningún puerto.
Modos de Conexión
El controlador puede llegar a DB2 for z/OS de dos formas. El modo se elige en el campo Modo de backend, en la sección General del formulario del tap o del sink, justo debajo de Driver. El campo solo aparece cuando el controlador es DB2 Z/OS.
| Opción de Modo de backend | mode | Qué usa | Qué necesita en el host de Gigantics |
|---|---|---|---|
| IBM-DB (por defecto) | ibmdb | El módulo ibm_db de Node.js (IBM Data Server Driver for ODBC and CLI) sobre DRDA | Nada más, pero sí una licencia de DB2 Connect (ver Requisitos de Licencia DB2 z/OS) |
| JS390 | js390 | La librería js390: JavaScript puro, habla DRDA directamente con DB2 for z/OS | Nada |
Los dos modos se conectan al mismo puerto DRDA del subsistema DB2, el del campo Puerto.
Los taps y sinks nuevos empiezan con IBM-DB. Un datasource guardado sin modo, como uno creado antes de que existiera el campo, también usa ibmdb. Una clave mode en Parámetros Personalizados tiene prioridad sobre el campo, porque los Parámetros Personalizados se aplican al final.
IBM-DB
Es el modo por defecto. Gigantics se conecta con el módulo ibm_db, el controlador CLI de IBM.
- Conectar desde Linux, Windows o macOS a DB2 for z/OS con
ibm_dbrequiere una licencia de DB2 Connect. Sin ella el servidor responde con SQL1598N. Ver Requisitos de Licencia DB2 z/OS. - Las palabras clave CLI adicionales, como las de SSL, se indican en el Parámetro Personalizado
connectionString. - Por defecto guarda en búfer hasta 60.000 filas al leer y escribe en lotes de 60.000 filas (las cargas update, en lotes de 500).
- Las cargas merge copian cada lote a una tabla temporal global declarada (
SESSION) y ejecutan unMERGEdesde ella. Las cargas update ejecutan unMERGEdesde losVALUESde cada lote.
JS390
Gigantics habla directamente con DB2 for z/OS mediante js390, un cliente DRDA escrito en JavaScript, así que no hay que instalar nada en el host de Gigantics y no se carga ningún módulo nativo. No usa el controlador CLI de IBM, así que el archivo de licencia DB2 Connect del lado del cliente que se describe más abajo no se aplica.
- Indica
secure: trueen Parámetros Personalizados para conectar con TLS. El Puerto debe ser entonces el puerto TLS del subsistema DB2. - Cada sentencia se confirma (commit) al ejecutarse.
- Por defecto escribe en lotes de 4.000 filas. Cada lote es atómico: si falla una fila, se deshace el lote entero y el error muestra el código SQL de DB2 con su descripción.
- Las cargas update y merge ejecutan un
MERGEcon las filas de cada lote comoVALUES, sin tabla temporal, una forma que también acepta DB2 for z/OS V10. - Los Parámetros Personalizados
connectionStringyconnectParamsde IBM-DB no se usan.
Elígelo cuando no quieras instalar el controlador CLI de IBM ni una licencia de DB2 Connect en el host de Gigantics.
Diferencias entre Modos
| IBM-DB | JS390 | |
|---|---|---|
| Módulo nativo y controlador CLI de IBM | Sí (ibm_db) | No |
| Usa un archivo de licencia DB2 Connect del lado del cliente | Sí | No |
| Reanudación tras la última clave guardada y rangos paralelos | Sí | Sí |
| Funciona a través del túnel ¿Habilitar SSH? | Sí | Sí |
| TLS | Palabras clave SSL en connectionString | secure: true |
| Lote de escritura por defecto | 60.000 filas (500 en las cargas update) | 4.000 filas |
| Cargas merge | Preparadas en una tabla temporal de SESSION | MERGE desde los VALUES de cada lote |
| Las cargas update y merge hacen que la tabla se lea en un único flujo | Sí | No |
Detalles Técnicos
El controlador DB2 for z/OS elige una de dos implementaciones al conectar, según el modo de conexión: ibmdb (por defecto) o js390. Solo se carga la elegida, así que en el modo js390 no se cargan ibm_db ni sus enlaces nativos.
Aspectos técnicos clave:
- El agrupamiento de conexiones se soporta mediante la bandera
pooleden la configuración - La selección de esquema es crítica y afecta a toda la generación de consultas
- El controlador utiliza las tablas del catálogo SYSIBM para la extracción de metadatos (SYSTABLES, SYSCOLUMNS, SYSINDEXES, SYSFOREIGNKEYS, SYSRELS)
- El DDL de una tabla se construye a partir del catálogo:
CREATE TABLE, un índice único yALTER TABLE ... ADD PRIMARY KEYpara la clave primaria, yALTER TABLE ... ADD FOREIGN KEYpara cada clave foránea - Las cargas update y merge usan
MERGE
Cuando el túnel SSH está habilitado, las conexiones se establecen primero a través del túnel antes de conectarse al servidor DB2 for z/OS.
Formato de Cadena de Conexión
Solo el modo ibmdb construye una cadena de conexión. El modo js390 pasa a js390 el host, el puerto, la base de datos, el usuario y la contraseña.
En el modo ibmdb, con ibm_db:
HOSTNAME=[host];DATABASE=[database];PORT=[port];CURRENTSCHEMA=[schema];UID=[user];PWD=[password];[connectionString]DATABASE, PORT y CURRENTSCHEMA se omiten cuando están vacíos. [connectionString] es el Parámetro Personalizado connectionString, que se añade tal cual.
Opciones de Autenticación
DB2 for z/OS soporta varios tipos de autenticación:
| Tipo de Autenticación | Mapeo UI | Descripción |
|---|---|---|
| Ninguna | No aplicable para DB2z | DB2z siempre requiere autenticación |
| Contraseña | Campos de usuario/contraseña | Autenticación estándar usuario/contraseña |
| Gestor de Contraseñas | Varios campos de gestores de contraseñas | Obtiene credenciales de gestores de contraseñas externos |
Soporte de Túnel SSH
El controlador DB2 for z/OS soporta túneles SSH para acceso seguro a bases de datos detrás de firewalls o en redes privadas. Para información detallada sobre la configuración de túneles SSH, por favor consulte la documentación de Túneles SSH.
Endpoints de API Utilizados
Las conexiones DB2 for z/OS se utilizan principalmente en:
- Creación de Tap (descubrimiento de fuente de datos)
- Creación de Sink (destino de datos para datos anonimizados)
- Ejecución de Pipeline (extracción y carga de datos)
Dependencias de Controlador Node.js
El controlador DB2 for z/OS depende de una biblioteca Node.js para cada modo:
| Modo | Biblioteca | Notas |
|---|---|---|
| IBM-DB | ibm_db | Módulo nativo con el controlador CLI de IBM (clidriver). Necesita una licencia de DB2 Connect |
| JS390 | js390 | JavaScript puro, sin enlaces nativos |
Requisitos de Licencia DB2 z/OS
En el modo IBM-DB, para conectarse a servidores DB2 for z/OS, la biblioteca ibm_db requiere una licencia válida de DB2 Connect. Para DB2 for z/OS, necesita el archivo de certificado de licencia "DB2 Connect Unlimited Edition for System z".
El archivo de licencia (típicamente nombrado db2consv_zs.lic) debe copiarse al directorio clidriver/license dentro de la instalación de ibm_db. La ruta exacta depende de dónde está instalada la biblioteca ibm_db en su sistema, pero típicamente es:
- En instalaciones locales:
node_modules/ibm_db/installer/clidriver/license/ - En instalaciones globales:
<ibm_db_install_path>/installer/clidriver/license/
Error SQL1598N de Licencia
Cuando se conecta desde plataformas distribuidas (Linux, Unix, Windows, MacOS) a Db2 for z/OS o Db2 for i (AS400) sin una licencia válida de db2connect, el servidor retornará un error SQL1598N. Este error indica acceso no autorizado debido a licencia faltante.
Si encuentra el error SQL1598N, puede resolverlo mediante:
- Tener a su DBA ejecute la utilidad db2connectactivate en el servidor Db2 para activar la licencia del lado del servidor
- Aplicar un archivo de licencia db2connect del lado del cliente copiándolo al directorio clidriver/license como se describió anteriormente
Note que se requiere una licencia db2connect de versión 12.1 para las versiones actuales de ibm_db, aunque licencias V11.5 más antiguas pueden funcionar con versiones específicas de clidriver.
Es importante notar que si su sistema z/OS ya tiene correctamente configurado y desbloqueado el licenciamiento del driver ODBC, puede que no se requiera un archivo separado de licencia DB2 z/OS para que las conexiones tengan éxito.
Para más información sobre configuración de licencias DB2 y el error SQL1598N, por favor consulte la Documentación de Configuración de Licencias IBM DB2 y la sección de SQL1598N en el README de ibm_db en GitHub.
Tablas Grandes y Reanudación
Esta sección recoge solo lo propio de DB2 for z/OS. Cómo funcionan la reanudación, los rangos paralelos y las estimaciones de filas en todos los controladores se explica en Bases de datos grandes. Vale para los dos modos de conexión, ibmdb (por defecto) y js390, que se eligen en el campo Modo de backend.
Lectura
- Las tablas se leen por bloques ordenados por la clave primaria (las columnas
KEYSEQdeSYSIBM.SYSCOLUMNS), de modo que un job que se detiene se reanuda tras la última clave que guardó. Una tabla sin clave primaria se lee con un único cursor y empieza de nuevo si el job se detiene. - Todas las columnas de la clave primaria deben ser
SMALLINT,INTEGER,BIGINTo de texto. No se usa una clave con alguna columnaDECIMALoNUMERIC, aunque no tenga decimales.
Rangos Paralelos y Estimación de Filas
- Solo se cortan rangos para una clave de una única columna entera, repartida a partes iguales entre su mínimo y su máximo.
- No hay estimación de filas en vivo: el número de filas guardado en el modelo (
CARDdeSYSIBM.SYSTABLEScuando se escaneó, o un recuento si nunca se ejecutóRUNSTATS) decide cuántos rangos se cortan. Vuelve a escanear el modelo cuando una tabla crezca mucho. - En el modo
ibmdb, una tabla que se carga en DB2 for z/OS por update o merge se lee en un único flujo, porque el controlador prepara los merge en una tabla de sesión. En el modojs390una carga update o merge no impide los rangos paralelos.
Carga
- Las restricciones y los triggers no se desactivan durante la carga.
- Las cargas insert vacían las tablas existentes con
TRUNCATE TABLE, salvo que se desactive la opción truncate. Una tabla reanudada nunca se vacía: conserva las filas que cargó la ejecución fallida. - Las cargas update y merge comparan todas las columnas de una clave primaria compuesta.
Parámetros Personalizados
El controlador DB2 for z/OS soporta parámetros personalizados adicionales que pueden especificarse en formato YAML para ajustar el comportamiento de la conexión, el agrupamiento y otras opciones avanzadas. Cada modo lee sus propias claves; una clave que un modo no lee se ignora.
Parámetros para Todos los Modos
mode: js390 # ibmdb o js390. Tiene prioridad sobre el campo Modo de backend
pooled: true # Usar un grupo (pool) de conexionesParámetros del Modo IBM-DB
connectionString: "Security=SSL;SSLServerCertificate=/ruta/a/db2server.arm" # Palabras clave CLI adicionales que se añaden a la cadena de conexión
connectParams: # Opciones que se pasan a ibm_db al abrir la conexión
connectTimeout: 30 # Segundos (30 por defecto sin pooled)
batchSize: 60000 # Filas en búfer al leer y por lote de escritura (las cargas update usan 500)Parámetros del Modo JS390
secure: true # Conectar con TLS
timeout: 60000 # Tiempo de espera de conexión en milisegundos
batchSize: 4000 # Filas en búfer al leer
blockSize: 262144 # Tamaño del bloque de lectura en bytes (256 KB)
writeBatchSize: 4000 # Filas por lote de escrituraCon pooled: true, JS390 mantiene un grupo de hasta 10 conexiones.
Ejemplos de Configuraciones
Configuración SSL (modo IBM-DB)
connectionString: "Security=SSL;SSLServerCertificate=/ruta/a/db2server.arm"Configuración TLS (modo JS390)
secure: trueConfiguración Avanzada con Optimización de Rendimiento (modo JS390)
blockSize: 524288
writeBatchSize: 8000
pooled: true