Saya menemukan trik. Saya tidak tahu seberapa aman ini untuk dimainkan, tetapi itu berhasil. Ada acara Oracle, 10237, yang digambarkan sebagai "simulasikan ^C (untuk tujuan pengujian)".
Anda harus memiliki SID dan SERIAL# dari sesi yang ingin Anda interupsi.
Hubungi SYS.DBMS_SYSTEM.SET_EV( samping , serial# , 10237, 1, '') untuk mengaktifkan acara di sesi target. Setiap pernyataan yang sedang dijalankan harus dihentikan (menerima "ORA-01013:pengguna meminta pembatalan operasi saat ini"). Selama acara disetel, setiap pernyataan lebih lanjut yang coba dijalankan sesi akan segera diakhiri dengan kesalahan yang sama.
Untuk menonaktifkan acara, lakukan panggilan yang sama dengan parameter keempat disetel ke "0". Sesi kemudian akan dapat mengeksekusi pernyataan lagi.
Perhatikan bahwa sesi target harus mendeteksi bahwa acara telah diatur, yang mungkin membutuhkan waktu, atau mungkin tidak pernah terjadi, tergantung pada apa yang dilakukannya. Jadi, Anda tidak bisa begitu saja mengaktifkan dan menonaktifkan acara dengan cepat. Anda harus mengaktifkannya, memverifikasi bahwa pernyataan yang dimaksud telah berhenti, lalu mematikannya.
Berikut beberapa contoh kode. Ini dimaksudkan untuk dijalankan sebagai blok anonim di SQLPlus, dengan variabel substitusi "sid" dan "serial" didefinisikan dengan tepat. Anda dapat mengubahnya menjadi prosedur tersimpan dengan parameter tersebut sebagai parameternya.
DECLARE
l_status v$session.status%TYPE;
BEGIN
dbms_system.set_ev( &sid, &serial, 10237, 1, '');
LOOP
SELECT status INTO l_status FROM v$session
WHERE sid = &sid and serial# = &serial;
EXIT WHEN l_status='INACTIVE';
END LOOP;
dbms_system.set_ev( &sid, &serial, 10237, 0, '');
END;