Подключение к MS SQL Server из Perl
Материал из 1GbWiki.
Версия 16:20, 9 августа 2010 (править) Renton (Обсуждение | вклад) (→Проверка подключения из Perl) ← К предыдущему изменению |
Версия 16:42, 9 августа 2010 (править) (отменить) Renton (Обсуждение | вклад) (→Native connection) К следующему изменению → |
||
Строка 137: | Строка 137: | ||
== Native connection == | == Native connection == | ||
- | Как правило, это обращение к драйверу и использование его возможностей напрямую, без каких-либо иных интерфейсов. | + | Как правило, это обращение к драйверу и использование его возможностей напрямую, без каких-либо иных высокоуровневых интерфейсов. В используемом нами драйвере FreeTDS существует поддержка открыторго API CTLIB, разработанного компанией [http://www.sybase.com/ Sybase], его мы и будем использовать. |
- | В | + | |
+ | В Perl интерфейс CTLIB реализован в модуле [http://search.cpan.org/dist/DBD-Sybase/Sybase.pm DBD::Sybase] | ||
=== Установка модулей === | === Установка модулей === |
Версия 16:42, 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
или еще где.
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