пятница, 8 апреля 2016 г.

Доступ к MSSQL из Cache' на платформе Linux

Поделитесь пожалуйста опытом, у кого работает связь с MSSQL 2000 из под Cache' 5.0.20 (ну или других версий) на платформе Linux. Cache' должна выступать в качестве клиента, MSSQL соответственно сервера. Какие драйвера ODBC используются?

Я тут сам покопался и реализовал этот доступ. Расскажу на примере своей системы: Linux (Red Hat Enterprise Linux AS (Nahant Update 2) x86_64), платформа AMD64.

Настройки до установки Cache':

1. После установки системы удаляем все пакеты unixODBC. В моей системе после установки их оказалось 3 штуки, причем 2 из них имели одинаковые имена (как я понимаю, 32 и 64 разрядная версия). Поэтому для удаления используем команду:
rpm -e unixODBC-kde-2.2.9-1
затем,
rpm -e --allmatches unixODBC-2.2.9-1
Дело в том, что unixODBC-kde-2.2.9-1 зависит от unixODBC-2.2.9-1 и первым удалить его не удастся. В принципе наверное этот шаг не обязателен, я их удалил что бы не мешались.

2. Качаем с сайта http://www.iodbc.org исходники iODBC. В моем случае libiodbc-3.52.3.tar.gz, разворачиваем
tar zxvf libiodbc-3.52.3.tar.gz
заходим в каталог libiodbc-3.52.3
cd libiodbc-3.52.3
В принципе при компиляции iODBC можно еще дополнительно скомпилировать графическую утилиту для настройки DSN, для этого нужен установленный GTK и пакет gtk2-devel-2.4.13-16 (графическая библиотека GNOME). Конфигурим, компилируем и инсталлируем iODBC
./configure --prefix=/usr/local --with-iodbc-inidir=/etc
make
make install
3. Качаем исходники FreeTDS с сайта http://www.freetds.org. В моем случае freetds-stable.tgz, разворачиваем
tar zxvf freetds-stable.tgz
заходим в каталог freetds-0.63
cd freetds-0.63
Конфигурим, компилируем и инсталлируем FreeTDS
./configure --with-tdsver=8.0 --with-iodbc=/usr/local/lib 
--prefix=/usr/local --sysconfdir=/etc
make
make install
4. Тестируем работу FreeTDS:
cd /usr/local/bin
./tsql -H имя_хоста -p 1433 -U sa
вводим на запрос пароль пользователя sa, если после этого видим
1>
связь работает, можно попробовать sql команды.
5. Редактируем файл /etc/freetds.conf Добавляем туда следующий блок:
[MSSQL]
host = имя_хоста
port = 1433
tds version = 8.0
client charset = cp1251
Имя секции задается произвольно.
6. Снова тестируем работу FreeTDS:
cd /usr/local/bin
./tsql -S MSSQL -U sa
где MSSQL ранее заданное имя секции в freetds.conf
7. Создаем файл /etc/odbc.ini следующего содержания:
[ODBC Data Sources]
ms_test = MS SQL Server Test

[ms_test]
Driver          = /usr/local/lib/libtdsodbc.so
Description     = MS SQL Server Test
Trace           = No
Servername      = MSSQL
Database        = имя_базы_данных
UID             = sa

[Default]
Driver          = /usr/local/lib/libtdsodbc.so
где ms_test - имя DSN, задается произвольно, Description - описание, тоже задается произвольно. Servername = MSSQL - имя секции в freetds.conf
8. Тестируем работу созданного DSN:
cd /usr/local/bin
./iodbctest "DSN=ms_test;UID=sa;PWD=пароль"
должно появится:
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.52.0305.1107
Driver: 0.63 (libtdsodbc.so)

SQL>
можно проверить работу SQL команд. Устанавливаем Cache', при этом указываем, что надо инсталлировать ODBC and SQL Gateway. После инсталляции смотрим зависимости cgate.so, по умолчанию, он зависит от cachesys/bin/libiodbc.so
cd /usr/local/cachesys/bin
ldd cgate.so
Переименовываем libiodbc.so в libiodbc.so.orign
mv libiodbc.so libiodbc.so.orign
для того что бы cgate.so был связан с правильной библиотекой выполняем:
ldconfig /usr/local/lib
смотрим зависимости cgate.so
ldd cgate.so
должны иметь что-то вроде:
    
libiodbc.so => /usr/local/lib/libiodbc.so (0x0000002a956bc000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000002a95806000)
libstdc++.so.5 => /usr/lib64/libstdc++.so.5 (0x0000002a95909000)
libm.so.6 => /lib64/tls/libm.so.6 (0x0000002a95ae4000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000002a95c6b000)
libc.so.6 => /lib64/tls/libc.so.6 (0x0000002a95d76000)
libiodbcinst.so.2 => /usr/local/lib/libiodbcinst.so.2 
(0x0000002a95fa9000)
/lib64/ld-linux-x86-64.so.2 (0x000000552aaaa000)
Устанавливаем две переменные окружения:
ODBCINI=/etc/odbc.ini
SYSODBCINI=/etc/odbc.ini
Я это сделал в файле /etc/profile, следующим образом:
ODBCINI=/etc/odbc.ini
SYSODBCINI=/etc/odbc.ini
export ODBCINI SYSODBCINI
после этого заходим в Cache' и проверяем работу SQLGatewayConnection
cache
USER>s con=##class(%SQLGatewayConnection).%New()
USER>w con.Connect("ms_test","sa","ваш_пароль")
1
Если выдано 1 связь работает.

Алимов Игорь
ialimov@pochet.ru

Комментариев нет:

Отправить комментарий