Thanks Perrin, for your valuable inputs.
I tried it from the command-line. The disconnect was almost instantaneous. The TCP connection to the Oracle server moved from 'ESTABLISHED' to 'TIME_WAIT' state as soon as $dbh->disconnect was called.
So am facing this problem after mod_perl integration with
my snip below. <this same snip works well on command-line>.
I think mod_perl is not letting the database connection to be torn down!! I am not using Apache DBI though, so persistent connection concept can be ruled out.
Any more clues that I may want to take a look at?
Here's my Perl snip for reference:
use DBI;
my $dbh = 0;
sub connect_db {
if (defined $dbh) {
eval {
$dbh->ping;
};
if (!$@) {
#success return preserver database handle
return $dbh;
}
}
#ok, create a new database handle
my $retry_count = 5;
while ((!$dbh) && ($retry_count > 0)) {
$dbh = DBI->connect('dbi:Oracle:linuxdb3','scott', 'ti
+ger');
$retry_count -= 1;
sleep(1);
}
if (!$dbh) {
# Database connection failed
return 0;
}
# Database connection OK
return $dbh;
}
sub disconnect_db {
if (defined $dbh) {
eval {
$dbh->ping;
};
if ($@) {
# Database handle invalid as ping failed
return 0;
}
}
# Disconnect Database connection
$dbh->disconnect;
return 1;
}
--
Thanks,
Vivek AN
|