Re: [dbi] Re: Problem with DBD::ODBC (via unixODBC) connection to remote ADABAS-11 database
From: Walter Obermiller (obermiller_at_schweizerbart.de)
Date: 02/22/05
- Next message: Ing. Branislav Gerzo: "Re: retrieve many values"
- Previous message: Ron Reidy: "RE: retrieve many values"
- In reply to: Martin J. Evans: "RE: [dbi] Re: Problem with DBD::ODBC (via unixODBC) connection to remote ADABAS-11 database"
- Next in thread: Martin J. Evans: "Re: [dbi] Re: Problem with DBD::ODBC (via unixODBC) connection to remote ADABAS-11 database"
- Reply: Martin J. Evans: "Re: [dbi] Re: Problem with DBD::ODBC (via unixODBC) connection to remote ADABAS-11 database"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
To: dbi-users@perl.org Date: Tue, 22 Feb 2005 15:03:51 +0100
Martin,
Martin J. Evans wrote:
> The DontDlClose was a suggestion to stop the seg faulting on exit.
>
> When I said you can use DSN=emanuel-sbart;UID=*;PWD=*; I did of course mean to
> say you need to keep the 'dbi:ODBC' on the front. i.e.
>
> 'dbi:ODBC:DSN=emanuel-sbart;UID=*;PWD=*;'
blush :-)
I have fixed that now.
Ok, got one step further.
Now the test program no longer segfaults, but seems to go into an
endless loop, trying to connect WITHOUT UID and password, and it gets
snubbed by the Adabas library for that (see sql.log below).
Window Hdl = (nil)
Str In =
[DSN=emanuel-sbart;UID=walter;PWD=***;;UID=;PWD=;][length = 48]
It seems, as if additional empty UID and PWD fields contents get tacked
at the end of the connection string so that UID and PWD get passed onto
the ADABAS-Driver empty. The question now is: what is doing such an
ungodly thing ?
Furthermore the programs size grows constantly (memleak).
-walt
--------sql.log-----------------------
now things look better. However, it seems to appear
[ODBC][17879][__handles.c][421]
Exit:[SQL_SUCCESS]
Environment = 0x82ce7c8
[ODBC][17879][SQLSetEnvAttr.c][182]
Entry:
Environment = 0x82ce7c8
Attribute = SQL_ATTR_ODBC_VERSION
Value = 0x3
StrLen = -6
[ODBC][17879][SQLSetEnvAttr.c][349]
Exit:[SQL_SUCCESS]
[ODBC][17879][SQLAllocHandle.c][346]
Entry:
Handle Type = 2
Input Handle = 0x82ce7c8
[ODBC][17879][SQLAllocHandle.c][464]
Exit:[SQL_SUCCESS]
Output Handle = 0x82ced58
[ODBC][17879][SQLDriverConnect.c][666]
Entry:
Connection = 0x82ced58
Window Hdl = (nil)
Str In = [DSN=emanuel-sbart;UID=walter;PWD=***;;UID=;PWD=;][length =
48]
Str Out = 0xbfffe020
Str Out Max = 2048
Str Out Ptr = 0xbfffe01e
Completion = 0
UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'
DIAG [08001] [SOFTWARE AG][ODBCLIB A][ADABAS]Client unable to
establish connection;-715 MISSING USERNAME OR PASSWORD FOR CONNECT.
DIAG [08001] [SOFTWARE AG][ODBCLIB A][ADABAS]Client unable to
establish connection;-715 MISSING USERNAME OR PASSWORD FOR CONNECT.
***************his message is repeated about a zillion
times*******************
--------------------------------------------------------------------------
> Martin
> --
> Martin J. Evans
> Easysoft Ltd, UK
> Development
>
>
> On 22-Feb-2005 Walter Obermiller wrote:
>
>>Martin, thanks.
>>
>>I checked. my unixodbc is indeed threaded.
>>
>>The driver library however, is not:
>>
>> /usr/local/lib/odbclib.so
>> /lib/libNoVersion.so.1 => /lib/libNoVersion.so.1 (0x400a9000)
>> linux-gate.so.1 => (0xffffe000)
>> libsqlrte.so => /usr/local/lib/libsqlrte.so (0x400ce000)
>> libm.so.6 => /lib/tls/libm.so.6 (0x40109000)
>> libc.so.6 => /lib/tls/libc.so.6 (0x4012c000)
>> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
>>
>>
>>Even with dontDLClose=1 set, I get the dreaded:
>>
>> 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 17
>>
>>message. In particular, do you have any idea how I should interpret the
>>'no database driver' specified part of the message; is this the result
>>of an earlier failure or does it mean something?
>>
>>
>> -walt
>>
>>
>>
>>
>>>Quoting Walter Obermiller <obermiller@schweizerbart.de>:
>>>
>>>
>>>
>>>>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:44
>>>>
>>>>Is there a way other than recompiling to check whether threading is
>>>>enabled in this build ?
>>>
>>>Try running ldd on libodbc.so and if it mentions pthread library it is
>>>probably built with --enable-threads=yes.
>>>
>>>>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 17
>>>>
>>>>You 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
>>>>
>>>
>>>
>>>Try adding DontDLClose=1 to your driver entry in the odbcinst.ini
>>>file. It stop unixODBC calling dlclose. Sometimes drivers install atexit
>>>handlers and once the driver manager has unloaded the .so they are invalid
>>>at exit time.
>>>
>>>Martin
>>>
>>>
>>>
>>>>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 <obermiller@schweizerbart.de>:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>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]
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
- Next message: Ing. Branislav Gerzo: "Re: retrieve many values"
- Previous message: Ron Reidy: "RE: retrieve many values"
- In reply to: Martin J. Evans: "RE: [dbi] Re: Problem with DBD::ODBC (via unixODBC) connection to remote ADABAS-11 database"
- Next in thread: Martin J. Evans: "Re: [dbi] Re: Problem with DBD::ODBC (via unixODBC) connection to remote ADABAS-11 database"
- Reply: Martin J. Evans: "Re: [dbi] Re: Problem with DBD::ODBC (via unixODBC) connection to remote ADABAS-11 database"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]