A medida que sigue obteniendo páginas de resultados, asumo que inició la sesión en SQL*Plus. Si es así, lo más fácil es presionar ctrl + descanso muchas, muchas veces hasta que se detiene.
Las formas más complicadas y genéricas las detallo a continuación en orden creciente de ferocidad / maldad. El primero probablemente funcione para usted, pero si no es así, puede seguir bajando en la lista.
La mayoría de estos no se recomiendan y pueden tener consecuencias no deseadas.
1. Nivel de oráculo - Matar el proceso en la base de datos
Según la respuesta de ObiWanKenobi y la documentación ALTER SESSION
alter system kill session 'sid,serial#';
Para encontrar el sid
, id de sesión y el serial#
, número de serie, ejecute la siguiente consulta, resumida de OracleBase, y encuentre su sesión:
select s.sid, s.serial#, p.spid, s.username, s.schemaname
, s.program, s.terminal, s.osuser
from v$session s
join v$process p
on s.paddr = p.addr
where s.type != 'BACKGROUND'
Si está ejecutando un RAC, debe cambiar esto ligeramente para tener en cuenta las múltiples instancias, inst_id
es lo que los identifica:
select s.inst_id, s.sid, s.serial#, p.spid, s.username
, s.schemaname, s.program, s.terminal, s.osuser
from Gv$session s
join Gv$process p
on s.paddr = p.addr
and s.inst_id = p.inst_id
where s.type != 'BACKGROUND'
Esta consulta también funcionaría si no está ejecutando un RAC.
Si está utilizando una herramienta como PL/SQL Developer, la ventana de sesiones también lo ayudará a encontrarla.
Para una "eliminación" un poco más fuerte, puede especificar la palabra clave INMEDIATO, que indica a la base de datos que no espere a que se complete la transacción:
alter system kill session 'sid,serial#' immediate;
2. Nivel de sistema operativo - Emitir un SIGTERM
kill pid
Esto supone que está utilizando Linux u otra variante *nix. Un SIGTERM es una señal de finalización del sistema operativo al proceso específico que le pide que deje de ejecutarse. Intenta permitir que el proceso finalice correctamente.
Hacer esto mal podría resultar en la finalización de procesos esenciales del sistema operativo, así que tenga cuidado al escribir.
Puede encontrar el pid
, identificación del proceso, ejecutando la siguiente consulta, que también le brindará información útil como el terminal desde el que se ejecuta el proceso y el nombre de usuario que lo ejecuta para que pueda asegurarse de elegir el correcto.
select p.*
from v$process p
left outer join v$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Una vez más, si está ejecutando un RAC, debe cambiar esto ligeramente a:
select p.*
from Gv$process p
left outer join Gv$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Cambiando el where
cláusula a where s.status = 'KILLED'
lo ayudará a encontrar procesos ya eliminados que todavía están "en ejecución".
3. SO - Emitir un SIGKILL
kill -9 pid
Usando el mismo pid
recogiste en 2, un SIGKILL es una señal del sistema operativo a un proceso específico que hace que el proceso finalice inmediatamente. Una vez más tenga cuidado al escribir.
Esto rara vez debería ser necesario. Si estaba usando DML o DDL, detendrá el procesamiento de cualquier reversión y puede dificultar la recuperación de la base de datos a un estado consistente en caso de falla.
Todas las opciones restantes eliminarán todas las sesiones y darán como resultado que su base de datos, y en el caso de los servidores 6 y 7 también, deje de estar disponible. Solo deben usarse si es absolutamente necesario...
4. Oráculo - Cerrar la base de datos
shutdown immediate
En realidad, esto es más educado que un SIGKILL , aunque obviamente actúa sobre todos los procesos en la base de datos en lugar de su proceso específico. Es siempre Es bueno ser cortés con tu base de datos.
El cierre de la base de datos solo debe realizarse con el consentimiento de su DBA, si tiene uno. Es bueno decirles a las personas que usan la base de datos también.
Cierra la base de datos, finaliza todas las sesiones y hace un rollback
en todas las transacciones no comprometidas. Puede llevar un tiempo si tiene grandes transacciones no confirmadas que deben revertirse.
5. Oráculo - Cierra la base de datos (la forma menos agradable)
shutdown abort
Esto es aproximadamente lo mismo que un SIGKILL , aunque una vez más en todos los procesos de la base de datos. Es una señal a la base de datos para que detenga todo de inmediato y muera:un choque fuerte. Finaliza todas las sesiones y no retrocede; debido a esto, puede significar que la base de datos tarda más en startup
otra vez. A pesar del lenguaje incendiario, un shutdown abort
no es pura maldad y normalmente se puede usar de manera segura.
Como antes, informe primero a las personas relevantes.
6. SO - Reiniciar el servidor
reboot
Obviamente, esto no solo detiene la base de datos sino también el servidor, así que utilícelo con precaución y con el consentimiento de sus administradores de sistemas además de los DBA, desarrolladores, clientes y usuarios.
7. SO - La última etapa
El reinicio no funcionó... Una vez que haya llegado a esta etapa, es mejor que esté usando una máquina virtual. Terminamos borrándolo...