> I don't actually understand why you did that. What was wrong with the normal > ping?
With Oracle DRCP, even though ping succeeds, the connection to the server process is actually terminated. Or ora_ping() may return 0E0 "zero but true" and undef. I don't know. ora_ping() is foreign to me. I made the change based on what Apache::DBI the document said. > In any case, there's no need to change the Apache::DBI code, even with your > "select 1 from dual" test. It returns a true value (0E0) if it succeeds and > a false value (undef) if it fails. In both cases, the return value is evaluated to true: 200: if ($Connected{$Idx} and (!$needping or eval{$Connected{$Idx}->ping})) eval{0E0} and eval{undef} both return true. I did test that. How do you distinguish? > Did your script succeed in reconnecting after it lost the connection? Yes. > Yes, I haven't forgotten about that, but I haven't had time to work on it > yet. You can try fixing it yourself by looking at the code in Apache::DBI > that checks if the server is starting under apache 1.x. Otherwise, I will > eventually get to it. I don't understand that piece of code. I can't do the change. Hope you can help. - xinhuan From: Perrin Harkins <phark...@gmail.com<mailto:phark...@gmail.com>> Date: Thursday, November 7, 2013 11:00 AM To: Xinhuan Zheng <xzh...@christianbook.com<mailto:xzh...@christianbook.com>> Cc: mod_perl list <modperl@perl.apache.org<mailto:modperl@perl.apache.org>> Subject: Re: Apache::DBI connect On Thu, Nov 7, 2013 at 9:46 AM, Xinhuan Zheng <xzh...@christianbook.com<mailto:xzh...@christianbook.com>> wrote: >The $ok is undef. In the case if the test does succeed (like the first >select), $ok returns 0E0. That all sounds good. 0E0 is a true value in Perl. It means "zero but true." And undef is a false value. You don't need to test for undef. > Since I changed DBD::Oracle subroutine ping to use 'select 1 from dual', I don't actually understand why you did that. What was wrong with the normal ping? In any case, there's no need to change the Apache::DBI code, even with your "select 1 from dual" test. It returns a true value (0E0) if it succeeds and a false value (undef) if it fails. Did your script succeed in reconnecting after it lost the connection? > I have another request. The Apache::DBI cached a dead database handle for > apache version 1.3.42 if startup.pl<http://startup.pl> create a database > handle. The apache child processes inherits this dead handle. It doesn't > cause application error but it does take memory space. If there is many > apache processes, that's not good. Can you please identify and change the > code for this problem? Yes, I haven't forgotten about that, but I haven't had time to work on it yet. You can try fixing it yourself by looking at the code in Apache::DBI that checks if the server is starting under apache 1.x. Otherwise, I will eventually get to it. - Perrin