usercnt.sh
Submitted by dave on Mon, 05/07/2012 - 10:28
Purpose
Create a script that can be run via cron to periodically gather info about user counts. This can be useful for helping diagnose connection pools that are not releasing their connections.
Set the following variables according to your environment:
ORACLE_SID, ORACLE_HOME, PROJDIR
Note: The Backslash contained in the v$session reference is so the $ character is escaped properly. If you repurpose this script keep in mind any $ symbols in the text passed to SQLPLUS from the shell script must be escaped in the manner.
usercnt.sh
ORACLE_SID=ORCL11G; export ORACLE_SID ORACLE_HOME=/u01/app/oracle/product/11.2.0.1 export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export LD_LIBRARY_PATH PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/etc export PATH PROJDIR=/u01/app/oracle/usercnt cd $PROJDIR sqlplus -s "/ as sysdba" << ENDOFTEXT >> usercnt.csv set feedback off heading off set pages 0 set serveroutput on DECLARE MYDATE DATE := SYSDATE; BEGIN DBMS_OUTPUT.PUT_LINE('DATETIME,USERNAME,CURRENT_LOGINS'); FOR cur IN (SELECT USERNAME, COUNT(*) as CNT FROM v\$SESSION WHERE USERNAME IS NOT NULL GROUP BY USERNAME ORDER BY 1) LOOP DBMS_OUTPUT.PUT_LINE(TO_CHAR(MYDATE,'YYYY-MM-DD HH24:MI') || ',' || cur.USERNAME || ',' || cur.CNT); END LOOP; END; / ENDOFTEXT
Create Cron Entry
# Usercnt Monitoring 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /u01/app/oracle/usercnt/usercnt.sh 2>&1
Sample Output
DATETIME,USERNAME,CURRENT_LOGINS 2012-04-27 09:25,DBSNMP,5 2012-04-27 09:25,SCOTT,20 2012-04-27 09:25,SYS,1 2012-04-27 09:25,SYSTEM,1 DATETIME,USERNAME,CURRENT_LOGINS 2012-04-27 09:30,DBSNMP,5 2012-04-27 09:30,SCOTT,18 2012-04-27 09:30,SYS,1 2012-04-27 09:30,SYSTEM,1
Tags: