【SQL*Plus】直接X掉視窗對SQL*Plus中的操作結果的影響

secooler發表於2009-10-31
我曾經針對這個問題做過大量的測試,相對來說PuTTY的行為比較穩定,在X掉視窗時會有提示“Are you sure you want to close this session?”,如果點選“OK”便會關閉視窗,PuTTY的行為是提交所有之前的操作,也有例外,如果操作完成之後網路斷掉了,再次連線後獲得的內容將是操作之前的結果,類似於Windows的cmd中的行為,不理會之前的操作。

但是在secureCRT預設情況下,如果直接X掉視窗,會提示“Do you wish to disconnect from ***”,點選“Yes”會推出操作的視窗。此時的結果有時會得到一個commit之前的操作結果,有時會得到一個rollback的結果。可以測試一下,比較的詭異。

Toad工具其中就有一個單獨對這個行為的配置,當直接關閉視窗的時候,Toad是提示你commit還是rollback之前的操作,也可以透過設定影響這個行為,如設定成每次退出時將之前操作的內容全部rollback,或設定成為commit的行為。

也許有一天,Oracle會對這個問題給出一種統一的控制方法。類似於EXITCOMMIT引數,沒準會叫做“CLOSECLIENTCOMMIT”。不過可能性不大。
關於11gR2中
EXITCOMMIT引數的介紹請參考下面文章
《【11gR2】【SQL*Plus】使用EXITCOMMIT引數控制exit時commit的行為》
http://space.itpub.net/519536/viewspace-617655


既然直接X掉視窗對SQL*Plus中的結果影響效果與客戶端有關,因此,透過直接關閉客戶端的方法退出事務操作是非常危險的。所以操作規範化很重要。
操作規範如下:
1)一定要顯式提交(commit)和回滾(rollback);
2)忘記顯式commit或rollback的時候也要正常的透過“exit”退出SQL*Plus介面,畢竟在11gR2中這個行為是穩定的;
3)嚴格禁止透過關閉視窗的方式退出SQL*Plus操作介面。

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-617821/,如需轉載,請註明出處,否則將追究法律責任。

相關文章