Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Apakah mungkin untuk membunuh satu kueri di Oracle tanpa mematikan sesi?

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuang bidang CLOB ke dalam file?

  2. Perusahaan Perangkat Lunak yang mengerjakan Oracle D2k, Teknologi PLSQL di Noida

  3. Cara Menulis ke File CSV Menggunakan Oracle SQL*Plus

  4. Bagaimana menggambarkan masalah kinerja dalam database relasional?

  5. Bagaimana Mendapatkan Tanggal Saat Ini di PL/SQL?