У меня есть такой сценарий (немного более сложный на самом деле, но чтобы показать, что радует, этого достаточно).
Я запускаю его в течение нескольких недель без проблем, но если по какой-то причине таблица заблокирована, у нас в памяти будут тысячи процессов, ожидающих, пока таблица не будет разблокирована.
Это гарантирует, что все 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
Луис