【问题标题】:Problems with unixODBC and FreeTDS configunixODBC 和 FreeTDS 配置问题
【发布时间】:2012-09-09 06:50:18
【问题描述】:

我已经为此工作了太久,似乎无法弄清楚。我确定我的 freetds.conf、odbc.ini 或 odbcinst.ini 有问题。我可以使用 tsql 连接到我的 mssql 2008 服务器,但仍然无法使用 isql 或当然通过 php。

我在 CentOS 5.6 上。

谁能提供一些帮助?

谢谢! 肖恩

这是在我的 sqltrace.log 中:

 [ODBC][12249][1347850711.939084][__handles.c][459]
    Exit:[SQL_SUCCESS]
    Environment = 0x1b5fc6c0
    [ODBC][12249][1347850711.939149][SQLAllocHandle.c][375]
    Entry:
        Handle Type = 2
            Input Handle = 0x1b5fc6c0
[ODBC][12249][1347850711.939187][SQLAllocHandle.c][493]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x1b5fcff0
[ODBC][12249][1347850711.939231][SQLConnect.c][3654]
        Entry:
            Connection = 0x1b5fcff0
            Server Name = [MSSQL_DSN][length = 9 (SQL_NTS)]
            User Name = [InetIndyArtsRemote][length = 18 (SQL_NTS)]
            Authentication = [**********][length = 10 (SQL_NTS)]
        UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'

        DIAG [01000] [FreeTDS][SQL Server]Unexpected EOF from the server

        DIAG [01000] [FreeTDS][SQL Server]Adaptive Server connection failed

        DIAG [S1000] [FreeTDS][SQL Server]Unable to connect to data source

[ODBC][12249][1347850711.949640][SQLConnect.c][4021]
        Exit:[SQL_ERROR]
[ODBC][12249][1347850711.949694][SQLFreeHandle.c][286]
        Entry:
            Handle Type = 2
            Input Handle = 0x1b5fcff0
[ODBC][12249][1347850711.949735][SQLFreeHandle.c][337]
        Exit:[SQL_SUCCESS]
[ODBC][12249][1347850711.949773][SQLFreeHandle.c][219]
        Entry:
            Handle Type = 1
            Input Handle = 0x1b5fc6c0

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 = 8.0

            # 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
            dump file append = yes

            # 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

[IndyArtsDB]
        host = xxx.xx.xxx.xx
        port = 1433
        tds version = 8.0
        client charset = UTF-8

ODBC.INI

[MSSQL_DSN]
Driver=FreeTDS
Description=IndyArts DB on Rackspace
Trace=No
Server=xxx.xx.xxx.xx
Port=1433
Database=DBName

ODCBINST.INI

[ODBC]
DEBUG=1
TraceFile=/home/ftp/sqltrace.log
Trace=Yes

[FreeTDS]
Description=MSSQL Driver
Driver=/usr/local/lib/libtdsodbc.so
UsageCount=1

【问题讨论】:

    标签: centos freetds unixodbc


    【解决方案1】:

    看起来 FreeTDS 中的版本号已从 8.0 更改为 7.1,从 9.0 更改为 7.2。 见http://www.freetds.org/userguide/choosingtdsprotocol.htm

    【讨论】:

      【解决方案2】:

      查看您的 sqltrace.log,它在我看来就像一个身份验证错误 - 您在身份验证后立即收到“来自服务器的意外 EOF”消息...

      远程服务器是否有可能完全或在端口 1433 上阻止来自您的 CentOS 服务器的连接?您的 freetds.conf 中的“client charset = UTF-8”是否有可能导致问题?

      这是我在 Ubuntu 12.04(Precise Pangolin)机器上的(工作)设置。

      这是我的 /etc/odbc.ini 文件:

      [xyz]
      Description             = XYZ Server
      Driver                  = freetds
      Database                = MyDB
      ServerName              = xyz
      TDS_Version             = 8.0
      

      还有我的 /etc/odbcinst.ini 文件:

      [freetds]
      Description     = MS SQL database access with Free TDS
      Driver          = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
      Setup           = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
      UsageCount      = 1
      

      最后是我的 /etc/freetds/freetds.conf 文件:

      [global]
              # TDS protocol version
      ;       tds version = 4.2
      
              # 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
      
      # The XYZ database
      [xyz]
              host = XYZ
              port = 1433
              tds version = 8.0
      

      【讨论】:

      • 这条评论出现在搜索结果中,对解决类似问题非常有帮助。谢谢。
      猜你喜欢
      • 2019-12-20
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 2012-08-05
      相关资源
      最近更新 更多