Подключение к MS SQL Server из QGIS запущенного в Linux: различия между версиями
м (переименовал Подключение к MS SQL Server из QGIS, запущенного в Linux в Подключение к MS SQL Server из QGIS запущенного в Linux) |
|||
(не показано 25 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
{{Статья| | {{Статья|Опубликована|qgis-mssql-linux}} | ||
{{Аннотация|Инструкция по | {{Аннотация|Инструкция по настройке unixODBC и QGIS для подключения к MS SQL Server}} | ||
== Введение == | == Введение == | ||
QGIS имеет возможность подключаться к MS SQL Server и работать с его "родными" типами Geometry и Geography. Подключение под ОС MS Windows обычно не вызывает | QGIS имеет возможность подключаться к MS SQL Server и работать с его "родными" типами Geometry и Geography. Подключение под ОС MS Windows обычно не вызывает никаких проблем, следует лишь ввести название сервера и имя БД. В ОС Linux эта операция несколько сложнее и может вызвать проблемы у многих пользователей.<br /> | ||
Провайдер MS SQL Server для QGIS при | Провайдер 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) выставлен для этого инстанса. | |||
<center>[[Файл:msserver_qgis_linux3.png]]</center><br/> | <center>[[Файл:msserver_qgis_linux3.png]]</center><br/> | ||
Если включен брандмауэр, то необходимо добавить этот порт в список исключений. | Если включен брандмауэр, то необходимо добавить этот порт в список исключений. | ||
Строка 42: | Строка 43: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Проверка соединения через FreeTDS == | ||
'''Данный шаг необходим | '''Данный шаг необходим исключительно для тестирования, и может быть пропущен, если следующие шаги проходят без проблем.'''<br /> | ||
Чтобы | Чтобы убедиться, что соединение с вашим MSSQL Server возможно, настроим и проверим соединение средствами самой библиотеки FreeTDS.<br /> | ||
Для этого в конфигурационный файл '''/etc/freetds.conf''' необходимо добавить следующее содержание: | Для этого в конфигурационный файл '''/etc/freetds.conf''' необходимо добавить следующее содержание: | ||
<pre> | <pre> | ||
Строка 57: | Строка 58: | ||
tsql -S MSTEST -U testuser -P testpass | tsql -S MSTEST -U testuser -P testpass | ||
</syntaxhighlight> | </syntaxhighlight> | ||
''testuser'' и ''testpass'' заменяем соответственно на логин и его пароль, присутствующий в БД. | ''testuser'' и ''testpass'' заменяем соответственно на логин и его пароль, присутствующий в БД.<br /> | ||
Запускаем любой тестовый запрос: | Запускаем любой тестовый запрос: | ||
<pre> | <pre> | ||
Строка 68: | Строка 69: | ||
Если запрос выполнился без ошибок, то можно приступать к следующему шагу. В противном случае нужно искать проблемы с сетью и настройками. | Если запрос выполнился без ошибок, то можно приступать к следующему шагу. В противном случае нужно искать проблемы с сетью и настройками. | ||
== | == Регистрация FreeTDS драйвера == | ||
Перед настройкой соединения, необходимо проверить, зарегистрирован ли FreeTDS драйвер odbc, и верно ли он называется. Это можно сделать двумя путями. | Перед настройкой соединения, необходимо проверить, зарегистрирован ли FreeTDS драйвер odbc, и верно ли он называется. Это можно сделать двумя путями. | ||
=== Проверка драйвера через ODBCConfig === | === Проверка драйвера через ODBCConfig === | ||
Строка 74: | Строка 75: | ||
<syntaxhighlight lang=bash> | <syntaxhighlight lang=bash> | ||
sudo ODBCConfig | sudo ODBCConfig | ||
</syntaxhighlight><br /> | |||
Для Fedora 17: | |||
<syntaxhighlight lang=bash> | |||
sudo ODBCManageDataSourcesQ4 | |||
</syntaxhighlight><br /> | </syntaxhighlight><br /> | ||
<center>[[Файл:Mssql_odbcconfig.png]]</center><br /> | <center>[[Файл:Mssql_odbcconfig.png]]</center><br /> | ||
В разделе Advanced, на вкладке Driver, в списке должен быть драйвер с названием FreeTDS, ссылающийся на модуль '''/usr/lib/libtdsodbc.so''' (для Fedora '''/usr/lib/libtdsodbc.so.0'''). Возможно, он присутствует в списке под именем TDS. В этом случае следует либо переименовать существующий, либо создать новый с именем FreeTDS. Если драйвера в списке нет, следует добавить его в список, нажав кнопку "Add...". Обязательны к заполнению поля Name и Driver.<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> | <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] |
Текущая версия от 21: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.
В списке "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
Setup = /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". 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 в некоторых случаях не является стабильным решением. В замен него можно использовать проприетарные аналоги:
- Плюсы: драйвер бесплатный
- Минусы: возможность использования только на 64х битных RedHat-based дистрибутивах
- Плюсы: стабильная работа, есть триал версия
- Минусы: возможность использования только на старых ядрах 2.4-2.6