Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

क्या सत्र को मारे बिना ऑरैकल में एक प्रश्न को मारना संभव है?

मुझे एक तरकीब मिली। मुझे नहीं पता कि इसके साथ खेलना कितना सुरक्षित है, लेकिन यह काम करता है। एक Oracle घटना है, 10237, जिसे "सिम्युलेट ^C (परीक्षण उद्देश्यों के लिए)" के रूप में वर्णित किया गया है।

आपके पास उस सत्र का SID और SERIAL# होना चाहिए जिसे आप बाधित करना चाहते हैं।

SYS.DBMS_SYSTEM.SET_EV( sid . पर कॉल करें) , धारावाहिक# , 10237, 1, '' ) लक्ष्य सत्र में घटना को सक्रिय करने के लिए। वर्तमान में निष्पादित कोई भी कथन बाधित होना चाहिए ("ORA-01013 प्राप्त करना:उपयोगकर्ता ने वर्तमान संचालन को रद्द करने का अनुरोध किया")। जब तक ईवेंट सेट किया जाता है, सत्र द्वारा निष्पादित करने का प्रयास करने वाला कोई और कथन तुरंत उसी त्रुटि के साथ समाप्त हो जाएगा।

ईवेंट को निष्क्रिय करने के लिए, चौथे पैरामीटर को "0" पर सेट करके वही कॉल करें। सत्र फिर से बयानों को निष्पादित करने में सक्षम होगा।

ध्यान दें कि लक्ष्य सत्र को यह पता लगाना है कि घटना सेट है, जिसमें समय लग सकता है, या कभी नहीं हो सकता है, यह इस बात पर निर्भर करता है कि वह क्या कर रहा है। इसलिए आप ईवेंट को तुरंत चालू और बंद नहीं कर सकते। आपको इसे चालू करना होगा, सत्यापित करना होगा कि विचाराधीन कथन रुक गया है, फिर उसे बंद कर दें।

यहाँ कुछ नमूना कोड है। यह SQLPlus में एक अनाम ब्लॉक के रूप में चलाने के लिए है, प्रतिस्थापन चर "सिड" और "सीरियल" के साथ उचित रूप से परिभाषित किया गया है। आप इसे इसके पैरामीटर के रूप में संग्रहीत कार्यविधि में बदल सकते हैं।

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. चूंकि SQL सर्वर में पैकेज नहीं होते हैं, प्रोग्रामर इसके आसपास जाने के लिए क्या करते हैं?

  2. Oracle SQL:IN क्लॉज के अंदर 1000 से अधिक आइटम्स का उपयोग कैसे करें

  3. तारीखों के बीच के अंतर को भरने के लिए डुप्लीकेटिंग रिकॉर्ड

  4. पैकेज निष्पादित करते समय त्रुटि आ रही है

  5. Oracle का उपयोग करके INTO का चयन करें