CONNECT sentencia

La sentencia CONNECT conecta un proceso de aplicación a un servidor de bases de datos. Este servidor se convierte en el servidor actual para el proceso. La declaración CONNECT de Db2 for z/OS® es equivalente a CONNECT (Tipo 2 ) en Icono de archivo PDF Referencia SQL para el desarrollo multiplataforma - Versión 6.

Para obtener más información sobre conexiones, el servidor actual, el procesamiento de confirmaciones y las unidades de trabajo distribuidas y remotas, consulte Bases de datos relacionales distribuidas.

Invocación para CONNECT

Esta declaración solo puede integrarse en un programa de aplicación. Es una sentencia ejecutable que no puede prepararse dinámicamente. No debe especificarse en Java™.

Autorización para CONNECT

El ID de autorización principal del proceso o el ID de autorización que se especifica en esta declaración debe estar autorizado para conectarse al servidor especificado. El servidor comprueba la autorización cuando se ejecuta la declaración y determina la autorización específica que se requiere. Para más información, consulte ID de autorización.

Sintaxis para CONNECT

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualCONNECT TOnombre-ubicaciónvariable-lenguaje-principalautorizaciónRESETautorización

Autorización:

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualUSERvariable-lenguaje-principalUSINGvariable-lenguaje-principal

descripción para CONNECT

A nombre-ubicación o variable-host
Identifica el servidor por el nombre de ubicación especificado o por el nombre de ubicación que está contenido en la variable de host. Si se especifica una variable de host:
  • Debe ser una variable CHAR o VARCHAR con un atributo de longitud que no sea superior a 16. (Una cadena de caracteres con terminación C NUL puede tener hasta 17 bytes de longitud)
  • No debe ir seguida de una variable indicadora.
  • El nombre de la ubicación debe estar alineado a la izquierda dentro de la variable de host y debe ajustarse a las reglas para formar un identificador ordinario.
  • Si la longitud del nombre de la ubicación es menor que la longitud de la variable de host, debe rellenarse a la derecha con espacios en blanco.
  • No debe contener caracteres en minúsculas.
  • Si se utiliza con una aplicación de lenguaje de procedimiento SQL, la variable de host debe ser un nombre de variable SQL calificado o un nombre de parámetro SQL calificado.

Cuando se ejecuta la instrucción CONNECT:

  • El nombre de la ubicación debe identificar un servidor conocido por el subsistema de Db2 local. Por lo tanto, el nombre de la ubicación debe ser el nombre de la ubicación del subsistema de Db2 local o debe aparecer en la columna LOCATION de la tabla SYSIBM.LOCATIONS.
  • El proceso de aplicación no debe tener una conexión existente con el servidor especificado, si la opción de enlace SQLRULES(STD) está en vigor.
  • El proceso de solicitud debe estar en un estado conectable, si la transacción participa en una unidad de trabajo remota.
RESET
CONNECT RESET es equivalente a CONNECT TO x, donde x es el nombre de la ubicación del subsistema de Db2 local.
  • Si la opción de enlace SQLRULES( DB2 ) está en efecto, CONNECT RESET establece el subsistema local Db2 como la conexión SQL actual.
  • Si la opción de enlace SQLRULES(STD) está en vigor, CONNECT RESET establece el subsistema local Db2 como la conexión SQL actual solo si la conexión no existe.
autorización
Especifica un ID de autorización y una contraseña que se utilizan para verificar que el ID de autorización está autorizado para conectarse al servidor. No se puede especificar la autorización cuando el tipo de conexión es IMS o CICS® para una conexión al subsistema local de Db2 . Si se intenta, se produce un error SQL.
USER variable de host
Identifica el nombre de autorización que se debe utilizar para conectarse al servidor. El valor de la variable host debe cumplir las siguientes reglas:
  • El valor debe ser una variable CHAR o VARCHAR con un atributo de longitud que no sea superior a 128.
  • El valor debe estar alineado a la izquierda dentro de la variable de host y debe ajustarse a las reglas para formar un nombre de autorización.
  • El valor no debe ir seguido de una variable indicadora.
  • El valor debe rellenarse a la derecha con espacios en blanco si la longitud del nombre de la autorización es menor que la longitud de la variable de host.

Para una conexión al subsistema de Db2 local, un ID de usuario que tenga más de 8 caracteres provoca un error SQL.

USO de la variable host
Identifica la contraseña del nombre de autorización que se utilizará para conectarse al servidor. El valor de la variable host debe cumplir las siguientes reglas:
  • El valor debe ser una variable CHAR o VARCHAR con un atributo de longitud que no sea superior a 128.
  • El valor debe estar alineado a la izquierda.
  • El valor no debe incluir una variable indicadora.
  • El valor debe rellenarse a la derecha con espacios en blanco si la longitud de la contraseña es menor que la longitud de la variable de host.
  • El valor no debe contener caracteres en minúscula.

Inicio del cambioPara una conexión al subsistema de Db2 local, un ID de usuario que tenga más de 100 caracteres provoca un error SQL.fin del cambio

Para obtener más información, consulte CONTRASEÑA o FRASE (Especifique la contraseña de usuario o la frase de contraseña ).

CONNECT USER/USING es equivalente a CONNECT TO x USER/USING, donde x es el nombre de ubicación del subsistema de Db2 local (que tiene la semántica de CONNECT RESET).

CONECTAR sin operando
Esta forma de la declaración CONNECT devuelve información sobre el servidor actual en el campo SQLERRP del SQLCA. SQLERRP devuelve espacios en blanco si el proceso de solicitud está en estado desconectado.

Ejecutar un CONNECT sin operando no tiene ningún efecto sobre los estados de conexión.

En una unidad de trabajo remota, esta forma de CONECTAR no requiere que el proceso de aplicación esté en un estado conectable.

Notas para CONNECT

Conexiones correctas

Excepto en el caso de una CONNECT sin declaración de operandos, si la ejecución de la declaración CONNECT tiene éxito, las acciones dependen del tipo de unidad de trabajo:

unidades de trabajo distribuidas
Uno de los siguientes escenarios tiene lugar en una unidad de trabajo distribuida :
  • Si el nombre de la ubicación no identifica un servidor al que el proceso de la aplicación ya esté conectado, se crea una conexión SQL al servidor y se coloca en el estado actual y retenido. La conexión SQL anteriormente activa, si la hubiera, se pone en estado inactivo.
  • Si el nombre de la ubicación identifica un servidor al que el proceso de la aplicación ya está conectado, la conexión SQL asociada está inactiva y la opción SQLRULES( DB2 ) está en vigor, la conexión SQL se coloca en el estado actual. La conexión SQL anteriormente activa, si la hubiera, se pone en estado inactivo.
  • Si el nombre de la ubicación identifica un servidor al que el proceso de la aplicación ya está conectado, la conexión SQL asociada está actualizada y la opción SQLRULES( DB2 ) está en vigor, los estados de todas las conexiones SQL del proceso de aplicación no cambian.
unidades de trabajo remotas
Las siguientes acciones ocurren en una unidad de trabajo remota :
  • El proceso de solicitud está conectado al servidor especificado.
  • Se finaliza una conexión SQL existente del proceso de aplicación. Como resultado, todos los cursores de esa conexión SQL se cierran, todas las sentencias preparadas de esa conexión se destruyen, etc.
  • El nombre de la ubicación se coloca en el registro especial SERVIDOR ACTUAL.
  • Cuando se utiliza CONNECT para volver a conectarse al subsistema local de Db2 , el registro especial CURRENT SQLID se reinicializa si se especifica la cláusula USER/USING.
  • La información sobre el servidor se coloca en el campo SQLERRP del SQLCA. Si el servidor es un producto de Db2 , la información tiene el formato pppvvrrm.
    El valor del identificador de producto (PRDID) es un valor de carácter de 8 bytes en formato ppvvrrm, donde: ppp es un código de producto de 3 letras; vv es la versión;rr es el release; y m es el nivel de modificación. En Db2 12 for z/OS, el nivel de modificación indica un rango de niveles de función:
    • DSN12015V12R1M500, o superior.
    • DSN12010V12R1M100.
    Inicio del cambioPara más información, consulte los valores del identificador de producto (PRDID) en Db2 for z/OS.fin del cambio
  • La información adicional sobre la conexión se coloca en el campo SQLERRMC del SQLCA. Los contenidos son específicos de cada producto.

    Inicio del cambioSi las versiones de un Db2 for z/OS El solicitante y el servidor de datos son Db2 12 o posterior, el campo SQLERRMC contiene el nivel de función completamente calificado de la Db2 for z/OS servidor de datos al que está conectado el solicitante, en el formato V nn R n M nnn.fin del cambio

    Consejo : Utilice la instrucción GET DIAGNOSTICS para obtener información de diagnóstico detallada sobre la última instrucción SQL que se ejecutó.
conexiones no satisfactorias

Excepto en el caso de una CONNECT sin declaración de operandos, si la ejecución de la declaración CONNECT no tiene éxito:

unidades de trabajo distribuidas
En una unidad de trabajo distribuida, el estado de conexión del proceso de aplicación y los estados de sus conexiones SQL no cambian a menos que el fallo se deba a un error en la comprobación de autorización. Si este es el caso, la conexión se coloca en el estado conectable y desconectado.
unidades de trabajo remotas
En una unidad de trabajo remota, el campo SQLERRP del SQLCA se establece en el nombre del módulo solicitante de Db2 que detectó el error.

Si la ejecución de la instrucción CONNECT no tiene éxito porque el proceso de aplicación no está en estado conectable, el estado de conexión del proceso de aplicación no cambia. Si la ejecución de la sentencia CONNECT no se realiza correctamente por cualquier otro motivo, CURRENT SERVER se establece en blanco y el proceso de aplicación se coloca en el estado conectable y no conectable.

Autorización

Si el servidor es un subsistema de Db2 , un usuario se autentica de la siguiente manera:

  • Db2 invoca RACF® a través de la macro RACROUTE con REQUEST=VERIFY para verificar la contraseña.
  • Si se verifica la contraseña, Db2 vuelve a invocar RACF a través de la macro RACROUTE con REQUEST=AUTH, para comprobar si el ID de autorización está autorizado a utilizar los recursos Db2 definidos en RACF.
  • Db2 y luego invoca la rutina de salida de conexión si hay una definida.
  • La conexión tiene entonces un ID de autorización principal, posiblemente uno o más ID secundarios, y un ID SQL.

Si el servidor es un subsistema de Db2 o remoto, el solicitante genera tokens de autenticación y los envía al sitio remoto de la siguiente manera:

  • La columna SECURITY_OUT en SYSIBM.LUNAMES para SNA o la columna SECURITY_OUT en SYSIBM.IPNAMES para TCP/IP debe tener uno de los siguientes valores :
    • 'A' (ya verificado)
    • 'D' (identificación de usuario y cifrado de datos sensibles para la seguridad; solo TCP/IP)
    • 'E' (ID de usuario, contraseña y cifrado de datos sensibles a la seguridad; solo TCP/IP)
    • «P» (contraseña)
    Cuando el valor es «A», se siguen enviando el ID de usuario y la contraseña especificados en CONNECT.
    Cuando el valor es «D», «E» o «P», el solicitante cifra el ID de usuario y la contraseña que se especifican en CONNECT para TCP/IP. Sin embargo, si el Servicio de Cifrado Integrado (ICSF) no está configurado en el solicitante o si el servidor no admite cifrado, se produce una de las siguientes acciones:
    • Si el valor de SECURITY_OUT en SYSIBM.IPNAMES es 'D' o 'E', se devuelve SQLCODE -904 si ICSF no está configurado en el solicitante, y se devuelve SQLCODE -30082 si el servidor no admite cifrado.
    • Si el valor de SECURITY_OUT en SYSIBM.IPNAMES es 'P', el solicitante no cifra el ID de usuario y la contraseña y transmite los tokens en texto sin cifrar.
  • Para SNA, la columna ENCRYPTPSWDS en SYSIBM.SYSLUNAMES no debe contener 'Y'.
  • El ID de autorización y la contraseña se verifican en el servidor.
  • En todos los casos, no se realiza la traducción saliente, tal como se especifica en SYSIBM.USERNAMES.
Unidad de trabajo distribuida

En general, lo siguiente es cierto:

  • Una sentencia CONNECT con la cláusula TO y la cláusula USER/USING solo puede ejecutarse si no existe ninguna conexión actual o inactiva con el servidor mencionado. Sin embargo, si el servidor nombrado es el subsistema local Db2 y la instrucción CONNECT es la primera instrucción SQL que se ejecuta después de que se crea el hilo de ejecución ( Db2 ), la instrucción CONNECT se ejecuta correctamente.
  • Una sentencia CONNECT sin la cláusula TO pero con la cláusula USER/USING solo puede ejecutarse si no existe ninguna conexión actual o inactiva con el subsistema local Db2 . Sin embargo, si la instrucción CONNECT es la primera instrucción SQL que se ejecuta después de que se crea el hilo de ejecución ( Db2 ), la instrucción CONNECT se ejecuta correctamente.
Unidad de trabajo remota
Si la comprobación de autorización falla, la conexión se coloca en el estado conectable y desconectado.
Opciones de precompilador

Independientemente de si un programa está precompilado con la opción CONNECT(1) o CONNECT(2), Db2 for z/OS negocia con el servidor remoto durante el proceso de conexión para determinar cómo realizar las confirmaciones. Si el servidor remoto no admite el protocolo de confirmación en dos fases, Db2 se degrada para realizar confirmaciones en una fase.

Los programas que contienen sentencias CONNECT precompiladas con diferentes opciones de precompilador CONNECT no pueden ejecutarse como parte del mismo proceso de aplicación. Se produce un error cuando se intenta ejecutar la instrucción CONNECT no válida.

Variables de host

Si una instrucción CONNECT contiene variables de host, se asume que el contenido de las variables de host está en el esquema de codificación que se especificó en el parámetro ENCODING cuando se vinculó el paquete o plan que contiene la instrucción.

Error en el proceso

Una declaración CONNECT puede devolver e indicar una ejecución correcta incluso cuando todavía no existe una conexión física. Db2 retrasa el proceso de conexión física, cuando es posible, para economizar el número de mensajes que envía a un servidor. Por lo tanto, los errores en el procesamiento de la instrucción CONNECT pueden notificarse después de la siguiente instrucción SQL ejecutable, no inmediatamente después de la instrucción CONNECT.

Restricciones en los tipos de matrices y las variables de matrices

En cualquier instrucción SQL que no sea una instrucción CALL, no se debe hacer referencia a tipos de matrices y variables de matrices después de establecer una conexión en un servidor remoto. Esta restricción incluye una instrucción SQL que se ejecuta en un servidor remoto como resultado de un nombre de tres partes o alias que se resuelve en un objeto en un servidor remoto. Una excepción es que un elemento de matriz puede ser el objetivo de una instrucción de asignación FETCH, SELECT INTO, SET o VALUES INTO en una rutina SQL, incluso cuando la instrucción se ejecuta en un servidor remoto.

Ejemplos de CONNECT

Ejemplo 1: Conectar una aplicación a un DBMS
El nombre de la ubicación está en la variable de cadena de caracteres LOCNAME, el identificador de autorización está en la variable de cadena de caracteres AUTHID y la contraseña está en la variable de cadena de caracteres PASSWORD.
  EXEC SQL CONNECT TO :LOCNAME USER :AUTHID USING :PASSWORD;
Ejemplo 2: Obtener información sobre el servidor actual
  EXEC SQL CONNECT;
Ejemplo 3: Ejecutar instrucciones SQL en una unidad de trabajo distribuida
La primera sentencia CONNECT crea una conexión con el servidor EASTDB. La segunda sentencia CONNECT crea una conexión con el servidor WESTDB y pone la conexión SQL con EASTDB en estado inactivo.
  EXEC SQL CONNECT TO EASTDB;
    -- execute statements referencing objects at EASTDB
  EXEC SQL CONNECT TO WESTDB;
    -- execute statements referencing objects at WESTDB
Ejemplo 4: Conecte la aplicación a un DBMS cuyo identificador de ubicación se encuentre en la variable de cadena de caracteres LOC utilizando el identificador de autorización en la variable de cadena de caracteres AUTHID y la contraseña en la variable de cadena de caracteres PASSWORD. Realice el trabajo para el usuario y, a continuación, interrumpa la conexión y conéctese de nuevo con un ID de usuario y una contraseña diferentes.
  EXEC SQL CONNECT TO :LOC USER :AUTHID USING :PASSWORD;
    -- execute SQL statements accessing data on the server
  RELEASE :LOC;    
  EXEC SQL COMMIT;
    -- set AUTHID and PASSWORD to new values
  EXEC SQL CONNECT TO :LOC USER :AUTHID USING :PASSWORD;
    -- execute SQL statements accessing data on the server
Ejemplo 5: Cambiar servidores en una unidad de trabajo remota.
Supongamos que la aplicación se conectó a un servidor de Db2 , abrió un cursor y obtuvo filas de la tabla de resultados del cursor. Más tarde, para conectarse al subsistema de Db2 local, la aplicación ejecuta las siguientes instrucciones:
  EXEC SQL COMMIT WORK;
  EXEC SQL CONNECT RESET;

Inicio del cambioEl COMMIT es necesario porque al abrir el cursor la aplicación pasó del estado conectable al desconectable y viceversa. El estado de desconexión significa que la conexión ha iniciado una transacción y no puede conectarse a otro servidor hasta que la transacción se complete. La emisión de una instrucción COMMIT finaliza la transacción. Al emitir una declaración CONNECT con la opción RESET, se vuelve a conectar la aplicación al servidor local y se devuelve la aplicación al estado desconectado y conectado. fin del cambio

Si el cursor se declaró con la cláusula WITH HOLD y no se cerró con una instrucción CLOSE, seguiría abierto incluso después de la ejecución de la instrucción COMMIT. Sin embargo, se cerraría con la ejecución de la sentencia CONNECT.