Eliminar un usuario conectado de un esquema de base de datos Oracle 10g


¿Hay una mejor manera de desconectar forzosamente a todos los usuarios de un esquema de base de datos Oracle 10g que reiniciar los servicios de base de datos Oracle?

Tenemos varios desarrolladores que usan SQL Developer conectándose al mismo esquema en un solo servidor Oracle 10g. El problema es que cuando queremos soltar el esquema para reconstruirlo, inevitablemente alguien todavía está conectado y no podemos soltar el esquema de la base de datos o el usuario mientras alguien todavía está conectado.

Por la misma razón, no desea eliminar todas las conexiones a otros esquemas porque es posible que otras personas todavía estén conectadas y probando con esos esquemas.

¿Alguien conoce una forma rápida de resolver esto?

 55
Author: Joshua Starner, 2008-09-17

7 answers

Para encontrar las sesiones, como DBA use

select sid,serial# from v$session where username = '<your_schema>'

Si desea asegurarse de obtener solo las sesiones que usan SQL Developer, puede agregar and program = 'SQL Developer'. Si solo desea eliminar las sesiones que pertenecen a un desarrollador específico, puede agregar una restricción en os_user

Luego mátalos con

alter system kill session '<sid>,<serial#>'

(por ejemplo, alter system kill session '39,1232')

Una consulta que produce sentencias kill ya construidas podría ser

select 'alter system kill session ''' || sid || ',' || serial# || ''';' from v$session where username = '<your_schema>'

Esto hará devuelve una sentencia kill por sesión para ese usuario-algo así como:

alter system kill session '375,64855';

alter system kill session '346,53146';

 99
Author: Sten Vesterli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-17 19:33:17

Encuentra sesiones existentes en la base de datos usando esta consulta:

SELECT s.inst_id,
       s.sid,
       s.serial#,
       p.spid,
       s.username,
       s.program
FROM   gv$session s
       JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE  s.type != 'BACKGROUND';

Verás algo como a continuación. Sesiones de Oracle

Luego, ejecute la consulta debajo con los valores extraídos de los resultados anteriores.

ALTER SYSTEM KILL SESSION '<put above s.sid here>,<put above s.serial# here>';

Ex: ALTER SYSTEM KILL SESSION '93,943';

 16
Author: Chand Priyankara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-20 07:59:38

Mi propuesta es este simple bloque anónimo:

DECLARE
   lc_username   VARCHAR2 (32) := 'your user name here';
BEGIN
   FOR ln_cur IN (SELECT sid, serial# FROM v$session WHERE username = lc_username)
   LOOP
      EXECUTE IMMEDIATE ('ALTER SYSTEM KILL SESSION ''' || ln_cur.sid || ',' || ln_cur.serial# || ''' IMMEDIATE');
   END LOOP;
END;
/
 7
Author: RLapinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-10 13:29:42

Asegúrese de alterar el sistema y habilitar la sesión restringida antes de matarlos o volverán rápidamente a la base de datos antes de completar su trabajo.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-23 19:04:05

Simplemente use SQL:

disconnect; 

conn tiger/scott as sysdba;
 1
Author: LinuxQuestions.org,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-23 22:05:15

Solo mis dos centavos : la mejor manera (pero probablemente no la más rápida en el corto plazo) sería probablemente para cada desarrollador trabajar en su propia instancia de base de datos (ver regla #1 para el trabajo de base de datos).

Instalar Oracle en una developer station se ha convertido en una obviedad desde Oracle Database 10g Express Edition.

 0
Author: Mac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-19 15:50:53

¿Has probado ALTER SYSTEM KILL SESSION? Obtenga el SID y SERIAL# de V SESSION SESSION para cada sesión en el esquema dado, luego haga

ALTER SCHEMA KILL SESSION sid,serial#;

 0
Author: Dave Costa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 18:40:12