Gblog

おもにTips

ALTER SYSTEM CANCEL SQL でトランザクションはどうなるのか?

多分、ロールバックされないんだけど、一応確認。

 

準備は、ちょっとダサイけど、こんな感じ。

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';