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

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

(Различия между версиями)
Перейти к: навигация, поиск

Renton (Обсуждение | вклад)
(Новая: == Общие сведения == В статье пойдет речь о нескольких способах подключения к базам данных MS SQL Server из Perl...)
К следующему изменению →

Версия 15:56, 9 августа 2010

Содержание

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

В статье пойдет речь о нескольких способах подключения к базам данных 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 или еще где.
export ODBCSYSINI=$HOME
export ODBCINI=$HOME/.odbc.ini
  • Создадим конфигурацию драйвера, который и будет выполнять подключение к БД, для этого создайте с помощью вашего любимого редактора, файл шаблона с любым именем (например, 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;

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
Личные инструменты