- Подключение к MS SQL Server из QGIS запущенного в Linux
- Настройка MS SQL Server
- Установка необходимых пакетов на клиенте
- Установка для Fedora (16+)
- Установка для Ubuntu (12.04+) и Debian (squeeze+)
- Проверка соединения через FreeTDS
- Регистрация FreeTDS драйвера
- Проверка драйвера через ODBCConfig
- Проверка драйвера в конфигурационном файле
- Настройка и проверка соединения через unixODBC
- Настройка соединения через ODBCConfig
- Настройка соединения через конфигурационный файл
- Проверка ODBC соединения
- Создание соединения в QGIS
- Работа с использованием других ODBC драйверов
- Ссылки по теме
- Трассировка доступа к данным в Linux и macOS
- Определение файла, используемого драйвером
- См. также
Подключение к 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.
В списке «SQL Server Network Configuration» выберите необходимый инстанс (в моем случае это «MSSQLSERVER»). В таблице с доступными протоколами TCP/IP должен иметь статус Enabled. Если это не так, необходимо включить его, открыв двойным щелчком форму свойств и установив свойство Enabled равным «Yes».
В этой же форме, во вкладке «IP Addresses» можно проверить, стандартный ли порт (1433) выставлен для этого инстанса.
Если включен брандмауэр, то необходимо добавить этот порт в список исключений.
Установка необходимых пакетов на клиенте
Для работы будут необходимы следующие пакеты:
Установка для 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 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 Setup = /usr/lib/libtdsodbc.so.0
Если секция называется TDS, то можно либо переименовать её, либо скопировать и затем переименовать в FreeTDS.
Настройка и проверка соединения через unixODBC
После того как мы убедились, что драйвер зарегистрирован, можно создавать DSN для нашего MSSQL Server’a.
Настройка соединения через ODBCConfig
Запускаем ODBCConfig от имени непривилегированного пользователя:
В разделе «Data Source Names», на вкладке «User» отображается список пользовательских DSN.
Нажимаем кнопку «Add. «, выбираем FreeTDS драйвер:
и вводим параметры нового соединения:
Обязательны для заполнения поля: «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»:
В открывшейся форме, в разделе «Connections» нажимаем кнопку «New».
Далее требуется ввести параметры нового соединения. Соединение можно настроить двумя методами: указать ранее созданное DSN или ввести все параметры вручную.
При указании DSN форма будет выглядеть следующим образом:
В данном случае необходимо ввести название создаваемого подключения и имя DSN (в примере указан DSN, настроенный и проверенный выше). Так же требуется указать имя пользователя и пароль.
При создании соединения с вводом всех параметров вручную, вместо имени DSN необходимо указать адрес сервера и название БД:
Проверить соединение с базой можно, нажав кнопку «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 в выходной файл.
После завершения трассировки приложения удалите 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.