在SQL*Plus中,有一个 HOST
指挥在不离开SQL*Plus的情况下执行操作系统命令或显示操作系统提示。
因此,如果我从Unix命令行连接到SQL*Plus
myunixuser ~$ sqlplus user/password@mydb
SQL*Plus: Release 19.0.0.0.0 - Production on Sun May 24 21:01:56 2020
SQL>
现在,如果我输入 HOST
我又回到了壳里。
SQL> HOST
myunixuser ~$
如果我输入 exit
在命令行上,我又回到了SQL*Plus,这并不奇怪。
我无法区分原来的命令行和SQL*Plus打开的shell。是否可以找出SQL*Plus是否在调用堆栈上,有可能是一个开放的数据库事务?
很有可能,这与其说是关于SQL*Plus的问题,不如说是关于Unix的问题?
您可以使用 ps
显示当前会话进程与父进程id。
例如,这里bash进程4411是4343的子进程,而4343是sqlplus。
$ ps -jt
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
2510 2511 2511 2511 pts/1 4890 Ss 1000 0:00 -bash
2511 4343 4343 2511 pts/1 4890 Sl 1000 0:00 sqlplus
4343 4411 4411 2511 pts/1 4890 S 1000 0:00 /bin/bash
4411 4890 4890 2511 pts/1 4890 R+ 1000 0:00 ps -jt
$
这里bash进程4411是4343的子进程,即sqlplus.