取消SQL執行,卻半天不響應是何故

有人問,執行一個大量插入的SQL,類似這種,執行了一陣子,想要取消,很久都沒響應,是怎麼回事?
很多人看到很久沒響應,慌了,怕執行成功導致錯誤數據插入,乾脆重啓數據庫。
begin
for i in 1..100 loop
insert into a select * from all_objects;
--commit;
end loop;
end;

其實,從取消SQL執行到最終確認取消成功(返回ORA-01013: user requested cancel of current operation),
這中間的時間都是數據庫在rollback的過程,可以通過select used_urec,used_ublk from v$transaction進行監控。
在按下ctrl+c或者中斷按鍵之後,used_urec,used_ublk都處在一個減少的狀態,最終減少到0的時候,
SQL執行界面會顯示取消執行成功。
SQL> SQL> select count(*) from a;

  COUNT(*)
----------
         0

SQL>
並且一條記錄都沒有插入,不必緊張。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章