ID: 27696 Updated by: [EMAIL PROTECTED] Reported By: gioppo at csi dot it -Status: Open +Status: Feedback Bug Type: OCI8 related Operating System: System Linux 2.2.19-6.2.1 PHP Version: Irrelevant Assigned To: tony2001 New Comment:
So, you've solved it, yes? This piece of code didn't help me much, just because I can't test it. Previous Comments: ------------------------------------------------------------------------ [2004-03-30 09:05:14] gioppo at csi dot it We probably solved the problem bypassing tnsnames.ora. We made the connection using tnsnames defined alias and it got errors sometime. Here is a chunk of php code (we used method b which gave errors sometime, when we used d mode we always manage to make connection) any hint? A problem on finding tnsnames? NOTE OCILogon is a php library function so no hint on how to modify it, but the behaviour meke me think about an environment problem: we have a Compile-time ORACLE_HOME /oracle_home for compiling OCI for php but ORACLE_HOME /oracle817/app/oracle/product/8.1.7 _ENV["ORACLE_HOME"] /oracle817/app/oracle/product/8.1.7 on env for apache and php (/oracle_home is a symbolic link to the /oracle817/app/oracle/product/8.1.7 folder) could be that the OCI8 so compiled have trouble on traversing the link? /* Multiple modes of connection are supported: a. Local Database $conn->Connect(false,'scott','tiger'); b. From tnsnames.ora $conn->Connect(false,'scott','tiger',$tnsname); $conn->Connect($tnsname,'scott','tiger'); c. Server + service name $conn->Connect($serveraddress,'scott,'tiger',$service_name); d. Server + SID $conn->connectSID = true; $conn->Connect($serveraddress,'scott,'tiger',$SID); Example TNSName: --------------- NATSOFT.DOMAIN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = kermit)(PORT = 1523)) ) (CONNECT_DATA = (SERVICE_NAME = natsoft.domain) ) ) There are 3 connection modes, 0 = non-persistent, 1 = persistent, 2 = force new connection */ function _connect($argHostname, $argUsername, $argPassword, $argDatabasename,$mode=0) { $this->_errorMsg = false; $this->_errorCode = false; if($argHostname) { // added by Jorma Tuomainen <[EMAIL PROTECTED]> if (empty($argDatabasename)) $argDatabasename = $argHostname; else { if(strpos($argHostname,":")) { $argHostinfo=explode(":",$argHostname); $argHostname=$argHostinfo[0]; $argHostport=$argHostinfo[1]; } else { $argHostport="1521"; } if ($this->connectSID) { $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname .")(PORT=$argHostport))(CONNECT_DATA=(SID=$argDatabasename)))"; } else $argDatabasename="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=".$argHostname .")(PORT=$argHostport))(CONNECT_DATA=(SERVICE_NAME=$argDatabasename)))"; } } if ($mode==1) { $this->_connectionID = OCIPLogon($argUsername,$argPassword, $argDatabasename); if ($this->_connectionID && $this->autoRollback) OCIrollback($this->_connectionID); } else if ($mode==2) { $this->_connectionID = OCINLogon($argUsername,$argPassword, $argDatabasename); } else { $this->_connectionID = OCILogon($argUsername,$argPassword, $argDatabasename); } if ($this->_connectionID === false) return false; ------------------------------------------------------------------------ [2004-03-26 05:00:13] [EMAIL PROTECTED] Please, try latest stable PHP release. And try latest PHP5 snapshot, there are a lot of changes since November. I have no idea what code ADO uses to connect to Oracle, so please provide a short example with standard PHP functions, not wrapped with ADO or other wrapper. ------------------------------------------------------------------------ [2004-03-25 17:16:32] gioppo at csi dot it Here is a note from oracle metalink The errors ( ORA-24327, OCI-21560) may indicate OCI usage error if you are using OCI, can you verify if it's possible to physically connect to a server process or dispatcher ( for MTS-configured DB) via OCIServerAttach ... then try to authenticate one of more users via that connection to start one or more database sessions (via OCISessionBegin). IF OCIServerAttach fails and OCISessionBegin is invoked, you may get errors. According to OCI Programmer's guide (OCISessionBegin) For release 8.1 or later, OCISessionBegin() must be called for any given server handle before requests can be made against it. OCISessionBegin() only supports authenticating the user for access to the Oracle server specified by the server handle in the service context. In other words, after OCIServerAttach() is called to initialize a server handle, OCISessionBegin() must be called to authenticate the user for that given server. ------------------------------------------------------------------------ [2004-03-25 16:59:39] gioppo at csi dot it I've red the changelog between the 4.3.2 and the actual php version but it doesn't seems to have any mods on oci part. I've red somewhere that the problem could be bacause on oci code could be called the session init before the attach. Really do not understand it how expecially since in the situation where we have just 1 web server everithing goes well but with 4 behind a balancer we get the error. No code change so really getting mad about it, any hint on where to look for more data is appreciated. ORACLE_HOME is set, the tnsname is correct (otherwise we should never connect) going to look also on metalink for some other help. ------------------------------------------------------------------------ [2004-03-25 16:49:07] gioppo at csi dot it Using ADODB project, istanciating this chunk of code: $dbconn = ADONewConnection($dbtype); $dbh = $dbconn->Connect($dbhost, $dbuname, $dbpass, $dbname); This means that the code executed is: $this->_connectionID = OCILogon($argUsername,$argPassword, $argDatabasename); ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/27696 -- Edit this bug report at http://bugs.php.net/?id=27696&edit=1