Martin,
thanks for your reply.
as to the version of unixodbc, I use what is part of SuSe 9.2:
Name : unixODBC Relocations: (not relocatable)
Version : 2.2.9 Vendor: SUSE LINUX AG, Nuernberg, Germany
Release : 4 Build Date: Mo 04 Okt 2004 22:49:44Is there a way other than recompiling to check whether threading is enabled in this build ?
Changing the connect string to
my $dbh = DBI->connect('DSN=emanuel-sbart;UID=***;PWD=***;')
|| die "can't connect to $data_source: $DBI::errstr";
as you suggested results in the message:
Can't connect to data source DSN=emanuel-sbart;UID=***;PWD=***;,
no database driver specified and DBI_DSN env var not set at
odbc-emanuel-test.pl line 17You asked about the driver I am using:
-----------/etc/unixODBC/odbcinst.ini-------------- [AdabasD] Description = AdabasD -Treiber Driver = /usr/local/lib/odbclib.so
this .so is from the adabas11-06 distribution.
-------------/etc/odbc.ini [emanuel-sbart] Description = Adabas 11.06 on emanuel Driver = AdabasD Server = emanuel Database = sbart
-walt
Martin Evans wrote:
I might be wrong - my info is well out of date... but on Linux, Perl built multithreaded always segfaulted with unixODBC. I think this happened even if unixODBC was built threaded (--enable-threads=yes - the default for unixODBC's configure but I'd check your unixODBC was built threaded). I can't remember the exact reason I'm afraid. isql is not threaded.
The data source not found message may be related to what DBD::ODBC does. It first tries to call SQLDriverConnect with (in your case) emanuel-sbart and when that fails calls SQLConnect(emanuel-sbart) - you can see this in your log. You can get around this by making the DBI connect string "DSN=emanuel-sbart;UID=db_user;PWD=db_pass;". See
http://www.easysoft.com/products/9999/faq_answer.phtml?ID=97&product=2002
but it won't make the segfault go away. I'd rebuild your Perl without threads if I were you.
You can also see from your log that the SQLConnect succeeeds.
BTW, you did not mention which driver you were using.
Martin
Quoting Walter Obermiller <[EMAIL PROTECTED]>:
Hi, all
I am experiencing a puzzling problem while trying to get an DBD::ODBC connection (via unixODBC) working from a client machine A (Suse linux) to a an ADABAS-D-11 database running on a remote machine (B, also Suse linux)
-------------------------- Machine A (client)
Linux 2.6.8-2
Perl : 5.008005 (i586-linux-thread-multi)
OS : linux (2.6.8.1)
DBI : 1.43
DBD::Proxy : install_driver(Proxy) failed: Can't locate RPC/PlClient.pm in @INC
DBD::ODBC : 1.06
----------------------------------------------
Connections using isql (unixODBC) from machine A to machine B run smoothly, hence I reckon, unixodbc and prima facie odbc-configuration blotches are not the problem.
When I try to trivially connect with DBD::ODBC to the very same DSN that I could connect to using isql without a problem, I get a segmentation fault.
----------trivial-connect---------------------- #!/usr/bin/perl use DBI; my $dbh = DBI->connect('dbi:ODBC:emanuel-sbart', '***','***') || die "can't connect to $data_source: $DBI::errstr"; $rc = $dbh->disconnect; exit(); --------------------------------
and inspection of the sql.log (of unixodbc) reveals the error message:
---------------------
Message Text = [[unixODBC][Driver Manager]Data source name not found, and no default driver specified]
[ODBC][13206][SQLError.c][424]
-------------------------------
Can anybody give me an idea which direction could be pursued to solve this problem ?
What beats me is that isql can connect to my remote database, but an dbd::odbc connection to the same DSN utterly fails.
Any hints welcome.
-walter
--------------sql.log--------------------------------------------------------
[ODBC][13206][__handles.c][421] Exit:[SQL_SUCCESS]
Environment = 0x82ce928
[ODBC][13206][SQLSetEnvAttr.c][182] Entry:
Environment = 0x82ce928
Attribute = SQL_ATTR_ODBC_VERSION
Value = 0x3
StrLen = -6
[ODBC][13206][SQLSetEnvAttr.c][349] Exit:[SQL_SUCCESS] [ODBC][13206][SQLAllocHandle.c][346] Entry:
Handle Type = 2
Input Handle = 0x82ce928
[ODBC][13206][SQLAllocHandle.c][464] Exit:[SQL_SUCCESS]
Output Handle = 0x82ceeb8
[ODBC][13206][SQLDriverConnect.c][666] Entry:
Connection = 0x82ceeb8
Window Hdl = (nil)
Str In = [emanuel-sbart][length = 13]
Str Out = 0xbfffdfc0
Str Out Max = 2048
Str Out Ptr = 0xbfffdfbe
Completion = 0
[ODBC][13206][SQLDriverConnect.c][998]Error: IM002 [ODBC][13206][SQLError.c][424] Entry:
Connection = 0x82ceeb8
SQLState = 0xbfffdf60
Native = 0xbfffdd58
Message Text = 0xbfffdd60
Buffer Length = 511
Text Len Ptr = 0xbfffdd5e
[ODBC][13206][SQLError.c][461] Exit:[SQL_SUCCESS]
SQLState = IM002
Native = 0xbfffdd58 -> 0
Message Text = [[unixODBC][Driver Manager]Data source name not found,
and no default driver specified] [ODBC][13206][SQLError.c][424] Entry:
Connection = 0x82ceeb8
SQLState = 0xbfffdf60
Native = 0xbfffdd58
Message Text = 0xbfffdd60
Buffer Length = 511
Text Len Ptr = 0xbfffdd5e
[ODBC][13206][SQLError.c][461] Exit:[SQL_NO_DATA] [ODBC][13206][SQLConnect.c][3495] Entry:
Connection = 0x82ceeb8
Server Name = [emanuel-sbart][length = 13]
User Name = [walter][length = 6]
Authentication = [***][length = 3]
UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'
[ODBC][13206][SQLConnect.c][4069] Exit:[SQL_SUCCESS]
