多分、ロールバックされないんだけど、一応確認。
準備は、ちょっとダサイけど、こんな感じ。
grant connect,resource to g identified by g; grant select any dictionary to g; grant unlimited tablespace to g; conn g/g create table test1 (id number); insert into test1 values (1); insert into test1 select count(*) from v$parameter a,v$parameter b; ※1 select * from test1; commit;
SQL_ID は先に確認しておく。
select sql_id from v$sql where sql_text like 'insert into test1 select count%'; → 3hz88jmt9x6x0
で、※1 の insert のところで、
- 何もしない
- Ctl+C
- alter system cancel sql してみる。
- alter system kill session してみる。
ちなみに、手元の Virtual box の環境だと ※1 の SQL 実行は 5秒ぐらい。もういっこ v$parameter を直積すると、もっと時間がかかるけどその分リソースも食うので注意。
で、結果は
- 何もしない → 正常終了
想定通りの結果。。。
一応、それぞれのケースの実行結果。
Ctl+C
SQL> insert into test1 select count(*) from v$parameter a,v$parameter b; ^Cinsert into test1 select count(*) from v$parameter a,v$parameter b * ERROR at line 1: ORA-01013: user requested cancel of current operation
cancel sql
SQL> insert into test1 select count(*) from v$parameter a,v$parameter b; insert into test1 select count(*) from v$parameter a,v$parameter b * ERROR at line 1: ORA-01013: user requested cancel of current operation
kill session
SQL> insert into test1 select count(*) from v$parameter a,v$parameter b; insert into test1 select count(*) from v$parameter a,v$parameter b * ERROR at line 1: ORA-00028: your session has been killed SQL> select * from test1; select * from test1 * ERROR at line 1: ORA-01012: not logged on Process ID: 3214 Session ID: 265 Serial number: 32929
cancel sql, kill session で使用したコマンドは
alter system cancel sql '265,32929,3hz88jmt9x6x0'; alter system kill session '265,32929';