Folks,
For whatever it's worth, here is how I resolved my Oracle TNS Connection
errors...
Everyone may have figured this out by now, but I'm a Linux/Apache/PHP newbie
and this was a major road block for me this past week.
Environment:
1. Linux 6.2 (Zoot)
2. Oracle 8.1.7
3. Apache 1.3.20 (./configure --with-layout=RedHat --enable-module=so)
4. PHP 4.0.5
(./configure --apxs=/usr/sbin/apxs --with-oci8=/app/oracle/product/8.1.7 --w
ith-oracle=/app/oracle/product/8.1.7 --enable-track-vars)
Problem:
When trying to connect to Oracle using ora_logon or ocilogon I would receive
an Oracle error to the tune of "TNS dropped connection SERVICE_NAME not
found," or something like that. In fact there were several error messages
that occurred, but in essence they were all TNS errors. I forget the exact
error message(s) and I don't wish to f-up my configuration to find out.
I tried all the voodoo that I could find in this group as well as some other
tricks found elsewhere. All failed except for the brilliant $db =
"(description=(address_list=(address=(protocol=tcp)(host=localhost)(port=152
1)))(connect_data=(service_name=)))" and then calling
$con=ocilogon("scott","tiger",$db). That brilliant temporary fix is
provided by Pat O'Neill.
Basically what I discovered in my particular situation was that setting the
Oracle init.ora parameter db_domain = .k12.pa.us (or whatever) was the
culprit. Once a database is created with this db_domain parameter PHP4.0.5
seems to wig out. Everything Oracle works just great. You can sqlplus
connect to Oracle from Linux. You can connect to Oracle via any Windows
tool (in my case PL/SQL Developer). However when you try to connect via a
PHP script, forget-about-it, boom! It doesn't work.
Resolution:
1. I commented out my db_domain parameter in
/app/oracle/admin/prams/pfile/init.ora
2. I deleted and rebuilt my Oracle database.
3. Use the exact name (prams=(description=address_list=...) in your
tnsnames.ora file, prams in my case, as the $db var in your PHP script
[$db="prams"; $c1=ocilogon("scott","tiger",$db)]. If you change your
tnsnames.ora name reference, for example to prams.xxx.k12.pa.us then change
your $db var in your PHP script accordingly.
4. Note: I do not have the user nobody added to my dba or oinstall group and
the only environment variables that I have set in my httpd startup script
are ORACLE_HOME=/app/oracle/product/8.1.7, LD_LIBRARY_PATH=$ORACLE_HOME/lib,
and LD_PRELOAD=libclntsh.so.8.0.
Viola! For me this works.
I have no idea why this works, however. It appears as if PHP is not really
connecting internally to Oracle in an Oracle-proper manner. This is not to
say however that an "Oracle-proper manner" is a normal-proper manner.
Note: For those not able to rebuild their entire database with the db_domain
init.ora parameter disabled then Pat O'Neill's brilliant work-around is a
very good solution.
-
Robert M. Keene, OCP Certified DBA
Database Administrator/Developer
--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]