Подключение к MS SQL Server из Perl
Материал из 1GbWiki.
Содержание |
[править] Общие сведения
В статье пойдет речь о нескольких способах подключения к базам данных 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 драйверы для всевозможных операционных систем, также присутствует огромное количество документации.