Подключение к MS SQL Server из QGIS запущенного в Linux: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
 
(не показаны 34 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{Статья|Черновик}}
{{Статья|Опубликована|qgis-mssql-linux}}
{{Аннотация|Инструкция по настройки unixODBC и QGIS, для подключения к MS SQL Server}}
{{Аннотация|Инструкция по настройке unixODBC и QGIS для подключения к MS SQL Server}}


== Введение ==
== Введение ==
QGIS имеет возможность подключаться к MS SQL Server и работать с его "родными" типами Geometry и Geography. Подключение под ОС MS Windows обычно не вызывает ни каких проблем, следует лишь ввести название сервера и имя БД. В ОС Linux эта операция несколько сложнее, и может вызвать проблемы у многих пользователей.<br />
QGIS имеет возможность подключаться к MS SQL Server и работать с его "родными" типами Geometry и Geography. Подключение под ОС MS Windows обычно не вызывает никаких проблем, следует лишь ввести название сервера и имя БД. В ОС Linux эта операция несколько сложнее и может вызвать проблемы у многих пользователей.<br />
Провайдер MS SQL Server для QGIS при подключения использует модуль [http://qt-project.org/doc/qt-4.8/qtsql.html QtSql] и один из его драйверов - [http://qt-project.org/doc/qt-4.8/sql-driver.html#qodbc QODBC]. Драйвер QODBC на Linux реализован поверх [http://www.unixodbc.org/ unixODBC]. Он в свою очередь, для работы с MS SQL Server использует библиотеку [http://freetds.schemamania.org/ FreeTDS] и odbc драйвер, написанный на её базе.
Провайдер MS SQL Server для QGIS при подключении использует модуль [http://qt-project.org/doc/qt-4.8/qtsql.html QtSql] и один из его драйверов - [http://qt-project.org/doc/qt-4.8/sql-driver.html#qodbc QODBC]. Драйвер QODBC на Linux реализован поверх [http://www.unixodbc.org/ unixODBC]. Он, в свою очередь, для работы с MS SQL Server использует библиотеку [http://freetds.schemamania.org/ FreeTDS] и odbc драйвер, написанный на её базе.<br />
Подключение возможно создавать в QGIS версии не ниже 1.8. Но стабильная версия содержит ошибки, проявляющиеся только в Linux сборке. Поэтому рекомендуется использовать разрабатываемую версии QGIS, датируемую не ранее 03.09.2012 (revision c322cd52).


== Настройка MS SQL Server ==
== Настройка MS SQL Server ==
Строка 12: Строка 13:
В списке "SQL Server Network Configuration" выберите необходимый инстанс (в моем случае это "MSSQLSERVER"). В таблице с доступными протоколами TCP/IP должен иметь статус Enabled. Если это не так, необходимо включить его, открыв двойным щелчком форму свойств и установив свойство Enabled равным "Yes".
В списке "SQL Server Network Configuration" выберите необходимый инстанс (в моем случае это "MSSQLSERVER"). В таблице с доступными протоколами TCP/IP должен иметь статус Enabled. Если это не так, необходимо включить его, открыв двойным щелчком форму свойств и установив свойство Enabled равным "Yes".
<center>[[Файл:msserver_qgis_linux2.png]]</center><br/>
<center>[[Файл:msserver_qgis_linux2.png]]</center><br/>
На этой же форме, на вкладке "IP Addresses" можно проверить, стандартный ли порт (1433) выставлен для этого инстанса.
В этой же форме, во вкладке "IP Addresses" можно проверить, стандартный ли порт (1433) выставлен для этого инстанса.
<center>[[Файл:msserver_qgis_linux3.png]]</center><br/>
<center>[[Файл:msserver_qgis_linux3.png]]</center><br/>
Если включен брандмауэр, то необходимо добавить этот порт в список исключений.
Если включен брандмауэр, то необходимо добавить этот порт в список исключений.
Строка 20: Строка 21:
* freetds
* freetds


=== Установка для Fedora (16+) ===
Минимально для работы и тестирования соединения необходимы:
<syntaxhighlight lang=bash>
sudo yum install qt-odbc freetds
</syntaxhighlight>
Для возможности настройки в графическом режиме дополнительно понадобятся:
<syntaxhighlight lang=bash>
sudo yum install unixODBC-kde
</syntaxhighlight>
=== Установка для Ubuntu (12.04+) и Debian (squeeze+)===
Минимально для работы необходимы:
<syntaxhighlight lang=bash>
sudo apt-get install libqt4-sql-odbc tdsodbc
</syntaxhighlight>
Для возможности настройки в графическом режиме и тестирования соединения дополнительно понадобятся:
<syntaxhighlight lang=bash>
sudo apt-get install freetds-bin unixodbc unixodbc-bin
</syntaxhighlight>
== Проверка соединения через FreeTDS ==
'''Данный шаг необходим исключительно для тестирования, и может быть пропущен, если следующие шаги проходят без проблем.'''<br />
Чтобы убедиться, что соединение с вашим MSSQL Server возможно, настроим и проверим соединение средствами самой библиотеки FreeTDS.<br />
Для этого в конфигурационный файл '''/etc/freetds.conf''' необходимо добавить следующее содержание:
<pre>
[MSTEST]
host = 192.168.0.100
port = 1433
tds version = 8.0
</pre>
IP адрес 192.168.0.100 необходимо заменить на адрес вашего MSSQL сервера.<br />
Запускаем утилиту tsql:
<syntaxhighlight lang=bash>
tsql -S MSTEST -U testuser -P testpass
</syntaxhighlight>
''testuser'' и ''testpass'' заменяем соответственно на логин и его пароль, присутствующий в БД.<br />
Запускаем любой тестовый запрос:
<pre>
1> USE your_db_name
2> GO
1> SELECT * FROM your_table_name
2> GO
</pre>
''your_db_name'' заменяем на название БД, ''your_table_name'' - на название любой таблицы, имеющейся в этой БД.<br />
Если запрос выполнился без ошибок, то можно приступать к следующему шагу. В противном случае нужно искать проблемы с сетью и настройками.
== Регистрация FreeTDS драйвера ==
Перед настройкой соединения, необходимо проверить, зарегистрирован ли FreeTDS драйвер odbc, и верно ли он называется. Это можно сделать двумя путями.
=== Проверка драйвера через ODBCConfig ===
Запускаем ODBCConfig от имени суперпользователя:
<syntaxhighlight lang=bash>
sudo ODBCConfig
</syntaxhighlight><br />
Для Fedora 17:
<syntaxhighlight lang=bash>
sudo ODBCManageDataSourcesQ4
</syntaxhighlight><br />
<center>[[Файл:Mssql_odbcconfig.png]]</center><br />
В разделе "Advanced", на вкладке "Driver", в списке должен быть драйвер с названием FreeTDS, ссылающийся на модуль '''/usr/lib/libtdsodbc.so''' (для Fedora '''/usr/lib/libtdsodbc.so.0'''). Возможно, он присутствует в списке под именем TDS. В этом случае следует либо переименовать существующий, либо создать новый с именем FreeTDS.<br />
Если драйвера в списке нет, следует добавить его в список, нажав кнопку "Add...". Обязательны к заполнению поля "Name","Driver" и "Setup". Поле "Setup" для FreeTDS драйвера должно содержать ссылку на тот же файл, на который ссылается и поле "Driver".<br/>
<center>[[Файл:Mssql_odbcconfig_new.png]]</center>
=== Проверка драйвера в конфигурационном файле ===
Проверить наличие драйвера можно в конфигурационном файле '''/etc/odbcinst.ini'''.<br />
В файле должна присутствовать секция с названием FreeTDS и ссылкой на '''/usr/lib/libtdsodbc.so''' (для Fedora '''/usr/lib/libtdsodbc.so.0'''):
<syntaxhighlight lang=ini>
[FreeTDS]
Description = ODBC for FreeTds
Driver      = /usr/lib/libtdsodbc.so.0
Setup      = /usr/lib/libtdsodbc.so.0
</syntaxhighlight>
Если секция называется TDS, то можно либо переименовать её, либо скопировать и затем переименовать в FreeTDS.
== Настройка и проверка соединения через unixODBC ==
После того как мы убедились, что драйвер зарегистрирован, можно создавать [http://en.wikipedia.org/wiki/Data_Source_Name DSN] для нашего MSSQL Server'a.<br />
=== Настройка соединения через ODBCConfig ===
Запускаем ODBCConfig от имени непривилегированного пользователя:
<syntaxhighlight lang=bash>
ODBCConfig
</syntaxhighlight>
Для Fedora 17:
<syntaxhighlight lang=bash>
ODBCManageDataSourcesQ4
</syntaxhighlight><br />
В разделе "Data Source Names", на вкладке "User" отображается список пользовательских DSN.
<center>[[Файл:Mssql_odbcconfig_user_dsns.png]]</center>
Нажимаем кнопку "Add...", выбираем FreeTDS драйвер:
<center>[[Файл:Mssql_odbcconfig_select_driver.png]]</center>
и вводим параметры нового соединения:
<center>[[Файл:Mssql_odbcconfig_new_conn.png]]</center>
Обязательны для заполнения поля: "Name", "Driver", "Server", "Database". IP адрес 192.168.0.100 необходимо заменить на адрес вашего MSSQL сервера, your_db_name заменяем на название реальной БД.<br />
=== Настройка соединения через конфигурационный файл ===
Настроить соединение можно, отредактировав конфигурационный файл ''~/.odbc.ini''.<br />
Соединение, созданное выше, может выглядеть следующим образом:
<syntaxhighlight lang=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
</syntaxhighlight><br />
=== Проверка ODBC соединения ===
Для проверки соединения, необходимо запустить консольный sql клиент:
<syntaxhighlight lang=bash>
isql -v MSTEST_ODBC testuser testpass
</syntaxhighlight>
Если параметры соединения были указанны верно, то появится приглашение для ввода sql запросов.<br />
Запускаем любой тестовый запрос:
<pre>
SQL> SELECT * FROM your_table_name
</pre>
''your_table_name'' заменяем на название любой таблицы, имеющейся в БД.
== Создание соединения в QGIS ==
Для создания нового соединения с MSSSQL Server необходимо вызвать форму, нажав на панели кнопку "Add MSSQL Spatial Layer", или выбрав аналогичный пункт в меню "Layer":
<center>[[Файл:Mssql_qgis_create.png]]</center>
В открывшейся форме, в разделе "Connections" нажимаем кнопку "New".
<center>[[Файл:Mssql_qgis_new.png]]</center>
Далее требуется ввести параметры нового соединения. Соединение можно настроить двумя методами: указать ранее созданное DSN или ввести все параметры вручную.<br />
При указании DSN форма будет выглядеть следующим образом:
<center>[[Файл:Mssql_qgis_from_dsn.png]]</center>
В данном случае необходимо ввести название создаваемого подключения и имя DSN (в примере указан DSN, настроенный и проверенный выше). Так же требуется указать имя пользователя и пароль.<br />
При создании соединения с вводом всех параметров вручную, вместо имени DSN необходимо указать адрес сервера и название БД:
<center>[[Файл:Mssql_qgis_hand.png]]</center>
Проверить соединение с базой можно, нажав кнопку "TestConnect". Если проверка не выдала ошибок, значит соединение готово к использованию.<br />
Добавление слоев на карту аналогично тому, как это реализовано для PostGIS провайдера.
== Работа с использованием других ODBC драйверов ==
Драйвер FreeTDS в некоторых случаях не является стабильным решением. В замен него можно использовать проприетарные аналоги:
* [http://www.microsoft.com/en-us/download/details.aspx?id=28160 Microsoft® SQL Server® ODBC Driver 1.0 for Linux]
:'''Плюсы:''' драйвер бесплатный
:'''Минусы:''' возможность использования только на  64х битных RedHat-based дистрибутивах
* [http://www.easysoft.com/products/data_access/odbc-sql-server-driver/index.html SQL Server ODBC Driver от Easysoft]
:'''Плюсы''': стабильная работа, есть триал версия
:'''Минусы:''' возможность использования только на старых ядрах 2.4-2.6


== Ссылки по теме ==
== Ссылки по теме ==
* [http://ru.gentoo-wiki.com/wiki/HOWTO_unixODBC_and_freetds HOWTO unixODBC and freetds]
* [http://ru.gentoo-wiki.com/wiki/HOWTO_unixODBC_and_freetds HOWTO unixODBC and freetds]
* [http://community.dbapool.com/articlelist.php?articles=06280701 ODBC connectivity using UNIX ODBC and FreeTDS]
* [http://community.dbapool.com/articlelist.php?articles=06280701 ODBC connectivity using UNIX ODBC and FreeTDS]

Текущая версия от 20:04, 23 сентября 2012

Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/qgis-mssql-linux.html


Инструкция по настройке 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 драйвер, написанный на её базе.
Подключение возможно создавать в 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


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

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

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

  • 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

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