One of our Virtual-DBA clients recently contacted me for assistance in setting up connections using the DRDA protocol.   They are moving from Java to .NET for their development work, and when they tried to connect via the .NET drivers, they received the following error:

Unable to open socket to server:
ERROR [08001] [IBM] SQL30081N  A communication error has been detected. Communication protocol being used: "TCP/IP".  Communication API being used: "SOCKETS".
Location where the error was detected: "10.105.223.33".  Communication function
detecting the error: "recv".  Protocol specific error code(s): "*", "*", "0".  SQLSTATE=08001
Some things to consider:
- is the port number correctly specified
  50000 is the default for LUW servers
    svcename dbm cfg parm for LUW servers
  446 is the only port for iSeries servers, default for zSeries
- for a LUW server, is the TCPIP listener started
  db2set DB2COMM=TCPIP, db2stop / db2start
- for an Informix server, ensure DRDA listener is started
  and you are using DRDA port vs the SQLI port

I found that they were not set up to connect via DRDA.  In order to do so, we had to add an entry to DBSERVERALIASES with a corresponding entry in the sqlhosts file for the DRDA protocol.   The DBSERVERNAME for the instance cannot be used for DRDA.  The protocol on the sqlhosts entry for the new alias was set to drsoctcp since their server uses sockets.  Likewise, if they were using tlitcp, the entry would be drtlitcp.  The new entry will need a corresponding entry with the DRDA port number in /etc/services.

Example:

demo_on   onsoctcp        on_hostname     on_servername
demo_dr   drsoctcp          on_hostname    dr_servername      #  DRDA protocol
Share This