Oracle databases handle numerous connections concurrently, and monitoring these connections is crucial for performance analysis, troubleshooting, and security. This tutorial explains how to view and gather information about active connections within an Oracle database instance.
Understanding Oracle Sessions and Connections
Before diving into queries, it’s important to understand the relationship between sessions and connections. A connection is a physical link between a client application and the database. A session represents the state of a user logged into the database. One connection can support multiple sessions, though typically there’s a one-to-one relationship in many applications.
Using Dynamic Performance Views (V$)
Oracle provides a set of dynamic performance views, prefixed with V$
, that expose real-time information about the database instance. The primary view for monitoring sessions is V$SESSION
. This view contains a wealth of information about each currently active session.
Basic Query to List Active Sessions
The simplest way to list active sessions is to query V$SESSION
directly. However, to get meaningful information, you’ll typically select specific columns.
SELECT
sid,
serial#,
username,
machine,
program,
osuser,
status
FROM
v$session
WHERE
status = 'ACTIVE';
sid
: Session ID – a unique identifier for each session.serial#
: Serial number – used in conjunction withsid
to uniquely identify a session. This is necessary becausesid
can be reused after a session terminates.username
: The database username associated with the session.machine
: The client machine from which the session originated.program
: The client program or application connecting to the database.osuser
: The operating system user account under which the client program is running.status
: The current status of the session (e.g.,ACTIVE
,INACTIVE
,KILLED
).
Filtering for User Sessions
The query above will include background processes and other non-user sessions. To focus solely on user connections, you can add a filter:
SELECT
sid,
serial#,
username,
machine,
program,
osuser,
status
FROM
v$session
WHERE
status = 'ACTIVE'
AND username IS NOT NULL;
Joining with V$PROCESS for More Details
To get the operating system process ID associated with a session, you can join V$SESSION
with V$PROCESS
:
SELECT
s.sid,
s.serial#,
s.username,
s.machine,
s.program,
s.osuser,
s.status,
p.spid
FROM
v$session s
JOIN
v$process p ON s.paddr = p.addr
WHERE
s.status = 'ACTIVE'
AND s.username IS NOT NULL;
spid
: The operating system process ID.
Counting Active Connections
To quickly determine the total number of active connections, use the following query:
SELECT
COUNT(*) AS active_connections
FROM
v$session
WHERE
status = 'ACTIVE';
Important Considerations
- Performance: Querying
V$SESSION
frequently can impact database performance, especially on busy systems. Consider using these queries judiciously or caching the results for monitoring purposes. - Security: Be mindful of who has access to these queries, as they reveal information about active database connections.
- Long Operations: Investigate sessions with long-running queries or transactions to identify potential performance bottlenecks.
- Inactive Sessions: Regularly monitor and terminate inactive sessions to free up resources and improve database performance.