freeTDS не использует свой конфиг
Я решил использовать драйвер FreeTDS и unixODBC для управления соединением PDO между моим LAMP-приложением и удаленной базой данных MsSQL. к сожалению, похоже, что драйвер не читает файл freetds.conf, а переменные окружения не устанавливаются напрямую через CLI сервера или не указываются в php-файле функцией putenv().
теперь некоторые данные:
- поскольку я пингую сервер - никакие пакеты не потеряны.
- как я телнет сервер на 1433 порту - соединение установлено
как я использую команду
TDSVER=7.0 tsql -H >IP< -p 1433 -U username
Мне предлагается ввести пароль, и соединение установлено.
без TDSVER, предшествующего команде - соединение не устанавливается с таким сообщением:
Error 20017 (severity 9): Unexpected EOF from the server OS error 115, "Operation now in progress" Error 20002 (severity 9): Adaptive Server connection failed There was a problem connecting to the server
команды tsql -C выводят такой вывод:
Compile-time settings (established with the "configure" script) Version: freetds v0.91 freetds.conf directory: /usr/local/etc MS db-lib source compatibility: yes Sybase binary compatibility: no Thread safety: yes iconv library: yes TDS version: 5.0 iODBC: no unixodbc: yes SSPI "trusted" logins: no Kerberos: no
В файле freetds.conf, указанном выше, есть эта запись:
[MSSQL] host = >IP< port = 1433 tds version = 7.0
ISQL также не работает:
isql -v MSSQL [S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source [01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed [ISQL]ERROR: Could not SQLConnect
мой odbc.ini:
[MSSQL] Description = MS SQL Server Driver = FreeTDS TDS_Version = 7.0 Server = >IP< UID = username PWD = password ReadOnly = No Port = 1433
Я полагаю, решение действительно простое, но я слишком глуп, чтобы найти его...
5 ответов
Сегодня я потратил много времени на устранение подобной проблемы. Я установил "версию TDS" в freetds.conf, но он не использовался в моем соединении ODBC. После прочтения исходного кода freetds (connectparams.c:odbc_parse_connect_string) я обнаружил, что:
- Если в строке подключения используется "SERVER=", то оба файла freetds.conf и odbc.ini игнорируются.
- Если в строке подключения используется "SERVERNAME=", тогда используются настройки на соответствующем сервере freetds.conf
- Если в строке подключения используется "DSN=", то используются настройки в соответствующем DSN odbc.ini.
odbcinst.ini - красная сельдь. FreeTDS никогда не проверяет это на предмет настроек.
Параметры, указанные в строке подключения, всегда соблюдаются. Он также всегда учитывает переменные среды, такие как TDSVER.
Мой инстинкт инстинкта заключается в том, что вам нужно изменить tds version = 7.0 на tds version = 8.0 в ваших файлах freetds.conf и odbc.ini И вам нужно что-то в вашем файле odbcinst.ini. Вот что у меня работает на сервере Ubuntu 12.04, который разговаривает с удаленным сервером MSSQL:
freetds.conf
# Define a connection to the MSSQL server.
[mssql]
host = myserver
port = 1433
tds version = 8.0
odbc.ini
# Define a connection to the MSSQL server.
# The Description can be whatever we want it to be.
# The Driver value must match what we have defined in /etc/odbcinst.ini
# The Database name must be the name of the database this connection will connect to.
# The ServerName is the name we defined in /etc/freetds/freetds.conf
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf
[mssql]
Description = MSSQL Server
Driver = freetds
Database = MyDB
ServerName = myserver
TDS_Version = 8.0
odbcinst.ini
# Define where to find the driver for the Free TDS connections.
[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
У меня возникла точно такая же проблема, но мой конфиг уже был правильно настроен. Проблема заключалась в том, что версии TDS, которые распознает freetds.conf, изменились в более новых версиях, но, очевидно, старые версии по-прежнему работают в переменной среды TDSVER. Как только я установил версию в файлах конфигурации на 7.1, а не на 8.0, все начало работать.
Начальный TDSVER=7.0
проблема была решена путем добавления следующего в конце моего odbc.ini
файл:
[Default]
Driver=/usr/local/lib/libtdsodbc.so
Вместо подключения к IP, попробуйте подключиться к имени раздела конфигурации? Например:
isql -v MSSQL