Подключение к MS SQL Server из QGIS запущенного в Linux
Инструкция по настройки 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.
В списке "SQL Server Network Configuration" выберите необходимый инстанс (в моем случае это "MSSQLSERVER"). В таблице с доступными протоколами TCP/IP должен иметь статус Enabled. Если это не так, необходимо включить его, открыв двойным щелчком форму свойств и установив свойство Enabled равным "Yes".
На этой же форме, на вкладке "IP Addresses" можно проверить, стандартный ли порт (1433) выставлен для этого инстанса.
Если включен брандмауэр, то необходимо добавить этот порт в список исключений.
Установка необходимых пакетов на клиенте
Для работы будут необходимы следующие пакеты:
- 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
В разделе "Advanced", на вкладке "Driver", в списке должен быть драйвер с названием FreeTDS, ссылающийся на модуль /usr/lib/libtdsodbc.so (для Fedora /usr/lib/libtdsodbc.so.0). Возможно, он присутствует в списке под именем TDS. В этом случае следует либо переименовать существующий, либо создать новый с именем FreeTDS.
Если драйвера в списке нет, следует добавить его в список, нажав кнопку "Add...". Обязательны к заполнению поля "Name","Driver" и "Setup". Поле "Setup" для FreeTDS драйвера должно содержать ссылку на тот же файл, на который ссылается и поле "Driver".
Проверка драйвера в конфигурационном файле
Проверить наличие и добавить драйвер можно непосредственно в конфигурационный файл /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
Если секция называется TDS, то можно либо переименовать её, либо скопировать и затем переименовать в FreeTDS.
Настройка и проверка соединения через unixODBC
После того как мы убедились, что драйвер зарегистрирован, можно создавать DSN для нашего MSSQL Server'a.
Настройка соединения через ODBCConfig
Запускаем ODBCConfig от имени непривилегированного пользователя:
ODBCConfig
Для Fedora 17:
ODBCManageDataSourcesQ4
В разделе "Data Source Names", на вкладке "User" отображается список пользовательских DSN.
Нажимаем кнопку "Add...", выбираем FreeTDS драйвер:
и вводим параметры нового соединения:
Обязательны для заполнения поля: "Name", "Driver", "Server", "Database". UID и PWD в целях безопасности лучше не заполнять, в противном случае они будут храниться открытым текстом.
IP адрес 192.168.0.100 необходимо заменить на адрес вашего MSSQL сервера, your_db_name заменяем на реальное название БД, testuser и testpass заменяем соответственно на логин и его пароль, присутствующий в этой БД.
Настройка соединения через конфигурационный файл
Настроить соединение можно непосредственно отредактировав конфигурационный файл ~/.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
UID = testuser
PWD = testpass
Проверка ODBC соединения
Для проверки соединения, необходимо запустить консольный sql клиент:
isql -v MSTEST_ODBC testuser testpass
Если параметры соединения были указанны верно, то появится приглашение для ввода sql запросов.
Запускаем любой тестовый запрос:
SQL> SELECT * FROM your_table_name
your_table_name заменяем на название любой таблицы, имеющейся в БД.
Создание соединения и подключение в QGIS
Работа с использованием других ODBC драйверов
Драйвер FreeTDS в некоторых случаях не является стабильным решением. В замен него можно использовать проприетарные аналоги:
- Плюсы: драйвер бесплатный
- Минусы: возможность использования только на 64х битных RedHat-based дистрибутивах
- Плюсы: стабильная работа, есть триал версия
- Минусы: возможность использования только на старых ядрах 2.4-2.6