Odbc проверить подключение linux

Подключение к MS SQL Server из QGIS запущенного в Linux

QGIS имеет возможность подключаться к MS SQL Server и работать с его «родными» типами Geometry и Geography. Подключение под ОС MS Windows обычно не вызывает никаких проблем, следует лишь ввести название сервера и имя БД. В ОС Linux эта операция несколько сложнее и может вызвать проблемы у многих пользователей.
Провайдер MS SQL Server для QGIS при подключении использует модуль QtSql и один из его драйверов — QODBC. Драйвер QODBC на Linux реализован поверх unixODBC. Он, в свою очередь, для работы с MS SQL Server использует библиотеку FreeTDS и odbc драйвер, написанный на её базе.
Подключение возможно создавать в QGIS версии не ниже 1.8. Но стабильная версия содержит ошибки, проявляющиеся только в Linux сборке. Поэтому рекомендуется использовать разрабатываемую версии QGIS, датируемую не ранее 03.09.2012 (revision c322cd52).

Настройка MS SQL Server

Для начала необходимо убедиться, что SQL Server принимает сетевые подключения. Для этого, в SQL Server Configuration Manager необходимо включить протокол соединения TCP/IP.

Msserver qgis linux1.png

В списке «SQL Server Network Configuration» выберите необходимый инстанс (в моем случае это «MSSQLSERVER»). В таблице с доступными протоколами TCP/IP должен иметь статус Enabled. Если это не так, необходимо включить его, открыв двойным щелчком форму свойств и установив свойство Enabled равным «Yes».

Msserver qgis linux2.png

В этой же форме, во вкладке «IP Addresses» можно проверить, стандартный ли порт (1433) выставлен для этого инстанса.

Msserver qgis linux3.png

Если включен брандмауэр, то необходимо добавить этот порт в список исключений.

Установка необходимых пакетов на клиенте

Для работы будут необходимы следующие пакеты:

Установка для Fedora (16+)

Минимально для работы и тестирования соединения необходимы:

sudo yum install qt-odbc freetds

Для возможности настройки в графическом режиме дополнительно понадобятся:

sudo yum install unixODBC-kde

Установка для Ubuntu (12.04+) и Debian (squeeze+)

Минимально для работы необходимы:

sudo apt-get install libqt4-sql-odbc tdsodbc

Для возможности настройки в графическом режиме и тестирования соединения дополнительно понадобятся:

sudo apt-get install freetds-bin unixodbc unixodbc-bin

Проверка соединения через FreeTDS

Данный шаг необходим исключительно для тестирования, и может быть пропущен, если следующие шаги проходят без проблем.
Чтобы убедиться, что соединение с вашим MSSQL Server возможно, настроим и проверим соединение средствами самой библиотеки FreeTDS.
Для этого в конфигурационный файл /etc/freetds.conf необходимо добавить следующее содержание:

[MSTEST] host = 192.168.0.100 port = 1433 tds version = 8.0

IP адрес 192.168.0.100 необходимо заменить на адрес вашего MSSQL сервера.
Запускаем утилиту tsql:

tsql -S MSTEST -U testuser -P testpass

testuser и testpass заменяем соответственно на логин и его пароль, присутствующий в БД.
Запускаем любой тестовый запрос:

1> USE your_db_name 2> GO 1> SELECT * FROM your_table_name 2> GO

your_db_name заменяем на название БД, your_table_name — на название любой таблицы, имеющейся в этой БД.
Если запрос выполнился без ошибок, то можно приступать к следующему шагу. В противном случае нужно искать проблемы с сетью и настройками.

Читайте также:  Linux find duplicate files

Регистрация FreeTDS драйвера

Перед настройкой соединения, необходимо проверить, зарегистрирован ли FreeTDS драйвер odbc, и верно ли он называется. Это можно сделать двумя путями.

Проверка драйвера через ODBCConfig

Запускаем ODBCConfig от имени суперпользователя:

sudo ODBCManageDataSourcesQ4

Mssql odbcconfig.png

В разделе «Advanced», на вкладке «Driver», в списке должен быть драйвер с названием FreeTDS, ссылающийся на модуль /usr/lib/libtdsodbc.so (для Fedora /usr/lib/libtdsodbc.so.0). Возможно, он присутствует в списке под именем TDS. В этом случае следует либо переименовать существующий, либо создать новый с именем FreeTDS.
Если драйвера в списке нет, следует добавить его в список, нажав кнопку «Add. «. Обязательны к заполнению поля «Name»,»Driver» и «Setup». Поле «Setup» для FreeTDS драйвера должно содержать ссылку на тот же файл, на который ссылается и поле «Driver».

Mssql odbcconfig new.png

Проверка драйвера в конфигурационном файле

Проверить наличие драйвера можно в конфигурационном файле /etc/odbcinst.ini.
В файле должна присутствовать секция с названием FreeTDS и ссылкой на /usr/lib/libtdsodbc.so (для Fedora /usr/lib/libtdsodbc.so.0):

[FreeTDS] Description = ODBC for FreeTds Driver = /usr/lib/libtdsodbc.so.0 Setup = /usr/lib/libtdsodbc.so.0

Если секция называется TDS, то можно либо переименовать её, либо скопировать и затем переименовать в FreeTDS.

Настройка и проверка соединения через unixODBC

После того как мы убедились, что драйвер зарегистрирован, можно создавать DSN для нашего MSSQL Server’a.

Настройка соединения через ODBCConfig

Запускаем ODBCConfig от имени непривилегированного пользователя:

В разделе «Data Source Names», на вкладке «User» отображается список пользовательских DSN.

Mssql odbcconfig user dsns.png

Нажимаем кнопку «Add. «, выбираем FreeTDS драйвер:

Mssql odbcconfig select driver.png

и вводим параметры нового соединения:

Mssql odbcconfig new conn.png

Обязательны для заполнения поля: «Name», «Driver», «Server», «Database». IP адрес 192.168.0.100 необходимо заменить на адрес вашего MSSQL сервера, your_db_name заменяем на название реальной БД.

Настройка соединения через конфигурационный файл

Настроить соединение можно, отредактировав конфигурационный файл ~/.odbc.ini.
Соединение, созданное выше, может выглядеть следующим образом:

[MSTEST_ODBC] Description = MSSQL test connection Driver = FreeTDS Server = 192.168.0.100 Port = 1433 Database = your_db_name TDS_Version = 8.0 Language = us_english TextSize = Domain = PacketSize = Trace = Yes TraceFile = /tmp/freetds.log1

Проверка ODBC соединения

Для проверки соединения, необходимо запустить консольный sql клиент:

isql -v MSTEST_ODBC testuser testpass

Если параметры соединения были указанны верно, то появится приглашение для ввода sql запросов.
Запускаем любой тестовый запрос:

SQL> SELECT * FROM your_table_name

your_table_name заменяем на название любой таблицы, имеющейся в БД.

Читайте также:  List all partition linux

Создание соединения в QGIS

Для создания нового соединения с MSSSQL Server необходимо вызвать форму, нажав на панели кнопку «Add MSSQL Spatial Layer», или выбрав аналогичный пункт в меню «Layer»:

Mssql qgis create.png

В открывшейся форме, в разделе «Connections» нажимаем кнопку «New».

Mssql qgis new.png

Далее требуется ввести параметры нового соединения. Соединение можно настроить двумя методами: указать ранее созданное DSN или ввести все параметры вручную.
При указании DSN форма будет выглядеть следующим образом:

Mssql qgis from dsn.png

В данном случае необходимо ввести название создаваемого подключения и имя DSN (в примере указан DSN, настроенный и проверенный выше). Так же требуется указать имя пользователя и пароль.
При создании соединения с вводом всех параметров вручную, вместо имени DSN необходимо указать адрес сервера и название БД:

Mssql qgis hand.png

Проверить соединение с базой можно, нажав кнопку «TestConnect». Если проверка не выдала ошибок, значит соединение готово к использованию.
Добавление слоев на карту аналогично тому, как это реализовано для PostGIS провайдера.

Работа с использованием других ODBC драйверов

Драйвер FreeTDS в некоторых случаях не является стабильным решением. В замен него можно использовать проприетарные аналоги:

Ссылки по теме

Источник

Трассировка доступа к данным в Linux и macOS

Диспетчер драйверов unixODBC в macOS и Linux поддерживает трассировку записи вызова API ODBC и выход из драйвера ODBC для SQL Server.

Чтобы отслеживать поведение ODBC приложения, измените раздел [ODBC] файла odbcinst.ini . Установите значения Trace=Yes и TraceFile для пути к файлу, который будет содержать выходные данные трассировки. Пример.

[ODBC] Trace=Yes TraceFile=/home/myappuser/odbctrace.log 

Вы также можете использовать для отправки выходных данных трассировки не постоянный файл, а /dev/stdout или любое другое имя устройства. При использовании указанных ранее параметров каждый раз, когда приложение загружает диспетчер драйверов unixODBC, он записывает все выполненные вызовы API ODBC в выходной файл.

Читайте также:  Pause in linux command

После завершения трассировки приложения удалите Trace=Yes из файла odbcinst.ini , чтобы избежать снижения производительности трассировки, и убедитесь, что все ненужные файлы трассировки удалены.

Трассировка применяется ко всем приложениям, использующим драйвер в odbcinst.ini . Чтобы не выполнять трассировку всех приложений (например, чтобы избежать раскрытия конфиденциальных данных конкретных пользователей), вы можете осуществлять трассировку отдельного экземпляра приложения. Укажите расположение частного экземпляра odbcinst.ini с помощью переменной среды ODBCSYSINI . Пример:

$ ODBCSYSINI=/home/myappuser myapp 

В этом случае можно добавить Trace=Yes в раздел [ODBC Driver 17 for SQL Server] /home/myappuser/odbcinst.ini .

Определение файла, используемого драйвером

Драйверы ODBC для Linux и macOS не могут определить ни используемый файл odbc.ini , ни путь к файлу odbc.ini . Сведения о том, какой файл odbc.ini используется, доступны в средствах unixODBC odbc_config и odbcinst . Эти сведения также можно получить из документации по диспетчеру драйверов unixODBC.

Например, следующая команда отображает расположение системных и пользовательских файлов odbc.ini , которые содержат системные и пользовательские имена источников данных (DSN) соответственно:

$ odbcinst -j unixODBC 2.3.1 DRIVERS. /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES. /etc/ODBCDataSources USER DATA SOURCES. /home/odbcuser/.odbc.ini` SQLULEN Size. 8 SQLLEN Size. 8 SQLSETPOSIROW Size.: 8 

Пользовательские имена DSN доступны только для конкретного пользователя. Пользовательские имена DSN хранятся в файле в домашнем каталоге или в подкаталоге пользователя. Системные имена DSN доступны для использования каждым пользователем в системе, но добавлять, изменять и удалять их могут только системные администраторы. Если у пользователя есть пользовательское имя DSN с тем же именем, что и у системного имени DSN, то при соединениях этого пользователя будет использоваться пользовательское имя DSN. Дополнительные сведения см. в документации unixODBC.

См. также

Источник

Оцените статью
Adblock
detector