Учебно-методические материалы для студентов кафедры АСОИУ

Установка, настройка и использование ODBC

Open DataBase Connectivity (ODBC) — унифицированный интерфейс доступа к базам данных. Использование ODBC позволяет гибко управлять работой с различными БД из клиентстких приложений.

Цель работы: Сформировать навыки управления различными СУБД через стандартизованный интерфейс. Освоить процедуру установки и настройки ODBC.

Задания

Установка ODBC

Установка unixODBC в ОС OpenSUSE выполняется типовым способом, быстро и без каких-либо дополнительных действий (нужны привилегии root):

aag@aag:/usr/lib64/unixODBC> sudo zypper install unixODBC

Вместе с менеджером драйверов (пакет unixODBC) будут установлены и несколько драйверов БД, в т.ч. поддерживающих файловые источники данных, протокол NNTP, СУБД miniSQL и ряд других.

Дополнительные драйверы могут быть представлены в используемом дистрибутиве Linux в виде отдельных пакетов. Пусть требуется установить ODBC-драйверы для СУБД MySQL и PostgreSQL. Проверим их наличие в репозитории:

aag:/home/aag/Документы # zypper se odbc
Загрузка данных о репозиториях...
Чтение установленных пакетов...
С | Имя | Заключение | Тип --+---------------------------+-----------------------------------------+------
i | MyODBC-unixODBC | ODBC Interface for Communication with-> | пакет
i | iodbc | Менеджер драйверов, совместимых с ODBC | пакет
i | iodbc-admin | Administration tools for iODBC | пакет
| libcppdb_odbc0 | unixODBC database connector for the c-> | пакет
| libgda-3_0-odbc | ODBC Provider for GNU Data Access (GDA) | пакет
| libiodbc-devel | Заголовочные файлы и библиотеки, необ-> | пакет
i | libiodbc3 | Библиотеки, необходимые для запуска i-> | пакет
| libqt4-sql-unixODBC | Плагин unixODBC для Qt 4 | пакет
| libqt4-sql-unixODBC-32bit | Плагин unixODBC для Qt 4 | пакет
| libtdsodbc0 | FreeTDS ODBC Driver for unixODBC | пакет
| mdbtools-odbc | MDB Tools ODBC driver for unixODBC | пакет
| perl-DBD-ODBC | Драйвер ODBC для DBI | пакет
i | php5-odbc | Модуль расширения PHP5 | пакет
i | psqlODBC | ODBC Driver for PostgreSQL | пакет
| qt3-unixODBC | A UnixODBC Plug-In for Qt | пакет
i | unixODBC | Менеджер ODBC-драйверов с некоторыми -> | пакет
i | unixODBC-32bit | Менеджер ODBC-драйверов с некоторыми -> | пакет
| unixODBC-devel | Заголовочные файлы и статические библ-> | пакет
| unixODBC-devel-32bit | Заголовочные файлы и статические библ-> | пакет
i | unixODBC-gui-qt | ODBC Configuration Utility, Data Sou-> | пакет

Интересующие нас драйвера выделены. Выполняем их установку:

aag:~ # zypper in myodbc-unixodbc
... [установка]
aag:~ # zypper in psqlODBC
... [установка]

Получить расширенную информацию об установленных пакетах можно, например, такой командой:

aag:~ # zypper if psqlodbc unixodbc mysql-unixodbc

Полный список поддерживаемых систем управления базами данных и драйверов для них можно найти на официальном сайте проекта unixODBC.

Настройка ODBC

В общем случае настройка ODBC сводится к конфигурации менеджера драйверов и созданию источников данных (DSN). Это можно сделать несколькими способами:

  1. С помощью консольной утилиты odbcinst (man odbcinst);
  2. Прямым редактированием файлов *.ini;
  3. С помощью графической утилиты ODBCConfig (или ее аналогов, зависит от дистрибутива Linux).

Рассмотрим несколько примеров использования первых двух способов для управления настройками unixODBC.

Получение информации о настройках ODBC

Проверить версию и текущую конфигурацию менеджера драйверов можно так (обратите внимание на пути к файлам конфигурации, они могут отличаться в разных дистрибутивах):

aag:~ # odbcinst -j
unixODBC 2.2.12
DRIVERS............: /etc/unixODBC/odbcinst.ini
SYSTEM DATA SOURCES: /etc/unixODBC/odbc.ini
USER DATA SOURCES..: /root/.odbc.ini

Получить список подключенных драйверов (тех, для которых созданы записи в odbcinst.ini):

aag:~ # odbcinst -q -d
[mysql]
[PSQL]

Получить список подключенных источников данных (DSN):

aag:~ # odbcinst -q -s
[myasoiu]
[pgasoiu]
[test]

Как видно из приведенных примеров, команда odbcinst не очень информативна: она не выводит подробностей конфигурации ODBC, ни в плане настроек драйверов, ни в плане параметров источников данных. Полную информацию об этом можно получить с помощью любого текстового редактора, т.к. файлы odbcinst.ini, odbc.ini (системные источники) и ~/.odbc.ini (пользовательские DSN) являются текстовыми:

aag:~ # cat /etc/unixODBC/odbcinst.ini
[mysql]
Description	= MySQL ODBC Driver
Driver64	= /usr/lib64/libmyodbc5.so
Setup64	= /usr/lib64/unixODBC/libodbcmyS.so
USER = student
PASSWORD = UsageCount	= 1
[PSQL]
Description	= PostgreSQL
Driver64	= /usr/lib64/psqlodbcw.so
UsageCount	= 1

ОБРАТИТЕ ВНИМАНИЕ: Сразу после установки unixODBC этот и прочие файлы конфигурации будут пустыми, не содержащими каких либо записей.

Настройка драйверов ODBC

Рассмотрим пример настройки драйвера MySQL (версия 5.1.8-10.2.1 для OpenSUSE 12.2, архитектура x86_64). Это можно сделать следующим образом:

  1. Создать шаблон файла конфигурации драйвера (имя файла может быть любым).
  2. С помощью odbcinst включить созданную конфигурацию в настройки менеджера драйверов (odbcinst.ini).

Создаем шаблон:

aag:/etc/unixODBC # touch mysql.tpl

Открываем созданный файл в текстовом редакторе:

aag:/etc/unixODBC # mcedit mysql.tpl

Добавляем параметры конфигурации (символ # — комментарий):

[mysql] # произвольное имя драйвера, используется при создании DSN Description	= MySQL ODBC Driver # описание, рекомендуется включать версию
#Driver	= /usr/lib/unixODBC/libmyodbc.so # путь к 32-битному драйверу
#Setup	= /usr/lib/unixODBC/libodbcmyS.so # путь к программе настроек (если есть)
Driver64	= /usr/lib64/libmyodbc5.so # путь к 64-битному драйверу
Setup64	= /usr/lib64/unixODBC/libodbcmyS.so # путь к программе настроек (если есть)
# прочие необязательные параметры

Сохраняем файл и закрываем его. Теперь используем odbcinst:

aag:/etc/unixODBC # odbcinst -i -d -f mysql.tpl
odbcinst: Driver installed. Usage count increased to 1. Target directory is /etc/unixODBC

Описание аргументов командной строки odbcinst можно посмотреть, если запустить команду без параметров (самостоятельно).

Драйверы ODBC — это динамически подключаемые библиотеки. Такие файлы в MS Windows имеют расширение .dll (Dinamic Link Library), в Linux — .so (Shared Object). Найти нужные файлы драйверов (в примере — MyODBC-unixODBC) и путь к ним можно, в частности, такой командой:

aag:/etc/unixODBC # rpm -ql MyODBC-unixODBC | grep -i so
/usr/lib64/libmyodbc5-5.1.8.so
/usr/lib64/libmyodbc5.so

Источники данных

Источник данных ODBC (анг. Data Source Name, DSN ) — это именованная конфигурация базы данных, с помощью которой осуществляется подключение к этой БД из клиентского приложения. Спецификация ODBC определяет три типа источников данных:

  1. Пользовательский (User DSN);
  2. Системный (System DSN);
  3. Файловый (File DSN).

Все типы источников создаются по одному принципу, на основе шаблонов, добавляемых с помощью odbcinst. Альтернативный вариант — прямая правка конфигурационных файлов, но разработчики стандарта не рекомендуют использование этого метода.

Пользовательские источники данных

Создание пользовательских источников данных (User DSN) не требуют привилегий администратора. Такие источники доступны только для того пользователя, который их создал. Все настройки этих источников сохраняются в файле .odbc.ini — текстовом dot-файле, раположенном в домашней директории пользователя.

Рассмотрим пример создания пользовательского источника данных для подключения к БД MySQL.

1. Создание файла шаблона:

aag@aag:/usr/lib64/unixODBC> cd ~
aag@aag:~> touch mydsn.tpl # создаем файл шаблона в homedir
aag@aag:~> mcedit mydsn.tpl

2. Редактирование созданного шаблона конфигурации. Оно сводится к указанию необходимых параметров и их значений (зависят от используемого драйвера БД, полное описание нужно смотреть в документации к соответствующему драйверу):

# Регистр символов значения не имеет
# имя источника
[mydsn] DESCRIPTION	= MySQL User DSN connecting
# используемый драйвер (см. odbcinst.ini)
DRIVER	= mysql # доменное имя или ip-адрес сервера
SERVER	= edu.asoiu
# имя базы данных DATABASE	= asoiu
# порт (если не задан, то используется тот, что по умолчанию, см. /etc/services) PORT	= 3306 # авторизация
USER = student PASSWORD = student 

3. Добавление нового источника данных в файл .odbc.ini.

aag@aag:~> odbcinst -i -s -h -f mydsn.tpl

После выполнения этой команды новый источник данных будет добавлен в файл пользовательских настроек и станет доступен для использования. Просмотреть список пользовательских источников можно, например, командой cat:

aag@aag:~> cat .odbc.ini
[mydsn]
DESCRIPTION	= MySQL User DSN connecting
DRIVER	= mysql
SERVER	= edu.asoiu
DATABASE	= asoiu
PORT	= 3306
USER	= student
PASSWORD	= student

4. Проверить подключение к созданному источнику данных можно с помощью консольной утилиты isql с указанием имени источника в качестве параметра. Если параметры подключения заданы правильно, то isql запустится в интерактивном режиме и будет готова к приему SQL-запросов:

aag@aag:~> isql mydsn
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> 

Системные источники данных

System DSN — системные источники данных ODBC — доступны для всех зарегистрированных пользователей. Процедура создания таких источников практически идентична той, что применяется для настройки User DSN, за рядом небольших отличий:

Для добавления нового системного источника данных нужно создать шаблон конфигурации, а затем от имени суперпользователя добавить запись в odbc.ini:

aag@aag:~> odbcinst -i -s -l -f sysdsn.tpl

Файловые источники данных

Этот тип DSN позволяет выполнять SQL-запросы к структурированным текстовым файлам (формат .csv — анг. comma-separated values). Поддержка File DSN очень хорошо реализована в Windows-версии ODBC, а вот в unixODBC драйвер libodbctxtS.so работает не очень устойчиво, поэтому здесь не рассматривается. По большому счету, UNIX-подобные системы представляют множество утилит обработки текста, которые куда лучше подходят для этого, чем ODBC.

Графические утилиты настройки ODBC

Рассмотренная выше консольная утилита odbcinst предназначена, в первую очередь, для использования в скриптах оболочки. Для выполнения настрйки ODBC из GUI можно использовать графические приложения ODBCConfig (рис. 1), DataManager (рис. 2) и подобных. Их использование выходит за рамки этой лабораторной работы и выносится на самостоятельное изучение.

Утилита ODBCConfig

Рис. 1. Окно утилиты ODBCConfig

Утилита управления данными через ODBC

Рис. 2. Использование DataManager для выполнения SQL-запросов

CC-BY-CA Анатольев А.Г., 26.11.2013