準備、準備。
grant connect,resource to g identified by g; grant select any dictionary to g; conn g/g
とりあえず、spidとかメモ
col spid for a10 select spid, s.sid, s.serial# from v$session s , v$process p where p.addr=s.paddr and s.username='G';
で、SQL実行
select count(*) from v$parameter a, v$parameter b,v$parameter c;
リソース喰うので注意。
別ターミナルで SQL_ID 確認
select sql_id from v$sql where sql_text like 'select count(*) from v$p%';
まずは、cancel sql
alter system cancel sql '237, 54442, 0asad88p5kv1p';
これで SQL をキャンセルできる。
cancel されたセッションには以下のようなエラー。
でもセッションは切れてない。
SQL> select count(*) from v$parameter a, v$parameter b,v$parameter c; select count(*) from v$parameter a, v$parameter b,v$parameter c * ERROR at line 1: ORA-01013: user requested cancel of current operation SQL> SQL> select * from dual; DUM --- X
セッション kill するとkillされたセッションにエラーはでないけど、SQL実行すると ORA-28
SQL> r 1* select * from dual select * from dual * ERROR at line 1: ORA-00028: your session has been killed SQL>
まあ、エラーがでるかどうかはプロセスの除隊次第だけど。
cancel sql だとセッションは切れないので、クライアント側のエラーハンドリング次第では、継続して処理が実行できる、ということになる。たぶん。
ちょっと微妙。