oracle - framework - tutorial django
Eliminar un usuario conectado de un esquema de base de datos Oracle 10g (7)
¿Existe una mejor manera de desconectar a la fuerza a todos los usuarios de un esquema de base de datos Oracle 10g que reiniciar los servicios de la base de datos Oracle?
Tenemos varios desarrolladores que usan SQL Developer conectándose al mismo esquema en un único servidor Oracle 10g. El problema es que cuando queremos soltar el esquema para reconstruirlo, inevitablemente, alguien todavía está conectado y no podemos dejar caer el esquema de la base de datos o el usuario mientras alguien todavía está conectado.
Por la misma razón, no queremos eliminar todas las conexiones a otros esquemas porque otras personas pueden estar aún conectadas y probando con esos esquemas.
Alguien sabe de una manera rápida de resolver esto?
¿Has probado ALTER SYSTEM KILL SESSION? Obtenga el SID y el NÚMERO DE SERIE de V $ SESSION para cada sesión en el esquema dado, luego haga
ALTER SCHEMA KILL SESSION sid , número de serie ;
Asegúrese de modificar el sistema y habilitar la sesión restringida antes de matarlos o volverán a iniciar sesión rápidamente en la base de datos antes de completar su trabajo.
Encuentra sesiones existentes a DB 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.
A continuación, ejecute la consulta debajo de los valores extraídos de los resultados anteriores.
ALTER SYSTEM KILL SESSION ''<put above s.sid here>,<put above s.serial# here>'';
Ej .: ALTER SYSTEM KILL SESSION ''93, 943 '';
Para encontrar las sesiones, como uso de DBA
select sid,serial# from v$session where username = ''<your_schema>''
Si desea asegurarse de obtener únicamente las sesiones que usan SQL Developer, puede agregar and program = ''SQL Developer''
. Si solo desea eliminar sesiones pertenecientes a un desarrollador específico, puede agregar una restricción en os_user
Entonces mátalos con
alter system kill session ''<sid>,<serial#>''
(por ejemplo,
alter system kill session ''39,1232''
)
Una consulta que produce sentencias de asesinato preparadas podría ser
select ''alter system kill session '''''' || sid || '','' || serial# || '''''';'' from v$session where username = ''<your_schema>''
Esto devolverá una sentencia kill por sesión para ese usuario, algo así como:
alter system kill session ''375,64855'';
alter system kill session ''346,53146'';
Solo mis dos centavos: la mejor manera (pero probablemente no la más rápida en el corto plazo) probablemente sea que cada desarrollador trabaje en su propia instancia de base de datos (ver la regla 1 para el trabajo de la base de datos ).
La instalación de Oracle en una estación de desarrollador se ha convertido en una obviedad desde Oracle Database 10g Express Edition .
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;
/
solo usa SQL:
disconnect;
conn tiger/scott as sysdba;