Database Status Inactive Sessions

On OAM Applications Dashboard > Navigate to "DATABASE STATUS" > Sessions "#"
I see alot of inactive sessions. Is it okay to terminate all of the inactive sessions? does it affect system performance? THanks!
Message was edited by:
chaseeem

Oracle will clean them up for you. In addition, you could terminate a session that's simply idle.

Similar Messages

  • Inactive sessions increasing database

    Hi
    We are using oracle11.5.10.2 on windows 2000 server and database version 10.2.0.3
    we are facing problem with inactive sessions,grdually inactive sessions increasing and thats leads database crash.
    Temporary i increased processes parameter value tp 400 prviously it was 200
    Most of inactive session from apps user only
    How can i fix this problem?
    Thanks
    With Regards
    OH

    Hi,
    Please see these threads.
    how to kill inactive sessions????????
    how to kill inactive sessions????????
    Inactive sessions in Database
    Re: Inactive sessions in Database
    Regards,
    Hussein

  • Inactive sessions increasing in database

    Hi
    Recently i migrated Oracle9i database to oracle10g database 64 bit on windows 2008 server.
    After Migration.Inactive sessions are not automatically flushing from database,and these inactive sessions are reaching maximum sessions limits that leads to Database Hang.
    How can i solve this inactive sessions problem?
    Thanks
    With Regards
    OH

    damorgan wrote:
    desc sys.kottd$Interesting table and custom data type.
    SQL> set long 9999
    SQL> col SQL format a50
    SQL>                  
    SQL> select           
      2          DBMS_METADATA.get_ddl( 'TABLE', 'KOTTD$', 'SYS')        as SQL
      3  from       dual;                                                     
    SQL
      CREATE TABLE "SYS"."KOTTD$" OF "SYS"."KOTTD"
    OIDINDEX  ( PCTFREE 10 INITRANS 2 MAXTRANS 255
      STORAGE(INITIAL 65536 NEXT 1048576 MINEX    
    TENTS 1 MAXEXTENTS 2147483645                 
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFF
    ER_POOL DEFAULT)                                 
      TABLESPACE "SYSTEM" )                          
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS
    LOGGING                                                 
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MA    
    XEXTENTS 2147483645                                     
      PCTINCREASE 0 FREELISTS 1 FREELIST GRO                
    UPS 1 BUFFER_POOL DEFAULT)                              
      TABLESPACE "SYSTEM"                                   
    SQL>
    SQL>
    SQL> select
      2          DBMS_METADATA.get_ddl( 'TYPE', 'KOTTD', 'SYS')        as SQL
      3  from       dual;                                                   
    ERROR:                                                                  
    ORA-31603: object "KOTTD" of type TYPE not found in schema "SYS"        
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105                            
    ORA-06512: at "SYS.DBMS_METADATA", line 2805                            
    ORA-06512: at "SYS.DBMS_METADATA", line 4333                            
    ORA-06512: at line 1                                                    
    no rows selected
    SQL>
    SQL> col attr_name format a30
    SQL> col attr_type_name format a30
    SQL> select                      
      2          attr_no,
      3          attr_name,
      4          attr_type_name
      5  from       dba_type_attrs
      6  where      type_name = 'KOTTD'
      7  and        owner = 'SYS'
      8  order by attr_no;
       ATTR_NO ATTR_NAME                      ATTR_TYPE_NAME
             1 KOTTDKVN                       UNSIGNED BINARY INTEGER(32)
             2 KOTTDSCH                       VARCHAR2
             3 KOTTDNAM                       VARCHAR2
             4 KOTTDUVN                       VARCHAR2
             5 KOTTDTC                        UNSIGNED BINARY INTEGER(16)
             6 KOTTDTDS                       CANONICAL
             7 KOTTDNDS                       CANONICAL
             8 KOTTDFLG                       UNSIGNED BINARY INTEGER(16)
             9 KOTDVSN                        UNSIGNED BINARY INTEGER(16)
            10 KOTTDBDY                       KOTTB
    10 rows selected.
    SQL> -- not even a varchar2 attr of the data type "accessible"
    SQL> select KOTTDNAM from sys.kottd$ where rownum < 11;
    select KOTTDNAM from sys.kottd$ where rownum < 11
    ERROR at line 1:
    ORA-00904: "KOTTDNAM": invalid identifier
    SQL> -- Calling the constructor? Oracle no likes..
    SQL> select KOTTD( null, 'test','test','test',null,null,null,null,null,null) from dual;
    select KOTTD( null, 'test','test','test',null,null,null,null,null,null) from dual
    ERROR at line 1:
    ORA-00600: internal error code, arguments: [qctcte1], [0], [], [], [], [], [], []
    SQL>

  • Inactive sessions in Database

    Hi,
    Lot inactive sessions are in database, Before we bounce database ----> max process got reached, For that we have changed max process and bounced the database but i can see still 75 inactive sessions in database,
    SQL> show parameter process
    NAME TYPE VALUE
    aq_tm_processes integer 1
    db_writer_processes integer 1
    gcs_server_processes integer 0
    job_queue_processes integer 2
    log_archive_max_processes integer 2
    processes integer 200
    SQL> show parameter spfile
    NAME TYPE VALUE
    spfile string
    Then i changed processes to 300
    SQL> show parameter process
    NAME TYPE VALUE
    aq_tm_processes integer 1
    db_writer_processes integer 1
    gcs_server_processes integer 0
    job_queue_processes integer 2
    log_archive_max_processes integer 2
    processes integer 300
    even after bouncing still 75 inactive sessions in database

    Hi,
    What are the events/programs of those sessions?
    Have you started the application or not yet?
    Go through the following documents and see if it helps.
    Note: 427759.1 - How To Prevent Inactive JDBC Connections In Oracle Applications
    https://metalink2.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&p_id=427759.1
    Note: 261791.1 - 11i JDBC Thin client connections remain active, MAX PROCESSES REACHED
    https://metalink2.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&p_id=261791.1
    Regards,
    Hussein

  • Inactive Sessions Getting Automatically Generated in Database

    I am facing a strange problem of getting huge number of inactive sessions getting generated th the database server which leads to it's connection closure.
    The Error reads as "Failed to check out an Application due to connection failure of Application Module."
    This happens each time I execute the following code:
    String amDefName = "amendprgo.model.CSDInvFRCAmendPrgoServices";
    String configName = "CSDInvFRCAmendPrgoServicesLocal";
    ApplicationModule app1 = Configuration.createRootApplicationModule(amDefName,configName) ;
    String voInstanceName="prgoHdrRO";
    ViewObject prgoHdrROVO =app1.createViewObjectFromQueryStmt(voInstanceName,"select * from INV_PRGO_HDR");
    prgoHdrROVO.setWhereClause("PRGO_ID="+tempRow.getAttribute("PrgoId")+" and DEPOT_CD = '0' and ITEM_CAT = 'I3' ");
    prgoHdrROVO.executeQuery();
    if(prgoHdrROVO.getEstimatedRowCount()>0){
    return true;
    I know there is a process of creating connection and View Object in Model part in JDeveloper, but I want to know why this problem happens.

    ApplicationModule app1 = Configuration.createRootApplicationModule(amDefName,configName) ;is your problem as it causes at least one (sometimes more) connections to open. As you don't free the resource after using it the connection remains open even if you can't access it anymore.
    You should call Configuration.releaseApplicationModule(...), with the application module you created before returning.
    On the other side you shoulnd not even call createRootApplicationModule in the first place (as it causes trouble if you don't deeply know what the framework do with a root application module).
    Can you tell us the use case which make you call createRootApplicationModule()? We might find a better solution.
    Timo
    Edited by: Timo Hahn on 19.05.2011 13:45
    PS: something to read http://blogs.oracle.com/jdevotnharvest/entry/when_to_use_createrootapplicationmodule_in_oracle_adf and http://radio-weblogs.com/0118231/2009/08/20.html#a959

  • So many INACTIVE sessions in Database

    Hi,
    Actually PMON will clears all inactive sessions from database.
    But i can see there are sessions like more then 3,4 days old.
    Why PMON is not clearing them. ?
    On which intervals will PMON do inactive sessions cleaning.
    thanks in Advance.

    >
    But i can see there are sessions like more then 3,4 days old.
    >
    Heed the advice of the other responders.
    But for idle sessions that you want cleared immediately you can use
    ALTER SYSTEM DISCONNECT SESSION . . . IMMEDIATENOTE - this acts differently than the 'KILL SESSION' syntax typically used.
    See 'DISCONNECT SESSION' clause in the SQL Language reference section for ALTER SYSTEM
    http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_2013.htm
    >
    Use the DISCONNECT SESSION clause to disconnect the current session by destroying the dedicated server process (or virtual circuit if the connection was made by way of a Shared Sever).
    The IMMEDIATE setting disconnects the session and recovers the entire session state immediately, without waiting for ongoing transactions to complete.
    >
    Then contrast that with the text for KILL SESSION

  • DAC has 19 inactive sessions in Repository Database

    Is this normal for the DAC to leave open 19 inactive sessions in the Repository Database when it is not running? Some of the last statements it ran were: SELECT SYSDATE FROM DUAL, etc
    Shouldn't it close some of these sessions when not running? I understand that it should leave open at least 1 so that it can fulfill it's 'Heartbeat Interval' requirements.
    Any insight into this issue would help greatly.
    Thanks,
    Andy

    can you upload a screenshot of DAC to explain your question?

  • Inactive sessions

    Iam in need of a script to kill all the inactive sessions in the database and the same script should kill all the pid related in the OS also.
    can anyone send me a scripts or any input on this will be of great help ?
    Kai

    KaiS,
    See both functions and wrap around in your unix script, this should magic for you I suppose :) and you should replace sqlplus "/as sysdba" by sqlplus '/as sysdba'
    *function readSqlstmt {*
    typeset stmt=$1
    echo "
    set feedback off
    set verify off
    set heading off
    set pagesize 0
    whenever sqlerror exit 1
    whenever oserror exit 2
    *$stmt;*
    exit
    *" | sqlplus -S "/as sysdba" &gt;&gt; test.log*
    function killpid {
    killpidsql=killpid.sql
    sqlplus -s "/as sysdba" << ENDOFSQL >> test.log
    whenever sqlerror exit 1
    whenever oserror exit 2
    SET pagesize 0
    SET verify off
    SET feedback off
    SPOOL ${killpidsql}
    SELECT 'ALTER system kill session ''' || s.sid || ',' || s.serial# || ''';'
    FROM v\$session s, v\$process p
    WHERE s.paddr = p.addr AND s.status = 'INACTIVE';
    SPOOL OFF
    @${killpidsql}
    ENDOFSQL
    Example: How to use above readSqlstmt function, to kill unix process id and call "killpid" to kill sessions from oracle.
    *readSqlstmt "SELECT p.spid FROM v\$session s, v\$process p WHERE s.paddr = p.addr AND s.status = 'INACTIVE'" | while read u*
    *do*
    * #echo "kill -9" $u &gt;&gt; test.log*
    * echo $u*
    *done*
    *Regards*
    Edited by: OrionNet on Dec 10, 2008 10:52 PM
    Edited by: OrionNet on Dec 10, 2008 10:54 PM

  • Inactive sessions in v$session.  True problem

    Hi,
    I am working in an Oracle 9i/Weblogic/J2EE platform. And when i look for session info in v$session view, i see that there are many sessions that have a status "Inactive". I already figured out what it means- the session is ACTIVE when it is doing an SQL query at the time and the session is INACTIVE when it is not doing an SQL query at that particular moment.
    But i have questions:
    1) If a client logs in to my webapplication and does a SQL query- then the sessions status is ACTIVE. After that, when the client just leaves (logs out just closes the browser) then Oracle marks that connection as 'INACTIVE'- Oracle does not KILL that session.
    Ok let that be, but can another client then log in to my webapplication (from different computer) and get that same INACTIVE connection and start to use it?? If not, then these "abandoned" connection are truly useless, because they still use ORACLE resources (memory).
    2)Another thing is that there are many INACTIVE sessions in v$session that have a name "plsqldev.exe" in PROGRAM column. That is a database client that i use to connect directly to my DB. But basicly i have only one PL/SQL program with one SQL query window open (this session is marked ACTIVE in v$session). So are these other 10 INACTIVE "plsqldev.exe" sessions meant for new plsql clients that may start to use the database or can only that particular user for whom the session was created at first place use that session?
    And finally- sessions that are INACTIVE and have "plsqldev.exe" as a PROGRAM in v$session - is there any chance that a client logs in to webapplication and then gets that INACTIVE session?
    If not, then these 10 INACTIVE plsqldev sessions (allthough the user has maybe shut down the program) are wasteless for webapplication users and they just starve the database.
    Also a screenshot for illustration.
    Waiting for your comments,
    Thanks!

    If connection pooling is in use then yes a different end-user can reuse the "inactive" session. Remember that ACTIVE and INACTIVE really only refers to if the session is executing SQL at the exact moment you query v$session.
    In the case of a dedicated user connection using a product like Oracle Forms where the user spends much of the time reading and filling in screen fields the Oracle background session can show INACTIVE almost constantly because the queries being ran by the user are very fast.
    Take a look at the last_call_et column. This is the time in seconds from when the last SQL statement was issued (not completed). If this value is resetting then the queries are being done.
    If the time is large and the status is INACTIVE then you could have a 'dead' or 'runaway' background process which is a background process without a front-end process. Those can and should be terminated. For that matter sessions that are idle for long periods of time should probably also be killed. If nothing else runaway and idle sessions may make it appear you are using all your licensed connections even if you really are not.
    Most connection pools wil automatically restart a terminated connection so if you clean-up process terminates an idle pooled connection it should not be a problem.
    HTH -- Mark D Powell --

  • Growing Number of Inactive Sessions

    When using WebDB application with 1.)Oracle Application Server 4.8.1 or 2.)Oracle 9i Application Server (Authentication Mode Basic) I noticed many sessions with status inactive in database.
    What is the methodology to logout the session from application and avoid growing number of inactive sessions?
    null

    -- Submits a dbms_job to cleanup sessions
    -- Expected Parameters:
    -- 1. hours_old - number of hours after session start before
    -- it should be deleted
    -- 2. start_time - when should the first job be run or 'START'
    -- 3. start_time_fmt - date format for start time
    -- 4. interval_hours - how many hours between each run
    -- If 'START' is provided for 2nd parameter, the 3rd parameter is
    -- ignored and it will default the start time to the current time.
    set serverout on
    set verify off
    create or replace package wwctx_patch is
    procedure cleanup_sessions
    p_hours_old IN number default 168 -- (1 week)
    end wwctx_patch;
    show errors package wwctx_patch;
    create or replace package body wwctx_patch as
    * cleanup expired sessions
    procedure cleanup_sessions
    p_hours_old IN number default 168 -- (1 week)
    is
    cursor expired_sessions is
    select rowid
    from wwctx_sso_session$
    where active = 0
    or (session_start_time < sysdate - (p_hours_old/24));
    current_session expired_sessions%rowtype;
    record_count number := 0;
    begin
    if p_hours_old is null then
    return;
    else
    open expired_sessions;
    loop
    fetch expired_sessions into current_session;
    exit when expired_sessions%notfound;
    record_count := record_count + 1;
    delete from wwctx_sso_session$
    where rowid = current_session.rowid;
    -- Note: The reason for doing this deletion in
    -- a loop with a commit in the loop is so as not
    -- to overrun the rollback segment in the case
    -- where there are a lot of sessions to cleanup
    -- with potentially a large amount of session
    -- storage to be deleted.
    -- do more than one per commit
    if record_count >= 10 then
    commit;
    record_count := 0;
    end if;
    end loop;
    close expired_sessions;
    commit;
    end if;
    exception
    when others then
    rollback;
    end;
    end wwctx_patch;
    show errors package body wwctx_patch
    declare
    INVALID_DATE_EXCEPTION exception;
    INVALID_AGE_EXCEPTION exception;
    INVALID_INTERVAL_EXCEPTION exception;
    v_jobid binary_integer;
    v_path varchar2(100) := 'oracle.portal.session';
    v_name varchar2(100) := 'cleanup_jobid';
    v_starttime date;
    v_hours_old number;
    v_interval_hours number;
    p_hours_old varchar2(30) := '&1';
    p_start_time varchar2(60) := '&2';
    p_start_time_fmt varchar2(60) := '&3';
    p_interval_hours varchar2(60) := '&4';
    begin
    -- validate hours_old parameter
    begin
    v_hours_old := to_number (p_hours_old);
    exception
    when others then
    raise INVALID_AGE_EXCEPTION;
    end;
    -- validate starttime
    begin
    if upper(p_start_time) = 'START' then
    v_starttime := sysdate;
    else
    v_starttime := to_date (p_start_time, p_start_time_fmt);
    end if;
    exception
    when others then
    raise INVALID_DATE_EXCEPTION;
    end;
    -- validate interval_hours parameter
    begin
    v_interval_hours := to_number (p_interval_hours);
    exception
    when others then
    raise INVALID_INTERVAL_EXCEPTION;
    end;
    -- Create a preference store item for the job id that is
    -- created for the submitted job.
    -- This will allow it to be deleted or modified later.
    begin
    WWPRE_API_NAME.CREATE_PATH(v_path);
    commit;
    dbms_output.put_line ('Created path for job id.');
    exception
    when WWPRE_API_NAME.DUPLICATE_PATH_EXCEPTION then
    -- probably this has already been created and a job
    -- is already in place.
    -- retrieve the job id
    null;
    when WWPRE_API_NAME.GENERAL_PREFERENCE_EXCEPTION then
    dbms_output.put_line
    ('ERROR: Exception in preference path creation');
    raise;
    when others then
    dbms_output.put_line('ERROR: creating path - ' &#0124; &#0124; sqlerrm );
    raise;
    end;
    begin
    v_jobid := WWPRE_API_VALUE.GET_VALUE_AS_NUMBER
    p_path => v_path
    ,p_name => v_name
    ,p_level_type => WWPRE_API_VALUE.SYSTEM_LEVEL_TYPE
    dbms_output.put_line ('DBMS_JOB id = ' &#0124; &#0124; v_jobid );
    exception
    when WWPRE_API_NAME.NAME_NOT_FOUND_EXCEPTION then
    -- we'll try to create it below.
    null;
    end;
    if v_jobid is null then
    begin
    WWPRE_API_NAME.CREATE_NAME
    p_path => v_path,
    p_name => v_name,
    p_description => 'The job id of the DBMS_JOB for cleaning up '&#0124; &#0124;
    'the expired session rows.',
    p_type_name => 'NUMBER',
    p_language => WWNLS_API.AMERICAN
    commit;
    exception
    when WWPRE_API_NAME.DUPLICATE_NAME_EXCEPTION then
    null;
    when OTHERS then
    dbms_output.put_line('ERROR: creating name - ' &#0124; &#0124; sqlerrm );
    raise;
    end;
    end if;
    declare
    l_job varchar2(4000);
    begin
    l_job :=
    'begin ' &#0124; &#0124;
    ' execute immediate ' &#0124; &#0124;
    ' ''begin wwctx_patch.cleanup_sessions(' &#0124; &#0124;
    ' p_hours_old => ' &#0124; &#0124; v_hours_old &#0124; &#0124;
    ' ); end;'' ' &#0124; &#0124;
    ' ; ' &#0124; &#0124;
    'exception ' &#0124; &#0124;
    ' when others then ' &#0124; &#0124;
    ' null; ' &#0124; &#0124;
    'end;';
    if v_jobid is null then
    DBMS_JOB.SUBMIT
    job => v_jobid,
    what => l_job,
    next_date => v_starttime,
    interval => 'SYSDATE + ' &#0124; &#0124; v_interval_hours &#0124; &#0124; '/24'
    WWPRE_API_VALUE.SET_VALUE_AS_NUMBER
    p_path => v_path,
    p_name => v_name,
    p_level_type => WWPRE_API_VALUE.SYSTEM_LEVEL_TYPE,
    p_level_name => null,
    p_value => v_jobid
    commit;
    DBMS_OUTPUT.PUT_LINE ('Cleanup job submitted.' &#0124; &#0124;
    ' Job ID = ' &#0124; &#0124; v_jobid);
    else
    -- v_jobid is not null
    -- modify the job
    DBMS_JOB.CHANGE
    job => v_jobid,
    what => l_job,
    next_date => v_starttime,
    interval => 'SYSDATE + ' &#0124; &#0124; v_interval_hours &#0124; &#0124; '/24'
    commit;
    DBMS_OUTPUT.PUT_LINE ('Cleanup job updated.' &#0124; &#0124;
    ' Job ID = ' &#0124; &#0124; v_jobid);
    end if;
    if p_start_time_fmt = 'NOW' then
    DBMS_JOB.RUN
    job => v_jobid
    commit;
    DBMS_OUTPUT.PUT_LINE ('Cleanup job run.');
    end if;
    end;
    exception
    when INVALID_DATE_EXCEPTION then
    rollback;
    DBMS_OUTPUT.PUT_LINE ('ERROR: Start Date Specified is Invalid');
    when INVALID_AGE_EXCEPTION then
    rollback;
    DBMS_OUTPUT.PUT_LINE ('ERROR: Age For Cleanup Specified is Invalid');
    when INVALID_INTERVAL_EXCEPTION then
    rollback;
    DBMS_OUTPUT.PUT_LINE ('ERROR: Job Interval Specified is Invalid');
    when OTHERS then
    rollback;
    DBMS_OUTPUT.PUT_LINE ('ERROR: ' &#0124; &#0124; sqlerrm );
    end;
    set verify on

  • Looking for a script to kill all inactive sessions

    Does anyone have a script to kill all INACTIVE sessions (with EXECUTE IMMEDIATE)?

    I suggest you to specify which OS you are talking about.
    The inactive status on the V$SESSION doesn't mean the user is not doing any thing, it only means the oracle server process is not processing any thing by the time it was queried. On OLTP systems Oracle Server Processes remain INACTIVE for more than 95% of the time, so it is advisable to configure shared servers.
    If you are really concerned about idle time, then I suggest you to configure profiles.
    On the pool mechanism you should address the microsoft side, if this, as far as I understood and guessed, application server is IIS.
    I suggest you further reading on the Killing sessions script and different session status (check the sniped status) here:
    Re: session inactive ??
    Re: make a job to delete the sniped sessions
    Re: How do I put a timeout in my DataBase?
    Re: Killing Session with Locks in Linux
    ~ Madrid

  • PL/SQL procedure to kill inactive session

    Hi all ,
    Please i am trying to write a procedure to kill inactive sessions of the shema 'TESTSCHEMA' .This is my first procedure , am not use to pl/sql but i went through many turtorial but have some errors at compliation .when i try to compile the procedure the errors are as below :
    15:50:28 Start Find Objects [TESTSCHEMA@TESTDB_UNIX(2)] ...
    15:50:28 End Find Objects [TESTSCHEMA@ TESTDB_UNIX(2)]
    15:50:32 Start Compiling 1 object(s) ...
    15:50:32 Executing ALTER PROCEDURE fib_dead_cnx_cleanup COMPILE ...
    15:50:32 [13:2] PL/SQL: ORA-00933: SQL command not properly ended
    15:50:32 [9:3] PL/SQL: SQL Statement ignored
    15:50:32 [18:12] PLS-00103: Encountered the symbol "(" when expecting one of the following:
    15:50:32 constant exception <an identifier>
    15:50:32 <a double-quoted delimited-identifier> table LONG_ double ref
    15:50:32 char time timestamp interval date binary national character
    15:50:32 nchar
    15:50:32 The symbol "<an identifier>" was substituted for "(" to continue.
    15:50:32 [18:21] PLS-00103: Encountered the symbol "LOOP" when expecting one of the following:
    15:50:32 := ; not null default character
    15:50:32 The symbol "; was inserted before "LOOP" to continue.
    15:50:32 [27:8] PLS-00103: Encountered the symbol "ALTER" when expecting one of the following:
    15:50:32 begin case declare exit for goto if loop mod null pragma
    15:50:32 raise return select update while with <an identifier>
    15:50:32 <a double-quoted delimited-identifier> <a bind variable> <<
    15:50:32 close current delete fetch lock insert open rollback
    15:50:32 savepoint set sql execute commit forall merge pipe
    15:50:32 Compilation complete - 5 error(s) found
    15:50:32 End Compiling 1 object(s)
    below is the procedure code :
    CREATE OR REPLACE
    PROCEDURE fib_dead_cnx_cleanup
    AS
    l_serial     CHAR(100);
    l_sid CHAR (100);
    l_sid_serial CHAR(100);
    l_count      NUMBER(10,0);
    CURSOR session_cur IS
              SELECT sid,serial#,sid||','||serial# as sid_serial
         FROM v$session
         WHERE username='EBBFCAT' and schemaname='TESTSCHEMA'
         and status='INACTIVE'
    BEGIN
         BEGIN
         l_count := 0;
                   OPEN session_cur;
                        WHILE ( 1 = 1) LOOP
                             BEGIN
                                  FETCH session_cur INTO l_sid ,l_serial,l_sid_serial ;
                                       EXIT WHEN session_cur%NOTFOUND ;
                                  BEGIN
                                       alter system kill session 'l_sid_serial' ;
                                  END;     
                             END;
                        END;
                   CLOSE session_cur;
         END;
    END FIB_DEAD_CNX_CLEANUP;
    Thanks

    Hi,
    Never write, let alone post, unformatted code.
    When posting any formatted text on this site, type these 6 characters:
    &#123;code&#125;
    (small letters only, inside curly brackets) before and after sections of formatted text, to preserve spacing.
    Among the benefits of formatting: you can indent to show the extent of blocks, such as BEGIN-END.
    Different types of blocks need modifiers after the end, such as "END *IF* " and " END *LOOP* ". If each opening statement (BEGIN, IF, LOOP) is directly above its corresponding END, then it's easy to check if you got the right modifier.
    Here's what you code looks like with some formatting, and a couple of corrections added. Look for -- comments.
    CREATE OR REPLACE
    PROCEDURE fib_dead_cnx_cleanup
    AS
         l_serial     CHAR(100);
         l_sid          CHAR (100);
         l_sid_serial     CHAR(100);
         l_count          NUMBER(10,0);
         CURSOR session_cur IS
                SELECT  sid
                ,       serial#
                ,       sid     || ','
                                      || serial#     as sid_serial
                FROM     v$session
                WHERE      username     = 'EBBFCAT'
                and     schemaname     = 'TESTSCHEMA'
                and     status          = 'INACTIVE';          -- need semicolon here
    BEGIN
         BEGIN                                   -- Why?
              l_count := 0;
              OPEN session_cur;
              WHILE ( 1 = 1)
              LOOP
                    BEGIN                         -- Why?
                         FETCH  session_cur
                         INTO   l_sid
                         ,          l_serial
                         ,          l_sid_serial ;
                               EXIT WHEN session_cur%NOTFOUND ;
                         BEGIN                    -- Why?
                             alter system kill session 'l_sid_serial' ;    -- Not a PL/SQL command
                               END;
                          END;
                END LOOP;                         -- LOOP ends with END LOOP
                CLOSE session_cur;
            END;
    END      FIB_DEAD_CNX_CLEANUP;Take baby steps.
    I've been wrtiing PL/SQL for 20 years, and I would never write that much code at once. If you're a beginner, all the more reason to start small. Write as little as possible, test, debug and test again (if necessary). When you have someting working, add 2 or 3 more lines and test again.
    It looks like you have three BEGIN statements that don't serve any purpose. You should get rid of them (and their corresponding END statements, of course).
    One error I did not fix: ALTER SYSTEM is not a PL/SQL statement. It's a SQL statement. You can run a SQL statement inside PL/SQL by using dynamic SQL, where you construct a string containing the SQL statement, and then use dbms_sql or EXECUTE IMMEDIATE to run it.
    Edited by: Frank Kulash on Aug 18, 2009 12:37 PM

  • Kill inactive sessions with no programs run it

    hi all,
    my database is 10gR2 with developer 6i
    the database have huge number of sessions with no programs running it like oracle form, some of those sessions stack in v$session table due to power failure.
    restart server solve the problem, but it is not efficient.
    is there any method to fined witch of database sessions is actually connect to the database and have application running it ?

    This script will give you the complete detail of Session , PID and Program which is running in dagtabase level.
    You can include the "STATUS" coloumn from v$session to get user status.
    Script is like this:
    set echo off;
    set termout on;
    set linesize 80;
    set pagesize 60;
    set newpage 0;
    select
    rpad(c.name||':',11)||rpad(' current logons='||
    (to_number(b.sessions_current)),20)||'cumulative logons='||
    rpad(substr(a.value,1,10),10)||'highwater mark='||
    b.sessions_highwater Information
    from
    v$sysstat a,
    v$license b,
    v$database c
    where
    a.name = 'logons cumulative'
    ttitle "dbname Database|UNIX/Oracle Sessions";
    set heading off;
    select 'Sessions on database '||substr(name,1,8) from v$database;
    set heading on;
    select
    substr(a.spid,1,9) pid,
    substr(b.sid,1,5) sid,
    substr(b.serial#,1,5) ser#,
    substr(b.machine,1,6) box,
    substr(b.username,1,10) username,
    -- b.server,
    substr(b.osuser,1,8) os_user,
    substr(b.program,1,30) program
    from v$session b, v$process a
    where
    b.paddr = a.addr
    and type='USER'
    order by spid;
    ttitle off;
    spool off;
    Save this script with your desire name and run in Database.
    Mukesh

  • Inactive sessions in v$session

    Hi,
    why there are so many apps user inactive sessions in v$session?
    Regards

    Hi Hussein,
    The process which are arctive are shown as inactive in v$session view,We cannot trust the status column of this view,By default as soon the apps is started the oracle is creating around 82 to 85 apps processes which are inactive but i think they are active.
    The option referenced above is a good one to follow in this situation
    A discussion of Dead Connection Detection, Resource Limits, V$SESSION, V$PROCESS and OS processes
    Thanks Hussein and Anchorage
    Regards

  • Active vs Inactive sessions

    We are using Oracle 11 as a backend to PowerSchool (a student information system) with 6 application servers (dc-ps-01 thru -06). Using the following SQL, we are seeing numerous INACTIVE sessions vs ACTIVE.
    select
    count(b.machine) as mCount,
    b.machine box,
    b.status,
    b.osuser os_user,
    b.program program
    from
    v$session b, v$process a
    where
    b.paddr = a.addr and type='USER'
    group by
    b.machine,b.osuser,b.program,b.status
    order by
    b.status, mCount desc, box;
    Sample output:
    MCOUNT Box Status OS_USER Program
    *2     DC-PS-01*     ACTIVE     powerschool     JDBC Thin Client
    1     DC-PS-DB1     ACTIVE     DC-PS-DB1$     OMS
    1     DC-PS-DB1     ACTIVE     SYSTEM     ORACLE.EXE (J001)
    1     DC-PS-DB1     ACTIVE     SYSTEM     ORACLE.EXE (J000)
    406     DC-PS-05     INACTIVE     powerschool     JDBC Thin Client
    *44     DC-PS-01*     INACTIVE     powerschool     JDBC Thin Client
    36     DC-PS-03     INACTIVE     powerschool     JDBC Thin Client
    32     DC-PS-04     INACTIVE     powerschool     JDBC Thin Client
    28     DC-PS-02     INACTIVE     powerschool     JDBC Thin Client
    17     DC-PS-06     INACTIVE     powerschool     JDBC Thin Client
    7     DC-PS-DB1     INACTIVE     DC-PS-DB1$     OMS
    While the number of ACTIVE sessions fluctuate, the number of INACTIVE ones do not decrease. Would someone explain the internal working of this?
    Thanks!

    Note that the status column of v$session only shows ACTIVE while the Oracle session background process is busy performing a SQL statement on behalf of the front-end session. If the application spends most of its time with the user entering data onto or reading results off a screen then the session is going to appear INACTIVE most of the time in Oracle.
    Also check the last_call_et to see how long it has been since the session issued a request to Oracle. This is how to tell if the session is truely INACTIVE.
    If the front-end application uses connection pooling then depending on how many connections the application is set to grab and what kind of connection pool session management the front-end product provides you can have a lot of basically unneeded and truely inactive sessions.
    HTH -- Mark D Powell --

Maybe you are looking for