Trazando sqlnet en el servidor de Base de datos

Hoy veremos una entrada sobre diagnósticos de la base de datos.

Supongamos que tenemos algún tipo de error entre cliente y servidor en la capa OCI, la accion lógica en estos casos es activar una traza del sqlnet para detectar donde se encuentra el problema.
Si seguimos la nota de Oracle SQL*Net & Oracle Net Services – Tracing and Logging at a Glance (Doc ID 219968.1) veremos como , con las siguientes líneas deberíamos de tener en el directorio /home/oracle/trazas_problema_sqlnet una traza por cada uno de los procesos de conexion a la base de datos.

trace_level_server = 6
trace_file_server = svr
trace_directory_server = /home/oracle/trazas_problema_sqlnet
trace_unique_server = on
trace_timestamp_server = on
log_file_server = svr
log_directory_server = /home/oracle/trazas_problema_sqlnet

Sin embargo, cuando añadimos nuestros parámetros de traza vemos que en el directorio que hemos marcado para las trazas no aparece ningún fichero.
¿Que ocurre?

¿por que ocurre esto?

Si miramos la documentacion del sqlnet en https://docs.oracle.com/cd/B28359_01/network.111/b28317/sqlnet.htm#NETRF419

vemos como desde la version 11 en adelante tenemos los parámetros que funcionan con el ADDR-DIAG habilitado y los que funcionan cuando esta deshabilitado.
En nuestro caso, el problema es que al estar habilitado por defecto el diagnistico unificado de Oracle, no está haciendo caso a nuestras directrices.

¿Como lo solucionamos

La solución no puede ser mas sencilla, simplemente deberemos de decirle en el mismo sqlnet.ora que no use el diagnostico unificado de Oracle, esto lo haremos añadiendo la línea

DIAG_ADR_ENABLED = OFF

Con esto comenzará a trazar en la ubicación designada.

NOTA:
Debemos de recordar eliminar esta línea cuando acabemos de trazar ya que, ademas de poder llenar el filesystem por la traza, estamos indicando al servidor que no use el DIAG_ADR algo que no es conveniente .

Como siempre mas información en :

  • SQL*Net & Oracle Net Services – Tracing and Logging at a Glance (Doc ID 219968.1)
  • documentacion de Sqlnet

ORA-28040: No matching authentication protocol al subir a 12c

Hoy vamos a ver un error que podemos tener con determinadas conexiones JDBC desde clientes 10g.

El principal problema es que el cliente de JDBC thin de la 10g usa el protocolo de autenticación SHA-1, este protocolo no está permitido en la 12c, por lo que da el error.

ORA-28040: No matching authentication protocol

La solución debería de ser el uso de clientes 12c, ya que, hemos de tener en cuenta que JDBC 10.1 drivers no están certificados con bases de datos 12c

Existe un workarround para salir del paso, y es el configurar en el SQLNET.ORA del servidor el parámetro.

 SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10

De esta manera conseguiremos que clientes antiguos funcionen, pero no debemos de perder de vista que esto solo debe de ser un workarround y la suma importancia de mantener todos los componentes de la base de datos certificados.

Aunque la manera correcta de solucionarlo es desde el cliente


The solution is to take out the "-Doracle.jdbc.thinLogonCapability=o3" java parameter from the application execution.
For example, if the next java command was used to execute the application:
java -Doracle.jdbc.thinLogonCapability=o3 -cp .:ojdbc8.jar Application
Then, it is necessary to take the "-Doracle.jdbc.thinLogonCapability=o3" parameter off from the command as follows:
java -cp .:ojdbc8.jar Application

Más información como siempre en metalink en :

  • «ORA-28040: No Matching Authentication Protocol» After Database Upgrade To 19c (Doc ID 2748273.1)
  • Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)
  • 12c Database Alert.log File Shows The Message: Using Deprecated SQLNET.ALLOWED_LOGON_VERSION Parameter (Doc ID 2111876.1)
  • 11g and Older: How To Use the Parameter SQLNET.ALLOWED_LOGON_VERSION Correctly (Doc ID 1304142.1)
  • 11g and Older: How To Use the Parameter SQLNET.ALLOWED_LOGON_VERSION Correctly (Doc ID 1304142.1)
  • Error «ORA-28040: No matching authentication protocol» When Using SQLNET.ALLOWED_LOGON_VERSION (Doc ID 755605.1)