hdbc / hdbc-odbc

ODBC driver for HDBC
BSD 3-Clause "New" or "Revised" License
26 stars 34 forks source link

Driver randomly failed with different SqlError on MS SQL Server 2005 #31

Open YoEight opened 7 years ago

YoEight commented 7 years ago

Greetings,

Here's my situation, I run the same query but with different parameters several times and it never fails at the same point when running my program (I print each line I read). Here a possible outcome when launching my program 3 times.

Attempt 1

A
B
C
testing-mssqlserver: user error (Data.ByteString.packCStringLen: negative length: -15471)

Attempt 2

A
B
testing-mssqlserver: SqlError {seState = "[]", seNativeError = -2, seErrorMsg = "sqlFetch: []"}

Attempt 3

A
B
C
D
E
testing-mssqlserver: SqlError {seState = "[]", seNativeError = -2, seErrorMsg = "SQLNumResultCols: []"}

My env: OS: Archlinux 64bits GHC: 8.0.2 64bits

λ yoeight → cat /etc/odbc.ini
[MSSQL]
Description = MS SQL Server
Driver = FreeTDS
Server = ${server_name}
UID = ${user}
PWD = ${password}
ReadOnly = No
Port = 1111
TDS_Version = 8.0
λ yoeight → cat /etc/odbcinst.ini
[FreeTDS]
Description = MS SQL Server
Driver = /usr/lib/libtdsodbc.so
UsageCount = 1
FileUsage = 1
Trace = Yes
TraceFile = /tmp/odbc.log

nb: Don't know if it's related to the driver but I never had a single line of log in /tmp/odbc.log

Thanks for your time.

YoEight commented 7 years ago

You might need that one too

λ yoeight → cat /etc/freetds/freetds.conf 
#   $Id: freetds.conf,v 1.12 2007-12-25 06:02:36 jklowden Exp $
#
# This file is installed by FreeTDS if no file by the same 
# name is found in the installation directory.  
#
# For information about the layout of this file and its settings, 
# see the freetds.conf manpage "man freetds.conf".  

# Global settings are overridden by those in a database
# server specific section
[global]
        # TDS protocol version
    tds version = auto

    # Whether to write a TDSDUMP file for diagnostic purposes
    # (setting this to /tmp is insecure on a multi-user system)
;   dump file = /tmp/freetds.log
;   debug flags = 0xffff

    # Command and connection timeouts
;   timeout = 10
;   connect timeout = 10

    # If you get out-of-memory errors, it may mean that your client
    # is trying to allocate a huge buffer for a TEXT field.  
    # Try setting 'text size' to a more reasonable limit 
    text size = 64512

# A typical Sybase server
[egServer50]
    host = symachine.domain.com
    port = 5000
    tds version = 5.0

# A typical Microsoft server
[egServer70]
    host = ntmachine.domain.com
    port = 1433
    tds version = 7.0
YoEight commented 7 years ago

My current hack consists on retrying the faulted query execution until it passes. At the current stage of my project, it isn't a big issue but it will if we want to go on the next level.