Как отменить зависшие процессы sqlplus - PullRequest
0 голосов
/ 27 августа 2018

У меня есть такой сценарий (немного более сложный на самом деле, но чтобы показать, что радует, этого достаточно).

Я запускаю его в течение нескольких недель без проблем, но если по какой-то причине таблица заблокирована, у нас в памяти будут тысячи процессов, ожидающих, пока таблица не будет разблокирована.

Это гарантирует, что все PID на сервере были использованы этим сценарием, и сервер был заблокирован, никто не может подключиться.

Мне нужен способ отменить эти процессы через некоторое время (5 секунд?), Но я не знаю, возможно ли это.

Кроме того, я не администратор и не администратор, поэтому мне нужно делать это как обычный пользователь.

Есть идеи?

Спасибо!

#!/bin/ksh

while true 
do 

# one new connection each time
$ORACLE_HOME/bin/sqlplus -s << LABEL1
    Myuser/Mypassword@Mysid

DECLARE
    CURS_STRING VARCHAR2 (1536);

BEGIN
    CURS_STRING := 'INSERT INTO MyTable (MyField) values ' || chr(39) || 'A' || chr(39) || ''; 
    execute immediate CURS_STRING;

    --   Count rows updated
    i := sql%rowcount;

    if (i <> 0) then
        commit;
    else
        rollback;
    end if;

EXCEPTION 
    WHEN others THEN
    rollback;
end;
/
LABEL1
#end loop
done

Луис

...