再コンパイルして再インストールした後、Perl DBD::ODBC に unixODBC を使用させることができないという問題があります。以前にインストールされていました。
DBD::ODBC をコンパイルして、DataDirect ODBC Driver Manager を使用しました。unixODBC を使用するように再コンパイルしたいと思います。ただし、新しいソースから開始し、構成 (unixODBC を取得) し、コンパイルしてインストールしても、DataDirect ODBC Driver Manager を使用するとスタックするようです。Perlモジュールフォルダーからすべてのファイル(私が知っている)を削除するところまで行きましたが、再インストールしても問題は残ります。
インストール先のサーバーにインターネット接続がないため、ソースからコンパイルしているため、CPAN を使用していません。
Solaris 10でPerl 5.8.4(環境に一致)でunixODBC 1.2.3を使用しています。
見つけたものはすべて削除しました:
1. cd /usr/perl5/site_perl/5.8.4/sun4-solaris-64int/auto/DBD/
2. sudo rm -R ODBC
3. cd /usr/perl5/site_perl/5.8.4/sun4-solaris-64int/DBD/
4. sudo rm -R ODBC
5. sudo rm ODBC.pm
6. cd /usr/perl5/5.8.4/man/man3/
7. sudo rm DBD::ODBC.3
8. sudo vi /usr/perl5/5.8.4/lib/sun4-solaris-64int/perllocal.pod
次に、DBD::ODBC のエントリをすべて削除しましたperllocal.pod
。
実行perl Makefile.PL
すると、unixODBC が検出されていることがわかります。
Looking for odbc_config at /usr/local/unixODBC_sp64/bin/odbc_config
Found odbc_config (via /usr/local/unixODBC_sp64/bin/odbc_config) version 2.3.2
odbc_config reports --prefix=/usr/local/unixODBC_sp64
odbc_config reports --include-prefix=/usr/local/unixODBC_sp64/include
odbc_config reports --lib-prefix=/usr/local/unixODBC_sp64/lib
ODBC INC dir set to /usr/local/unixODBC_sp64/include from odbc_config
ODBC LIB dir set to /usr/local/unixODBC_sp64/lib from odbc_config
Using ODBC HOME /usr/local/unixODBC_sp64
This looks like a unixodbc type of driver manager.
Looking for odbcinst
odbcinst -j reports:
unixODBC 2.3.2
DRIVERS............: /usr/local/unixODBC_sp64/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/unixODBC_sp64/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/unixODBC_sp64/etc/ODBCDataSources
USER DATA SOURCES..: /usr/local/unixODBC_sp64/etc/odbc.ini
モジュールをコンパイルしてインストールする環境での ODBC に関連するすべての環境変数を次に示します。
LD_LIBRARY_PATH=/usr/local/unixODBC_sp64/lib:
LD_LIBRARY_PATH_64=/usr/local/unixODBC_sp64/lib:
PATH=/usr/local/unixODBC_sp64/bin:/usr/sfw/bin:/usr/ccs/bin:/opt/SUNWspro/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/bin
ODBCINI=/usr/local/unixODBC_sp64/etc/odbc.ini
ODBCHOME=/usr/local/unixODBC_sp64
テストを実行すると、DataDirect ドライバー マネージャーからのエラーがまだ表示されます。
DBI connect('lksdjhf','ljkshdf',...) failed: [DataDirect][ODBC lib] System information file not found. Please check the ODBCINI environment variable. (SQL-IM002) at ./test_odbcdb2.pl line 19
odbc.ini が設定されていないため、ドライバーが見つからないという事実は無視してください。unixODBC からの同じエラー メッセージを確認したいので、ジャンク接続でテストしています。
テストに使用している Perl スクリプトは次のとおりです。DataDirect ドライバー マネージャーと連携します。
#!/usr/bin/perl -w
use DBI;
use DBD::ODBC;
use DBD::DB2::Constants;
print "Enter Data Source Name:";
my $dsn =<STDIN>;
chomp $dsn;
my $data_source = "DBI:ODBC:$dsn";
print "Enter Username:";
my $user =<STDIN>;
print "Enter password:";
my $password =<STDIN>;
chomp $user;
chomp $password;
# Connect to the db2 database using odbc
my $dbh = DBI->connect($data_source, $user, $password, {AutoCommit =>1})
or die "Can't connect to $data_source: $DBI::errstr";
$stmt = "SELECT current timestamp from sysibm.sysdummy1; ";
$sth = $dbh->prepare($stmt);
$sth->execute();
#associate variable with output columns...
$sth->bind_col(1,\$timestap);
while ($sth->fetch) {
print "The time is: $timestap\n";
}
$dbh->disconnect;