Diagnóstico de problemas con IBM Data Server Driver para JDBC y SQLJ

El IBM® Data Server Driver for JDBC and SQLJ incluye herramientas de diagnóstico y rastros para diagnosticar problemas durante la conexión y la ejecución de sentencias SQL.

Prueba de la conexión de servidor de datos

Ejecute el programa de utilidad DB2Jcc para probar una conexión con un servidor de datos. Usted proporciona a DB2Jcc la URL para el servidor de datos, para una conectividad de tipo 4 IBM Data Server Driver for JDBC and SQLJ o una conectividad de tipo 2 IBM Data Server Driver for JDBC and SQLJ. DB2Jcc intenta conectar con el servidor de datos y ejecutar una sentencia de SQL y un método DatabaseMetaData. Si falla la conexión o la ejecución de sentencias, DB2Jcc proporciona información de diagnóstico sobre el error.

Recogida de datos de rastreo de JDBC

Utilice uno de los procedimientos siguientes para iniciar el rastreo:

Procedimiento 1 : Para la conectividad de tipo 2 IBM Data Server Driver for JDBC and SQLJ, el método recomendado es iniciar el rastreo configurando la propiedad db2.jcc.override.traceFile y la propiedad db2.jcc.t2zosTraceFile en el IBM Data Server Driver for JDBC and SQLJ archivo de propiedades de configuración.

Puede establecer las propiedades db2.jcc.tracePolling y db2.jcc.tracePollingInterval antes de iniciar el controlador que le permita cambiar las propiedades de rastreo de configuración global mientras el controlador esté en ejecución.

Procedimiento 2: Para IBM Data Server Driver for JDBC and SQLJ conectividad de tipo 4, , el método recomendado es iniciar el seguimiento configurando la propiedad db2.jcc.override.traceFile o la propiedad db2.jcc.override.traceDirectory en el archivo de propiedades de configuración IBM Data Server Driver for JDBC and SQLJ . Puede establecer las propiedades db2.jcc.tracePolling y db2.jcc.tracePollingInterval antes de iniciar el controlador que le permita cambiar las propiedades de rastreo de configuración global mientras el controlador esté en ejecución.

Procedimiento 3 : Si utiliza la interfaz DataSource para conectarse a una fuente de datos, siga este método para iniciar el rastreo:
  1. Invoque el método DB2BaseDataSource.setTraceLevel para determinar el tipo de rastreo que necesita. El nivel de rastreo por omisión es TRACE_ALL. Consulte las propiedades de Common IBM Data Server Driver for JDBC and SQLJ para todos los productos de bases de datos compatibles para obtener una lista de configuraciones de traceLevel. Vea Propiedades para el IBM Data Server Driver for JDBC and SQLJ para obtener información sobre cómo especificar más de un tipo de trazado.
  2. Invoque el método DB2BaseDataSource.setJccLogWriter para especificar el destino del rastreo y activar el rastreo.

Procedimiento 4:

Si utiliza la interfaz DataSource para conectar con una fuente de datos, invoque el método javax.sql.DataSource.setLogWriter para activar el rastreo. Con este método, TRACE_ALL es el único nivel de rastreo disponible.

Si utiliza la interfaz DriverManager para conectar con una fuente de datos, lleve a cabo el procedimiento siguiente para iniciar el rastreo:
  1. Invoque el método DriverManager.getConnection con la propiedad traceLevel establecida en el parámetro info o en el parámetro url para el tipo de rastreo que necesita. El nivel de rastreo por omisión es TRACE_ALL. Consulte las propiedades de Common IBM Data Server Driver for JDBC and SQLJ para todos los productos de bases de datos compatibles para obtener una lista de configuraciones de traceLevel. Vea Propiedades para el IBM Data Server Driver for JDBC and SQLJ para obtener información sobre cómo especificar más de un tipo de trazado.
  2. Invoque el método DriverManager.setLogWriter para especificar el destino del rastreo y activar el rastreo.

Después de que se establezca una conexión, puede desactivar el rastreo o volverlo a activar, cambiar el destino del rastreo o cambiar el nivel de rastreo mediante el método DB2Connection.setJccLogWriter. Para desactivar el rastreo, establezca el valor de logWriter en null.

La propiedad logWriter es un objeto de tipo java.io.PrintWriter. Si la aplicación no puede manejar objetos java.io.PrintWriter, puede utilizar la propiedad traceFile para especificar el destino de la salida del rastreo. Para utilizar la propiedad traceFile, establezca la propiedad logWriter en null y establezca la propiedad traceFile con el nombre del archivo en que el controlador graba los datos del rastreo. Se tiene que poder grabar en este archivo y en el directorio en que reside. Si el archivo ya existe, el controlador lo sobregraba.

Procedimiento 5 : Si utiliza la interfaz DriverManager , especifique las propiedades traceFile y traceLevel como parte de la URL al cargar el controlador. Por ejemplo:
String url = "jdbc:db2://sysmvs1.stl.ibm.com:5021/san_jose" +
 ":traceFile=/u/db2p/jcctrace;" +
 "traceLevel=" + com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DRDA_FLOWS + ";";

Procedimiento 6 : Utilizar métodos de comunicación ( DB2TraceManager ). La clase DB2TraceManager proporciona la capacidad para suspender y reanudar el rastreo de cualquier tipo de programa de anotaciones cronológicas.

Ejemplo de inicio de un rastreo utilizando propiedades de configuración : Para un ejemplo completo del uso de parámetros de configuración para recopilar datos de rastreo, consulte Ejemplos de uso de propiedades de configuración para iniciar un rastreo de JDBC.

Ejemplo de programa de rastreo : Para ver un ejemplo completo de un programa de rastreo bajo el IBM Data Server Driver for JDBC and SQLJ, consulte Ejemplo de un programa de rastreo bajo el IBM Data Server Driver for JDBC and SQLJ.

Recogida de datos de rastreo de SQLJ durante la personalización o vinculación

Para recopilar datos de rastreo con el fin de diagnosticar problemas durante el proceso de personalización o vinculación de SQLJ, especifique las opciones -tracelevel y -tracefile cuando ejecute db2sqljcustomize o el programa de utilidad de vinculación db2sqljbind.

Recopilar datos de diagnóstico para una conexión a un Db2 servidor de datos o grupo de intercambio de datos

Los datos de diagnóstico se escriben en un archivo en el directorio que se especifica en la propiedad de configuración db2.jcc.outputDirectory. El formato del archivo es:
jccDump_timestamp_random-number_i.log
  • la marca de tiempo es la marca de tiempo en la que se escriben los datos.
  • número aleatorio es un número entero positivo generado aleatoriamente.
  • i es 0 o 1.

El tamaño máximo del archivo es de aproximadamente 2MB. Cuando una aplicación graba el primer registro de rastreo, el controlador crea un archivo con i = 0. A continuación, el controlador graba datos de rastreo en el archivo. Cuando el tamaño del archivo alcanza aproximadamente 2MB, el controlador cambia el nombre del archivo. El nuevo nombre es el mismo que el nombre original, excepto que ahora la i es 1. El controlador continúa este ciclo hasta que se completa la aplicación. Cada entrada de volcado dentro del archivo incluye la marca de tiempo, el nombre de la JVM, el ID de hilo, el ID de origen de datos y los detalles del ID de conexión, para que pueda localizar el origen de la excepción.

IMPORTANTE:
  • El tamaño máximo de archivo no es exactamente 2MB. Puede superar los 2 MB, de modo que la última entrada de volcado se registra completamente en un único archivo para facilitar su lectura.
  • La desactivación de una JVM terminando el proceso Java puede crear archivos .lck en el sistema de archivos. Estos archivos de registro de Internet ( .lck ) deben eliminarse manualmente.

Especificación de los datos que se recopilarán para un servidor de datos : Especifique los códigos de error SQL o los códigos de advertencia SQL para los que desea que se recopilen datos de diagnóstico estableciendo la propiedad de configuración global db2.jcc.diagLevelExceptionCode.

Si no se especifica un valor de db2.jcc.diagLevelExceptionCode, no se recopilan datos de diagnóstico.

Si db2.jcc.diagLevelExceptionCode está configurado como -1, se recopila información de diagnóstico para todos los códigos de error SQL.

Un código de error SQL puede especificarse sin signo, con el signo menos (-) como prefijo o con la letra " n" como sufijo. Un código de advertencia SQL puede ir precedido de un signo más (+) o seguido de la letra " p".

Cuando se especifique más de un código de error SQL o código de advertencia SQL, los códigos deben estar separados por comas.

Ejemplos:

Para recopilar información de diagnóstico para el código de error SQL -204, especifique uno de los siguientes valores:
  • db2.jcc.diagLevelExceptionCode=204
  • db2.jcc.diagLevelExceptionCode=-204
  • db2.jcc.diagLevelExceptionCode=204n
Para recopilar información de diagnóstico para el código de advertencia SQL +222, especifique uno de los siguientes valores:
  • db2.jcc.diagLevelExceptionCode=+222
  • db2.jcc.diagLevelExceptionCode=222p
Algunos ejemplos de especificación de recopilación de información de diagnóstico para los códigos de error SQL -204, -30108 y -4499 son:
  • db2.jcc.diagLevelExceptionCode=-204,-30108,-4499
  • db2.jcc.diagLevelExceptionCode=204,30108n,4499
  • db2.jcc.diagLevelExceptionCode=204n,30108,4499n
Algunos ejemplos de especificación de recopilación de información de diagnóstico para el código de error SQL -30108 y los códigos de advertencia SQL +100 y +222 son:
  • db2.jcc.diagLevelExceptionCode=+100,-30108,222p
  • db2.jcc.diagLevelExceptionCode=100p,30108,+222

Especificación de la recopilación de datos para un grupo de intercambio de datos : Cuando la propiedad de configuración global db2.jcc.traceLevel o db2.jcc.override.traceLevel, o la propiedad traceLevel Connection o DataSource se establece en TRACE_SYSPLEX (X'80000'), el IBM Data Server Driver for JDBC and SQLJ recoge datos sobre el grupo de intercambio de datos, como la lista de servidores, los valores de las propiedades de redireccionamiento automático de clientes y equilibrio de carga de trabajo, las estadísticas del grupo de transporte y los valores de registro especiales.

Formato de información sobre un perfil serializado de SQLJ

El programa de utilidad profp formatea la información sobre cada una de las cláusulas SQLJ de un perfil serializado. El formato del programa de utilidad profp es:
Read syntax diagramSkip visual syntax diagramprofpserialized-profile-name

Ejecute el programa de utilidad profp sobre el perfil serializado correspondiente a la conexión donde se produzca el error. Si se produce una excepción, se genera un seguimiento de pila de Java. A partir del rastreo de pila, puede determinar qué perfil serializado se estaba utilizando cuando se emitió la excepción.

Formato de información sobre un perfil serializado personalizado de SQLJ

La utilidad db2sqljprint da formato a la información sobre cada cláusula SQLJ en un perfil serializado que se personaliza para el IBM Data Server Driver for JDBC and SQLJ.

Ejecute el programa de utilidad db2sqljprint sobre el perfil serializado personalizado correspondiente a la conexión donde se produzca el error.