Re: os users, sessions, and connections.



"DaLoverhino" <DaLoveRhino@xxxxxxxxxxx> wrote in message
news:1139274175.910349.269400@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
I've been reading about the difference between connections and sessions
on Kyte's site and this group. It's a bit rough for me, so I got a few
questions. I'm also having a hard time figuring out how it could be
applied to auditing when the OS user uses an app to do database work,
and the app may have 'connection pooling'.

Here's a few items:

1. From what I've read a session is a logged connection. Does that mean
there's no such thing as a connectionless session?

2. Can you have one connection to multiple sessions?

3. If an application has (for example) one connection to the database
but has two users using the app to do DB work, what does the app do?
Assume that each user is doing his work as if simultaneously (not
taking turns to make changes.) Does the program open up two sessions
and switch between the two?

4. If only one user is used by the app to do the db changes of many OS
users, how would I know which OS user did what?

Plus, if you have a book you know that really points this stuff out,
that would be great too.

thanks.


A program can create a process that attaches to the Oracle
instance, this is a connection and appears in v$process.

The same program can then use that one process to
carry several sessions - each one appears in v$session.

The simplest way to see this is to use SQL*Plus to
connect to an account that can query v$session, and
do the following (paddr is the address of the process
through which a session is connected).

select sid, serial#, paddr, username from v$session
where username = {me}

set autotrace on

select sid, serial#, paddr, username from v$session
where username = {me}

set autotrace off

An example results I got from running this as 'SYS' are:

SQL> select sid, serial#, paddr, username from v$session where username =
'SYS';


SID SERIAL# PADDR USERNAME
---------- ---------- -------- ------------------------------
10 44880 6C23FCCC SYS

1 row selected.

SQL> set autotrace on
SQL> select sid, serial#, paddr, username from v$session where username =
'SYS';

SID SERIAL# PADDR USERNAME
---------- ---------- -------- ------------------------------
9 4168 6C23FCCC SYS
10 44880 6C23FCCC SYS

2 rows selected.

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 FIXED TABLE (FULL) OF 'X$KSUSE'




Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
591 bytes sent via SQL*Net to client
499 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed

SQL> set autotrace off
SQL>

As you can see, SQL*Plus implements autotrace by
creating a second session (that connects as SYS) to
query the session stats for the first session. The second
row comes into existence when you enable autotrace,
and uses the same process (paddr) as the first.


As far as auditing, triggers, context etc. are concerned,
the second session is isolated from the first, and operates
under the account name reported. (In my case SYS).


Part of your confusion probably lies in the fact that there
are two mechanisms that are called 'connection pooling'.
one of them is the above - a single connection is shared
by many sessions (like car-pooling). This is useful for
an application operating over an INTRA-net, where you
have a known client base, and each individual has a
database account that can be identified.

However, very few people do this. The commoner
interpretation of 'connection pooling' is used to describe
how a program creates many connections, with a single
session operating on each connection, all sessions using
an 'application account'. An incoming request is simply
routed to whichever connection/session happens to be
free. In this context, auditing etc. is the application's
problem - the database doesn't know that all the different
queries are coming from different individuals; everything
is operating under a single database account.


--
Regards

Jonathan Lewis

http://www.jlcomp.demon.co.uk/faq/ind_faq.html
The Co-operative Oracle Users' FAQ

http://www.jlcomp.demon.co.uk/cbo_book/ind_book.html
Cost Based Oracle: Fundamentals

http://www.jlcomp.demon.co.uk/appearances.html
Public Appearances - schedule updated 2nd Feb 2006


.



Relevant Pages

  • Re: records query of one username with osuser
    ... to record all the work of one session. ... Connection is been estabished ... executing queries. ... one osuser because I just have os username and database username. ...
    (comp.databases.oracle.server)
  • Re: records query of one username with osuser
    ... to record all the work of one session. ... Connection is been estabished ... executing queries. ... one osuser because I just have os username and database username. ...
    (comp.databases.oracle.server)
  • Re: records query of one username with osuser
    ... to record all the work of one session. ... Connection is been estabished ... executing queries. ... one osuser because I just have os username and database username. ...
    (comp.databases.oracle.server)
  • Re: APPN Connection z/os - AHHC / LLC2.
    ... implied that you session stopped for a while and then continued. ... the ANNC link is a type 2.1 connection. ... I would suggest trying to limit the request unit size used over the type 2.1 ... MAXDATA operand when defining a PU statement for an adjacent link station ...
    (bit.listserv.ibm-main)
  • Re: Remote desktop deadlock on XP SP2
    ... the TS connection is frozen, even if I specify a wait timeout. ... TermSrv.dll creates a new session for the purpose of displaying the logon ... lives on a DPC routine for the network miniport ... the network packets are encapsulated and decapsulated in UDP. ...
    (microsoft.public.win32.programmer.kernel)