[править] Общие сведенияВ статье пойдет речь о нескольких способах подключения к базам данных MS SQL Server из Perl на виртуальном UNIX-хостинге 1Gb.ru При этом вы должны уметь подлючаться к серверу по SSH и самостоятельно устанавливать различные модули Perl. Собственно, статья объясняет не только создание подключения из Perl, а в большей степени обращение к MS SQL Server из операционной системы UNIX в целом. [править] ODBCODBC - это всего лишь программный интерфейс, который призван был унифицировать и в том числе облегчить различным программам (из различных операционных систем) обмен информацией с базами данных. Сам по себе ODBC интерфейс ничего не знает о том, какой порт используется, какой протокол при обращении к той или иной базе, этим занимается исключительно драйвер, который имеет поддержку ODBC и описан в его настройках. В UNIX системах имеется несколько реализаций ODBC, наиболее популярные реализации unixODBC и iODBC. unixODBC обычно установлен на серверах хостинга, однако если его нет, то вы можете его поставить самостоятельно в свой домашний каталог, либо обратитесь к поддерже. Проверяется наличие ODBC так: $ odbc_config --version Также существует и несколько драйверов с поддержой ODBC для работы с MS SQL Server, есть платные, есть и бесплатные. Лучшим бесплатным драйвером для UNIX'а уже давно принято считать FreeTDS (установлен по-умолчанию на всех серверах хостинга 1Gb.ru). Именно на его основе и пойдет дальнейшее изложение настройки подключения. [править] Настройка
echo 'export ODBCSYSINI=$HOME' >> ~/.bashrc echo 'export ODBCINI=$HOME/.odbc.ini' >> ~/.bashrc source ~/.bashrc
[FreeTDS] Description = FreeTDS driver (MS SQL) Driver = /usr/lib/libtdsodbc.so
Сгенерируем файл описания драйвера на основе нашего шаблона: odbcinst -i -d -f tds.driver.tmpl
В случае успешной установки, команда напишет следующее: odbcinst: Driver installed. Usage count increased to 1. Target directory is /home/virtwww/... Также появится файл $ cat ~/odbcinst.ini [FreeTDS] Description=FreeTDS driver (MS SQL) Driver=/usr/lib/libtdsodbc.so UsageCount=1
Аналогично делаем файл шаблона [MSSQL] Driver = FreeTDS Description = ODBC via FreeTDS Trace = No Server = ms-sql-4.in-solve.ru Port = 1433 Database = 1gb_dmih222
Генерируем файл $ odbcinst -i -s -f tds.dsn.tmpl
Команда не выводит никакой информации, однако, успешным результатом ее работы будет создание файла $ 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 -v MSSQL логин пароль
В случае успешного подключения, вы увидите примерно следующее: +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> можно какой-нибудь и SQL-запрос туда написать ;) [править] Настройка Perl (установка модулей)
$ perl -e 'use DBI;' $ perl -e 'use DBD::ODBC;' если модуля нет, то поставьте его. Примечание. Посмотреть список всех модулей поддерживающих интерфейс DBI можно так: $ perl -MDBI -e 'DBI->installed_versions;' Если все модули на месте или их установка прошла успешно, то можно переходить к тестированию. [править] Проверка подключения из PerlСоздадим простой скрипт #!/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;
и сама проверка: $ 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-шелл, то используйте команду
[MYMSSQL]
host = ms-sql-4.in-solve.ru
port = 1433
[править] Проверка подключения из Perl
#!/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;
$ perl mssql_connect2.pl Connecting to the database was successful [править] См. также[править] Ссылки
|
|





