在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>
此时我们输入几下回车键。因为此时处于锁屏状态,屏幕上将不会有任何反应。
2.使用“Ctrl+Q”组合键解除屏幕锁定
在解除锁定的那一瞬间,之前的回车键效果得以体现。
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 --
【SQL*Plus】在SQL*Plus中谨慎使用Ctrl+S快捷键
分享好友
分享这个小栈给你的朋友们,一起进步吧。
订阅须知
• 所有用户可根据关注领域订阅专区或所有专区
• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询
• 专区发布评论属默认订阅所评论专区(除付费小栈外)