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

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница является черновиком статьи.


Инструкция по настройки unixODBC и QGIS, для подключения к MS SQL Server

Введение

QGIS имеет возможность подключаться к MS SQL Server и работать с его "родными" типами Geometry и Geography. Подключение под ОС MS Windows обычно не вызывает ни каких проблем, следует лишь ввести название сервера и имя БД. В ОС Linux эта операция несколько сложнее, и может вызвать проблемы у многих пользователей.
Провайдер MS SQL Server для QGIS при подключения использует модуль QtSql и один из его драйверов - QODBC. Драйвер QODBC на Linux реализован поверх unixODBC. Он в свою очередь, для работы с MS SQL Server использует библиотеку FreeTDS и odbc драйвер, написанный на её базе.

Настройка 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


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

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

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

  • qt-odbc
  • freetds

Установка для 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 - на название любой таблицы, имеющейся в этой БД.
Если запрос выполнился без ошибок, то можно приступать к следующему шагу. В противном случае нужно искать проблемы с сетью и настройками.

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

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

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

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

sudo ODBCConfig


Для Fedora 17:

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 от имени непривилегированного пользователя:

ODBCConfig

Для Fedora 17:

ODBCManageDataSourcesQ4


В разделе "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 заменяем на название любой таблицы, имеющейся в БД.

Создание соединения в 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 в некоторых случаях не является стабильным решением. В замен него можно использовать проприетарные аналоги:

Плюсы: драйвер бесплатный
Минусы: возможность использования только на 64х битных RedHat-based дистрибутивах
Плюсы: стабильная работа, есть триал версия
Минусы: возможность использования только на старых ядрах 2.4-2.6

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