Подключение к MS SQL Server из Perl

Материал из 1GbWiki.

Версия от 17:31, 9 августа 2010; Renton (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

Общие сведения

В статье пойдет речь о нескольких способах подключения к базам данных MS SQL Server из Perl на виртуальном UNIX-хостинге 1Gb.ru При этом вы должны уметь подлючаться к серверу по SSH и самостоятельно устанавливать различные модули Perl. Собственно, статья объясняет не только создание подключения из Perl, а в большей степени обращение к MS SQL Server из операционной системы UNIX в целом.

ODBC

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

В UNIX системах имеется несколько реализаций ODBC, наиболее популярные реализации unixODBC и iODBC. unixODBC обычно установлен на серверах хостинга, однако если его нет, то вы можете его поставить самостоятельно в свой домашний каталог, либо обратитесь к поддерже.

Проверяется наличие ODBC так:

$ odbc_config --version

Также существует и несколько драйверов с поддержой ODBC для работы с MS SQL Server, есть платные, есть и бесплатные. Лучшим бесплатным драйвером для UNIX'а уже давно принято считать FreeTDS (установлен по-умолчанию на всех серверах хостинга 1Gb.ru). Именно на его основе и пойдет дальнейшее изложение настройки подключения.

Настройка

  • Подготовим переменные окружения, для того, чтобы файлы настроек сохранялись в домашнем каталоге, а не в /etc или еще где.
echo 'export ODBCSYSINI=$HOME' >> ~/.bashrc
echo 'export ODBCINI=$HOME/.odbc.ini' >> ~/.bashrc
source ~/.bashrc
  • Создадим конфигурацию драйвера, который и будет выполнять подключение к БД, для этого создайте с помощью вашего любимого редактора, файл шаблона с любым именем (например, tds.driver.tmpl) примерно такого содержания:
[FreeTDS]
Description = FreeTDS driver (MS SQL)
Driver = /usr/lib/libtdsodbc.so

[FreeTDS] - это просто имя для драйвера, можете придумать что-то свое
Description - описание, может быть любым; исключительно для удобства;
Driver - важная строка, содержит полный путь к драйверу;

Сгенерируем файл описания драйвера на основе нашего шаблона:

odbcinst -i -d -f tds.driver.tmpl

-i - записать сведения о драйвере в odbcinst.ini;
-d - сведения должны быть о драйвере;
-f - использовать файл шаблона;

В случае успешной установки, команда напишет следующее:

odbcinst: Driver installed. Usage count increased to 1.
Target directory is /home/virtwww/...

Также появится файл odbcinst.ini

$ cat ~/odbcinst.ini
[FreeTDS]
Description=FreeTDS driver (MS SQL)
Driver=/usr/lib/libtdsodbc.so
UsageCount=1
  • Теперь опишем наше соединение, DSN.

Аналогично делаем файл шаблона tds.dsn.tmpl, его содержимое:

[MSSQL]
Driver      = FreeTDS
Description = ODBC via FreeTDS
Trace       = No
Server      = ms-sql-4.in-solve.ru
Port        = 1433
Database    = 1gb_dmih222

[MSSQL] - название соединения, может быть все что угодно, именно это имя будет затем использоваться для установления соединения;
Description - описание, может быть любым; исключительно для удобства;
Driver - важное поле, это название драйвера, который мы описали в файле odbcinst.ini

Генерируем файл .odbc.ini:

$ odbcinst -i -s -f tds.dsn.tmpl

-s - сведения должны быть о соединении;
Команда не выводит никакой информации, однако, успешным результатом ее работы будет создание файла ~/.odbc.ini

$ cat ~/.odbc.ini
[MSSQL]
Driver=FreeTDS
Description=ODBC via FreeTDS
Trace=No
Server=ms-sql-4.in-solve.ru
Port=1433
Database=1gb_dmih222
  • Удаляем мусор:
$ rm ~/tds.driver.tmpl; rm ~/tds.dsn.tmpl

Проверка подключения

  • Проверку делаем через консольную утилиту isql
isql -v MSSQL логин пароль

MSSQL - имя подключения;
логин - логин к базе данных;
пароль - пароль к базе данных;

В случае успешного подключения, вы увидите примерно следующее:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

можно какой-нибудь и SQL-запрос туда написать ;)

Настройка Perl (установка модулей)

  • Для того, чтобы Perl скрипты могли обращаться к драйверу FreeTDS через интерфейс ODBC, мы будем использовать модуль Perl DBD::ODBC, собственно, и реализующий эту возможность. DBD::ODBC также основан на архитектуре DBI, поэтому проверим, что все необходимые модули у нас есть:
$ perl -e 'use DBI;'
$ perl -e 'use DBD::ODBC;'

если модуля нет, то поставьте его.

Примечание. Посмотреть список всех модулей поддерживающих интерфейс DBI можно так:

$ perl -MDBI -e 'DBI->installed_versions;'

Если все модули на месте или их установка прошла успешно, то можно переходить к тестированию.

Проверка подключения из Perl

Создадим простой скрипт mssql_connect.pl:

#!/usr/bin/perl -w

use strict;
use DBI;

$ENV{'ODBCSYSINI'} = "$ENV{'HOME'}";
$ENV{'ODBCINI'} = "$ENV{'HOME'}/.odbc.ini";

my $data_source = q/dbi:ODBC:имя_подключения/;
my $user = q/логин/;
my $password = q/пароль/;

my $dbh = DBI->connect($data_source, $user, $password)
          or die "Can't connect to $data_source: $DBI::errstr";

print "Connecting to the database was successful\n" if ($dbh);

$dbh->disconnect;

имя_подключения - имя из квадратных скобок из файла ~/.odbc.ini, т.е. в нашем примере это MSSQL;

и сама проверка:

$ perl mssql_connect.pl
Connecting to the database was successful

Native connection

Как правило, это обращение к драйверу и использование его возможностей напрямую, без каких-либо иных высокоуровневых интерфейсов. В используемом нами драйвере FreeTDS существует поддержка открыторго API CTLIB, разработанного компанией Sybase, его мы и будем использовать.

В Perl интерфейс CTLIB реализован в модуле DBD::Sybase

Настройка окружения, установка модулей

  • Проверим, есть ли нужные нам модули:
$ perl -e 'use DBI;'
$ perl -e 'use DBD::Sybase;'

если нет, то поставим их.

Для того, чтобы поставить модуль DBD::Sybase, мы должны сообщить, где расположен драйвер:

$ echo 'export SYBASE=/usr' >> ~/.bashrc
$ source ~/.bashrc

и далее уже ставим модуль, либо через CPAN, либо используя Makefile, кому как удобнее.


Примечание 1. Так как используется общесистемный драйвер, расположенный по стандартному пути, то делать это не обязательно. Однако не забудьте добавить правильный путь, если вы используете свой драйвер, установленный в домашний каталог.

Примечание 2. Если вы ставите модуль через CPAN-шелл, то используйте команду force install DBD::Sybase, дабы избежать ненужных тестов.


  • В файле ~/.freetds.conf опишем наше подключение:
[MYMSSQL]
    host = ms-sql-4.in-solve.ru
    port = 1433

[MYMSSQL] - это имя, которое мы будем использовать в скриптах при подключении к серверу;

Проверка подключения из Perl

  • Создадим скрипт mssql_connect2.pl с таким содержимым:
#!/usr/bin/perl -w

use strict;
use DBI;
$ENV{'SYBASE'} = "/usr";

my $data_source = q/dbi:Sybase:MYMSSQL/;
my $user = q/логин/;
my $password = q/пароль/;

my $dbh = DBI->connect($data_source, $user, $password)
          or die "Can't connect to $data_source: $DBI::errstr";

print "Connecting to the database was successful\n" if ($dbh);

$dbh->disconnect;

MYMSSQL - это имя подключения из файла ~/.freetds.conf

  • Проверка:
$ perl mssql_connect2.pl
Connecting to the database was successful

См. также

Ссылки

  • ODBC (англ.) - описание интерфейса ODBC на сайте wikipedia.org.
  • unixODBC (англ.) - официальная страница unixODBC, документация, примеры настроек и пр.
  • FreeTDS (англ.) - официальная страница проекта FreeTDS, документация, подробные примеры.
  • Linux/UNIX ODBC (англ.) - хорошая документация по описанию и работе с ODBC в UNIX'е.
  • Easysoft - платные ODBC драйверы (англ.) - официальный сайт компании, разрабатывающие платные ODBC драйверы для всевозможных операционных систем, также присутствует огромное количество документации.
Личные инструменты