php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #36250 PHP Causes ORA-07445 Core dump in Oracle server 9.2.x
Submitted: 2006-02-01 19:49 UTC Modified: 2008-02-15 22:59 UTC
From: fred dot cohen at iridium dot com Assigned:
Status: Closed Package: OCI8 related
PHP Version: 5.1.2 OS: Solaris 9
Private report: No CVE-ID: None
 [2006-02-01 19:49 UTC] fred dot cohen at iridium dot com
Description:
------------
This isn't a bug in PHP, but I'm submitting it since Oracle currently has no patch available and it's cause isn't obvious.

Using the Instant Client 10.2 and PHP 5.1.2 connecting to Oracle 9.2.0.7 we began seeing ORA-07445 errors immediately after upgrading to the versions listed.  They may appear to occur intermittently, but they can happen as frequently as the oci8.ping_interval value. 

I've traced it down to the OCIPing call in the oci extension.

It turns out any calls to OCIPing cause the error in the server.

Workaround: 
In php.ini [oci8] section, set:
oci8.ping_interval=-1

I'll provide updates about possible patches from Oracle as soon as they're able to respond.


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-03-04 07:33 UTC] fred dot cohen at iridium dot com
Oracle is claiming OCIPing isn't a supported in anything less than oracle 10.2
 [2006-03-04 07:41 UTC] fred dot cohen at iridium dot com
It might be a good idea get the Server Version with a call to OCIServerVersion rather than relying on the OCI_xx_VERSION defines.  Any of the developers care to comment?


#if OCI_MAJOR_VERSION >= 10 && OCI_MINOR_VERSION >= 2
	/* OCIPing() is usable only in 10.2 */
	OCI_G(errcode) = PHP_OCI_CALL(OCIPing, (connection->svc, OCI_G(err), OCI_DEFAULT));
#else
	char version[256];
	/* use good old OCIServerVersion() by default */
	OCI_G(errcode) = PHP_OCI_CALL(OCIServerVersion, (connection->server, OCI_G(err), (text*)version, sizeof(version), OCI_HTYPE_SERVER));
#endif
 [2006-03-05 08:43 UTC] tony2001@php.net
So you're effectively saying that OCIPing() which exists in OIC is not supported by Oracle servers 8 and 9 and causes them to crash? 
This sounds really.. hmm.. weird, because I was recommended to use OCIPing() namely by Oracle developers.
 [2006-03-06 22:19 UTC] fred dot cohen at iridium dot com
That's what Oracle is telling us. 
This is directly from our ticket with them:

I think there are 2 things you can do to fix your problem.

1. Install the 10.2 listener in the box where your 10.1.x or your 9.x database are running and use that listener to listen for your 
databases.
2. Fix the OCI8 driver for PHP so it does not use OCIPING at all


We're awaiting further response from Oracle because their response conflicts with all the documentation I've been able to find on OCI and the OCIPing function.
 [2006-03-07 00:18 UTC] cjbj at hotmail dot com
OCIPing requires 10.1 or 10.2 OCI client libraries.  It will (or
should) return a nice error when the database server is 8.1 or 9.2.
This won't help PHP validate the connection as intended when connected
to these older databases.  The oci8 extension should just use
OCIServerVersion.

The OCI Developers are against the concept of pinging for each
connection because it is an unneccessary round-trip between OCI client
and database server.
 [2006-03-07 08:52 UTC] tony2001@php.net
Ok, I've commented out OCIPing() call, OCI8 from now will use OCIServerVersion() with all client versions.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Mar 19 08:01:29 2024 UTC