Archive

Posts Tagged ‘Oracle’

Oracle Gateway for SQL Server – General network error

February 28th, 2009 Comments off

Like many organizations, the company I work for needed to link an Oracle database to a SQL Server database. For various reasons I decided that we would use the Oracle database to pull data from the SQL Server rather than push the data from the SQL Server. This meant that an Oracle Gateway was necessary.

The Gateway install was painless and the setup was relatively easy. Within an hour I was running queries against the SQL Server through an Oracle database link. I set up various scripts to run autonomously in the early mornings and they were working flawlessly. The scripts were pulling entire tables and ran for between 3-5 hours.

After a few weeks the scripts began to fail intermittently with a “General Network Error” and a few weeks later the failure became constant. Below is an account of the fixes that were suggested to me by both the SQL Server DBAs, online resources, Oracle service reps and finally the steps I took to find the issue and the actual fix.

Symptoms:

  1. Runtime before failure varies from between 1 and 30 minutes.
  2. Error:
    ERROR [NA000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-28500: connection from ORACLE to a non-Oracle system returned this message: [Transparent gateway for MSSQL][Microsoft][ODBC SQL Server Driver]Error in row[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionRead (recv()).[Microsoft][ODBC SQL Server Driver][DBNETLIB]General network error. Check your network documentation.

SQL Server:

  1. There are known issues with Microsoft’s Name Pipes Net-Library. This particular error has happened during SQL Server backup/restore operations, see KB827452.
    1. Make sure TCP/IP is enabled in the connection configurations screen so that the client can connect using TCP/IP rather than Named Pipes.
    2. Check the MDAC 2.8 version to see if it is 2.80.1045.0 or greater. You can find this value at registry entry: HKEY_LOCAL_MACHINE\Software\Microsoft\DataAccess\FullInstallVer.
  2. TCP/IP parameters in registry:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\SynAttackProtect

    1. KeepAliveTime=60000 (60 seconds)
    2. KeepAliveInterval=1000 (try every second)
    3. TcpMaxDataRetransmissions=60 (stop after 60 retransmissions)
  3. TCP/IP settings in the SQL Server Manager:
    SQL Server Configuration Manager -> SQL Server 2005 Network Configuration ->Protocols -> TCP/IP

    1. KeepAliveTime=60000 (60 seconds)
    2. KeepAliveInterval=1000 (try every second)
    3. TcpMaxDataRetransmissions=60 (stop after 60 retransmissions)

Oracle Gateway:

  1. In the gateway init file, inittg4msql.ora, add the following entry: HS_FDS_CONNECT_PROPERTIES=”timeout=’120′”. You can change the value, here 120, depending on your needs. This config value is not in Oracle documentation and is used to stop long running queries from losing connection.
  2. TCP/IP parameters in registry:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\SynAttackProtect

    1. KeepAliveTime=60000 (60 seconds)
    2. KeepAliveInterval=1000 (try every second)
    3. TcpMaxDataRetransmissions=60 (stop after 60 retransmissions)

Fix:

  1. Downloaded a packet sniffer; wireshark (the best I’ve used so far): http://www.wireshark.org/download.html
  2. Filtered to see only traffic between the Gateway and the SQL Server.
  3. Ran the the script and monitored the traffic.
  4. I noticed a lot of lost packets and data retransmissions.
  5. At intermittant times there is a 30 second lag and the SQL Server reset the connection (the KeepAlive setting was still 30,000).
  6. I ran a ping test to the server with 5600 btye packet to see if this was a network layer issue:
    ping -t -l 5600 [ip addres]
  7. The test revieled 20-40% packet loss, which is unheard of.
  8. After contacting the Network team the SQL Server DBA was told to change a setting on the NIC.
    LinkSpeed/Duplex from Auto/Auto to Full/100

The NIC settings fixed the network issue and the scripts are passing with flying colors.

Hope this helps.

Rodger

Categories: Development, Oracle Tags: , ,