Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: Disconnect connected sessions
Thank you all for the help.
Here is the final script is you are interested. It will kill sessions
before dropping and creating a new ora user.
# Parameters
# $1 = username
# $2 = password
# $3 = tablespace
# $4 = sid
# $5 = dba username
# $6 = dba password
if [ $# -ne 6 ]; then
echo 1>&2 Usage: "$0 <username> <password> <tablespace> <sid> <dba
username> <dba password>"
exit 1
fi
# XXX: Turned off grant of DBA privileges
# GRANT CONNECT, RESOURCE, DBA TO $1;
sqlplus $5/$6@$4 <<EOF
DECLARE
l_cursor INTEGER;
l_exec_result INTEGER;
-- BEGIN FOR l_session_rec IN (SELECT sid, serial# FROM v\$session WHERE username ='$1') LOOP l_cursor := DBMS_SQL.Open_Cursor; DBMS_SQL.Parse (l_cursor, 'ALTER SYSTEM KILL SESSION ''' || l_session_rec.sid || ',' || l_session_rec.serial# || '''', DBMS_SQL.native); l_exec_result := DBMS_SQL.Execute (l_cursor); DBMS_SQL.Close_Cursor (l_cursor); END LOOP; END; / DROP USER $1 CASCADE; CREATE USER $1 IDENTIFIED BY $2 DEFAULT TABLESPACE $3 TEMPORARY TABLESPACE TEMP PROFILE DEFAULT QUOTA UNLIMITED ON $3 QUOTA UNLIMITED ON TEMP ACCOUNT UNLOCK; GRANT CONNECT, RESOURCE TO $1; EOF exit 0 =========================== "makbo" <makbo_at_pacbell.net> wrote in message news:3EA73AA6.7030807_at_pacbell.net... > Daniel Morgan wrote: > > "Yuri Weinstein (HotMail)" wrote: > > >>Can you give me a query example? > >> > >>The reason I am dropping and recreating the db - testing, I need to test > >>some stuff. > >> > >>thx > >> > >><snipped> > > > > > > You still haven't explained ... "Why?" > > > > The entire concept of what you are trying to do sounds to me like either a > > great academic waste of time or a wonderful way to get your co-workers to want > > to toss you into a fountain ... in the middle of a snow storm. > > > > What's wrong with checking v_$session, seeing if anyone is connected, and then > > phoning them? Too courteous? > > > > If you do wish to proceed with this you'd best be prepared for the fact that > > after you will someone's session ... you may still not be able to drop the user > > for quite a long time while Oracle undoes currently running transactions: A > > phone call is much faster. > > > > Daniel Morgan > > > > Yes, below is a query example (to answer the question of the OP). This > can be run from a Unix shell script (or a Windows batch file with some > naming conventions changed). I have never had a problem with waiting > for the session to be killed. > > To answer some other questions: > > 1) Why drop a user in a test database? Because it is easier and simpler > than trying to explicitly drop every single object the user owns, plus > revoking any roles, etc. That is why the "CASCADE" option exists, I think. > > Let's say you want to test an import you are about to send to a > customer; it's much more reproducible to start with a freshly-created > user in a known state. > > 2) Why not call each connected user of the schema to be dropped before > forcibly disconnecting their sessions? Because it might be 2:30 in the > morning and you have a batch job which needs to do an import without > human intervention. The users might be programmers who have forgotten > to log out during the scheduled down time, or they might not even be > human at all, such as JDBC connection pool sessions. > > Mark Bole > > query example: > set head off > set echo off > set termout off > set verify off > set pagesize 0 > set feedback off > set timing off > > spool /tmp/kill_sess.sql > > select 'alter system disconnect session ''' > || s.sid || ',' || s.serial# || ''' immediate;' > from v$session s > where s.username <in your list of users> > and status <> 'KILLED'; > spool off > / > > set echo on > set verify on > set feedback on > set termout on > > @/tmp/kill_sess > > drop user <your schema owner> cascade; >Received on Fri Apr 25 2003 - 15:36:42 CDT