Quoting Andrey Hristov <[EMAIL PROTECTED]>:

>  Can someone tell more about OciPLogon.

I'm sure Theis will add to this but here goes... :)

> I know that OciLogon is used frequently but the connection to the DB
> is
> shared amongst the pages so as in the common way where every page in a
> site
> uses one pair user/password use the only channel. When one script
> makes
> "commit" it commits all, so if two scripts subsequently made insert but
> one
> thinks that there was a fail it will issue "rollback". The problem is
> that
> the other script issued "commit" and "rollback" does nothing.
> Someone can tell that the decision is using OciNLogon - ok but I know
> that
> this is the most time consuming way to connect to Oracle.
> The refined question is: "Does OciPlogon is like OciLogon - one channel,
> one
> scripts commits/rollbacks all statements, or it is like OciNLogon but
> the
> connection is not made everytime a scripts want such but used already
> created one?".

Oracle connections work across 3 levels, the server, the session and the 
service. AFAIK, transactions work at the service level which is the 'top' 
level. Persistent connections operate at the session level. Tus a persistent 
connection is maintained across Apache children by keeping the bottom level or 
server context open.

We did run into problems because we have very high traffic sites and we have 
100 Apache children running. Because our junior programmer decided to hammer 
the server with a web stress tool, al the  children ran up connections which 
combined with connections on other web server made us run out of sessions.  
Dropping back to icologon() for a while helped the problem.

Anyway, to answer your question, persistent logins will not affect 
transactions  across processes as far as I'm aware. There may be some 
locking/isolations issues if a simultaneous read/write occurs but Oracle should 
handle that anyway.

ocinlogon() is used to guarantee an isolated connection which will not affect 
any outstanding transactions. You only usually do this when you want to do a 
seperate set of operations in the middle of a transaction in a script.

> One more question : When PHP and Oracle works on one machine to make
> all
> work the enviroment variable ORACLE_HOME has to be set for example :
> /***************************************************/
> // set ORACLE Dir to get the NET8 name resolver working
> // tnsnames.ora has to be in $ORACLE_HOME/networking/admin/
> putenv("ORACLE_HOME=/home/oracle01/app/oracle/product/8.1.5");

This is bad. As Theis has pointed out proviously, PHP modules perform certain 
operations at Apache startup and shutdown as well as script startup and 
shutdown. Setting things like ORACLE_HOME, NLS_LANG and so on in your script 
can cause some problems as some of the module has already been initialised 
before your script executes. You're better off putting this stuff in somewhere 
like the apachectl script.

> /***************************************************/
> but if my web server is an Apache under windows and the oracle is on
> other
> machine under Linux(RH), what have to be done to make my PHP work with
> the
> DB.

Windows is a slightly different beast. Normally the environment stuff is 
handled in windows and you don't need to setup anything with putenv. Use your 
Net8 Configuration assistant which is part of the Oracle Windows client 
libraries to create the correct TNSNAMES.ORA.

AFAIK (I've never tried not to) you must specify the SID when connecting under 
windows in a PHP script.


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]

Reply via email to