【SQL*Plus】在SQL*Plus中謹慎使用Ctrl+S快捷鍵

secooler發表於2011-01-10
在UNIX/Linux平臺中的SQL*Plus命令列提示符下如果誤使用了“Ctrl+S”組合鍵將會Suspends the screen display(鎖定螢幕顯示),隨後的操作都暫時不會在螢幕上顯示,就像螢幕被凍結了一樣。這個現象是由於SQL*Plus繼承了UNIX/Linux命令列下特殊組合鍵的操作行為,因此該現象在UNIX/Linux命令列提示符下同樣存在。

這個組合鍵很容易誤鍵入,因為Ctrl+S是各種文字編輯器中最常用的“儲存”快捷鍵,對正在編輯的文件有隨時使用快捷鍵儲存習慣的朋友需要尤為注意。

既然知道了這個問題現象,那麼如何解除這種螢幕鎖定呢?不清楚的朋友可以參考UNIX/Linux操作手冊。答案是:使用Ctrl+Q組合鍵可以解除這種螢幕鎖定。

對該現象進行一下模擬,同時簡單探索一番。

1.使用“Ctrl+S”組合鍵完成對螢幕的鎖定
sys@ora10g>

此時我們輸入幾下Enter鍵。因為此時處於鎖屏狀態,螢幕上將不會有任何反應。

2.使用“Ctrl+Q”組合鍵解除螢幕鎖定
在解除鎖定的那一瞬間,之前的Enter鍵效果得以體現。
sys@ora10g> sys@ora10g> sys@ora10g> sys@ora10g> sys@ora10g> sys@ora10g> sys@ora10g> sys@ora10g>

3.在鎖屏階段嘗試SQL語句的輸入
使用Ctrl+S鎖屏,然後在鎖屏的過程中盲打“select * from v$version;”並回車。當使用Ctrl+Q鍵解除螢幕鎖定之後,SQL語句返回了SQL查詢結果。注意,此時螢幕上並沒有顯示我們盲打的SQL語句內容,只有與之對應的返回結果。
sys@ora10g>
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

4.進一步思考和驗證嘗試
既然在鎖屏階段同樣接收鍵盤輸入,如果是一個DML型別(甚至於DDL型別)的SQL操作,鎖屏階段鍵入的資訊是否會對資料產生影響呢?答案是:不會,只有在解除螢幕鎖定之後命令才會被真正的執行,也就是說鎖屏階段鍵入的資訊被暫時地快取了起來。

驗證這個結論。

1)在SQL*Plus的Ctrl+S鎖屏階段盲打如下內容,注意不要敲錯。
insert into t values (1);
commit;

2)在另外開啟的會話中檢視t表資料
sec@ora10g> select * from t;

no rows selected

可見,鎖屏階段鍵入的SQL並沒有生效。

2)使用Ctrl+Q解除鎖屏
sec@ora10g>
1 row created.

sec@ora10g>
Commit complete.

在解除鎖屏的一剎那,可以看到盲打的兩條SQL語句有依次執行成功的提示。

3)最後的確認
再次檢視第二個會話中t表的資料。
sec@ora10g> select * from t;

         X
----------
         1

結論顯然,在鎖屏鎖定解除之後SQL語句才真正有效的被執行。
有興趣的朋友可以再進一步做一個嘗試:在鎖屏階段盲打的內容如果在被Ctrl+Q解除鎖定之前就被人為的關掉操作視窗退出,盲打的內容將被取消,不會生效。這是顯然的。

5.小結
本文給出了一個在UNIX/Linux環境下使用SQL*Plus時常見的一個問題現象及解決方法。由此又引申出了幾個比較有趣的嘗試。有興趣的朋友可以繼續探索一下。

Good luck.

secooler
11.01.10

-- The End --

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

相關文章