Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Có thể loại bỏ một truy vấn duy nhất trong oracle mà không giết phiên không?

Tôi đã tìm thấy một mẹo nhỏ. Tôi không biết điều này an toàn như thế nào để chơi với nó, nhưng nó hoạt động. Có một sự kiện Oracle, 10237, được mô tả là "mô phỏng ^ C (cho mục đích thử nghiệm)".

Bạn phải có SID và SERIAL # của phiên bạn muốn làm gián đoạn.

Gọi SYS.DBMS_SYSTEM.SET_EV ( sid , sê-ri # , 10237, 1, '') để kích hoạt sự kiện trong phiên mục tiêu. Bất kỳ câu lệnh nào đang thực thi sẽ bị gián đoạn (nhận "ORA-01013:người dùng yêu cầu hủy hoạt động hiện tại"). Miễn là sự kiện được thiết lập, bất kỳ câu lệnh nào khác mà phiên cố gắng thực hiện sẽ ngay lập tức kết thúc với cùng một lỗi.

Để hủy kích hoạt sự kiện, hãy thực hiện cuộc gọi tương tự với tham số thứ tư được đặt thành "0". Sau đó, phiên sẽ có thể thực thi lại các câu lệnh.

Lưu ý rằng phiên mục tiêu phải phát hiện ra rằng sự kiện đã được thiết lập, điều này có thể mất thời gian hoặc có thể không bao giờ xảy ra, tùy thuộc vào những gì nó đang làm. Vì vậy, bạn không thể nhanh chóng bật và tắt sự kiện. Bạn cần phải bật nó lên, xác minh rằng câu lệnh được đề cập đã dừng, sau đó tắt nó đi.

Đây là một số mã mẫu. Điều này có nghĩa là được chạy như một khối ẩn danh trong SQLPlus, với các biến thay thế "sid" và "serial" được xác định một cách thích hợp. Bạn có thể biến nó thành một thủ tục được lưu trữ với những thứ đó là tham số của nó.

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. Liên kết biến với tên bảng bằng cx_Oracle

  2. Cách khắc phục sự cố ORA-02049 và khóa các sự cố nói chung với Oracle

  3. REGEXP_COUNT () Hàm trong Oracle

  4. UNPIVOT trên một số cột không xác định

  5. Truy cập dịch vụ Web từ quy trình được lưu trữ của Oracle