On Sat, Jan 31, 2004 at 08:30:51PM -0500, Gerard Tromp wrote: > Some additional data. > > When the tests are trimmed to 13 (see previous message below), the failure > affects only 2 (9,11) or 3 (9,11,12) tests. > The tests are: > 9 ok(0, $tmp = $sth->fetchall_arrayref, 1); # line 156 > 11 ok(0, $tmp->[0],[1] eq .... # line 158 > 12 ok(0, $tmp->[1],[1] eq .... # line 160 > > I have tried both statically linked and dynamically linked perl binaries (no > threading). > > It appears to make no difference whether "$dbh->{LongReadLen} = 20;" at line > 144, or "$dbh->{LongReadLen} = 80;" (with original oci8.c). > > The error message "ORA-01801: date format too long for internal buffer" is > triggered intermittently when the tests are trimmed to 13. I am including > the output below for a run of 100 sets of 13 tests to show the intermittent > failure. > Summary: > In a run of 100 tests, the failures are sporadic. > ================================================ > Sometimes 2 (9,11) tests fail, sometimes 3 (9,11,12) > Failed: 31, 45, 58, 69, 70, 83 > Period: 31, 14, 13, 11, 1, 13 > Failures: 2, 3, 2, 2, 3, 2
Great work! Since you're obviously keen to get to the bottom of this I'd suggest building and using a perl compiled with -DDEBUGGING and -DPURIFY. Check the results are the same (they ought to be, allbeit slower). Then try using a memory debugger. Ideally a commercial one like Purify if you can get it, else a free one like electricfence, dbmalloc, dmalloc etc. There's a handy list of such tools maintained here: http://www.cs.colorado.edu/homes/zorn/public_html/MallocDebug.html Don't be surprised if there's lots of 'noise' from Oracle libs. Last time I ran Purify on them it was scary, very scary. Good luck! The alternative is to write off Oracle 8.1.7 as a buggy release (in relation to LOB handling, c.f. Oracle bug #886191) especially as exactly the same DBD::Oracle code works without this problem on all later Oracle releases. Tim.