ITPub博客

首页 > 数据库 > Oracle > [20260602]sqlplus使用host注意.txt

[20260602]sqlplus使用host注意.txt

原创 Oracle 作者:lfree 时间:2026-06-04 20:42:01 0 删除 编辑

[20260602]sqlplus使用host注意.txt

--//发现一个小问题,host执行操作系统命令重定向时覆盖生成文件。

SCOTT@book01p> help host

 HOST
 ----

 Executes an operating system command without leaving SQL*Plus.
 Enter HOST without command to display an operating system prompt.
 You can then enter multiple operating system commands.

 HO[ST] [command]

--//一般生产系统环境,设置set -o noclobber,这样可以不小心重定向时覆盖已经存在的文件。

$ touch /tmp/linesize.sql
$ echo set linesize $(stty size | cut -d" " -f2) > /tmp/linesize.sql
-bash: /tmp/linesize.sql: cannot overwrite existing file

--//这样可以一定程度避免生产系统环境的误操作导致的文件覆盖,临时要解决这个问题使用>| 代替 >.

$ echo set linesize $(stty size | cut -d" " -f2) >| /tmp/linesize.sql

--//而sqlplus下执行host不受这个限制。

SCOTT@book01p> host ls -l /tmp/linesize.sql
-rw-r--r--. 1 oracle oinstall 17 Jun  2 17:33 /tmp/linesize.sql

SCOTT@book01p> host echo set linesize $(stty size | cut -d" " -f2) > /tmp/linesize.sql

--//如果跟踪相应进程,注意不是oracle进程,而是执行sqlplus的进程,可以发现执行是:
SCOTT@book01p> @ spid
==============================
SID                           : 223
SERIAL#                       : 3729
PROCESS                       : 7446
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SERVER                        : DEDICATED
SPID                          : 7448
PID                           : 42
P_SERIAL#                     : 24
KILL_COMMAND                  : alter system kill session '223,3729' immediate;

PL/SQL procedure successfully completed.

$ strace -f -p 7446
....
[pid  7695] execve("/bin/bash", ["/bin/bash", "-c", "echo set linesize $(stty size | "...], [/* 63 vars */]) = 0
[pid  7695] brk(0)                      = 0x23d5000

--//相当于打开一个新的bash shell,执行命令如下:
$ bash -c "echo set linesize $(stty size | cut -d" " -f2) > /tmp/linesize.sql"
--//不会报错。

--//改写如下就会报错。
$ bash -c "set -o noclobber;echo set linesize $(stty size | cut -d" " -f2) > /tmp/linesize.sql"
bash: /tmp/linesize.sql: cannot overwrite existing file

--//记录下来,仅仅提醒自己host的执行方式。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3173112/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969198