Saat Anda terus mendapatkan halaman hasil, saya berasumsi Anda memulai sesi di SQL*Plus. Jika demikian, hal yang mudah dilakukan adalah dengan bash ctrl + istirahat berkali-kali sampai berhenti.
Cara yang lebih rumit dan lebih umum saya uraikan di bawah ini untuk meningkatkan keganasan / kejahatan. Yang pertama mungkin akan berhasil untuk Anda, tetapi jika tidak, Anda dapat terus bergerak ke bawah daftar.
Sebagian besar tidak disarankan dan dapat menimbulkan konsekuensi yang tidak diinginkan.
1. Tingkat Oracle - Matikan proses di database
Sesuai jawaban ObiWanKenobi dan dokumentasi ALTER SESSION
alter system kill session 'sid,serial#';
Untuk menemukan sid
, id sesi, dan serial#
, nomor seri, jalankan kueri berikut - dirangkum dari OracleBase - dan temukan sesi Anda:
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'
Jika Anda menjalankan RAC maka Anda perlu mengubahnya sedikit untuk memperhitungkan beberapa instance, inst_id
itulah yang mengidentifikasi mereka:
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'
Kueri ini juga akan berfungsi jika Anda tidak menjalankan RAC.
Jika Anda menggunakan alat seperti PL/SQL Developer, maka jendela sesi juga akan membantu Anda menemukannya.
Untuk "membunuh" yang sedikit lebih kuat, Anda dapat menentukan kata kunci SEGERA, yang menginstruksikan database untuk tidak menunggu transaksi selesai:
alter system kill session 'sid,serial#' immediate;
2. Tingkat OS - Terbitkan SIGTERM
kill pid
Ini mengasumsikan Anda menggunakan Linux atau varian *nix lainnya. Sebuah SIGTERM adalah sinyal penghentian dari sistem operasi ke proses tertentu yang memintanya untuk berhenti berjalan. Ia mencoba untuk membiarkan proses berakhir dengan anggun.
Kesalahan ini dapat mengakibatkan Anda menghentikan proses OS yang penting, jadi berhati-hatilah saat mengetik.
Anda dapat menemukan pid
, id proses, dengan menjalankan kueri berikut, yang juga akan memberi tahu Anda informasi berguna seperti terminal tempat proses dijalankan dan nama pengguna yang menjalankannya sehingga Anda dapat memastikan bahwa Anda memilih yang benar.
select p.*
from v$process p
left outer join v$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Sekali lagi, jika Anda menjalankan RAC, Anda perlu mengubahnya sedikit menjadi:
select p.*
from Gv$process p
left outer join Gv$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Mengubah where
klausa ke where s.status = 'KILLED'
akan membantu Anda menemukan proses yang sudah dimatikan yang masih "berjalan".
3. OS - Terbitkan SIGKILL
kill -9 pid
Menggunakan pid
yang sama Anda mengambil dalam 2, SIGKILL adalah sinyal dari sistem operasi ke proses tertentu yang menyebabkan proses tersebut segera dihentikan. Sekali lagi berhati-hatilah saat mengetik.
Ini jarang diperlukan. Jika Anda melakukan DML atau DDL, proses rollback akan dihentikan dan mungkin mempersulit pemulihan database ke kondisi yang konsisten jika terjadi kegagalan.
Semua opsi yang tersisa akan mematikan semua sesi dan mengakibatkan database Anda - dan dalam kasus server 6 dan 7 juga - menjadi tidak tersedia. Mereka hanya boleh digunakan jika benar-benar diperlukan...
4. Oracle - Matikan database
shutdown immediate
Ini sebenarnya lebih sopan daripada SIGKILL , meskipun jelas itu bertindak pada semua proses dalam database daripada proses spesifik Anda. Itu selalu baik untuk bersikap sopan ke database Anda.
Mematikan database hanya boleh dilakukan dengan persetujuan DBA Anda, jika Anda memilikinya. Sangat menyenangkan untuk memberi tahu orang-orang yang menggunakan database juga.
Itu menutup database, menghentikan semua sesi dan melakukan rollback
pada semua transaksi yang tidak terikat. Ini bisa memakan waktu cukup lama jika Anda memiliki transaksi besar tanpa komitmen yang perlu dibatalkan.
5. Oracle - Matikan database ( cara yang kurang baik )
shutdown abort
Ini kira-kira sama dengan SIGKILL , meskipun sekali lagi pada semua proses dalam database. Ini adalah sinyal ke database untuk menghentikan semuanya segera dan mati - sebuah kecelakaan keras. Ini mengakhiri semua sesi dan tidak melakukan rollback; karena ini dapat berarti bahwa database membutuhkan waktu lebih lama untuk startup
lagi. Meskipun bahasanya menghasut, shutdown abort
bukanlah kejahatan murni dan biasanya dapat digunakan dengan aman.
Seperti sebelumnya, beri tahu orang-orang yang relevan terlebih dahulu.
6. OS - Reboot server
reboot
Jelas, ini tidak hanya menghentikan database tetapi juga server, jadi gunakan dengan hati-hati dan dengan persetujuan sysadmin Anda selain DBA, pengembang, klien, dan pengguna.
7. OS - Tahap terakhir
Reboot saya tidak berfungsi... Setelah Anda mencapai tahap ini, sebaiknya Anda menggunakan VM. Kami akhirnya menghapusnya...