Oracle
 sql >> база данни >  >> RDS >> Oracle

Възможно ли е да се убие една заявка в oracle, без да се убива сесията?

Намерих трик. Нямам представа колко безопасно е да се играе с това, но работи. Има събитие на Oracle, 10237, което е описано като „симулиране на ^C (за целите на тестване)“.

Трябва да имате SID и SERIAL# на сесията, която искате да прекъснете.

Обадете се на SYS.DBMS_SYSTEM.SET_EV( sid , сериен № , 10237, 1, '' ), за да активирате събитието в целевата сесия. Всеки изпълняващ се в момента оператор трябва да бъде прекъснат (получаване на "ORA-01013:потребител поиска отмяна на текущата операция"). Докато събитието е зададено, всички следващи изрази, които сесията се опитва да изпълни, незабавно ще прекратят със същата грешка.

За да деактивирате събитието, направете същото повикване с четвъртия параметър, зададен на "0". След това сесията ще може да изпълнява отново оператори.

Имайте предвид, че целевата сесия трябва да открие, че събитието е зададено, което може да отнеме време или никога да не се случи, в зависимост от това какво прави. Така че не можете просто бързо да включвате и изключвате събитието. Ще трябва да го включите, да проверите дали въпросното изявление е спряло, след което да го изключите.

Ето малко примерен код. Това е предназначено да се изпълнява като анонимен блок в SQLPlus, със заместващи променливи "sid" и "serial", дефинирани по подходящ начин. Можете да го превърнете в съхранена процедура с тези като параметри.

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. Как да използвам CREATE OR REPLACE?

  2. Разберете кой символ на валута използва вашата сесия в Oracle

  3. Възстановяване на база данни на Oracle

  4. Как да проверя NLS_LANG на клиента?

  5. SQLT в 12c не може да събира статистически данни