如何确定 SQL*Plus 是否在调用堆栈上?

How to find out if SQL*Plus is on the call stack?

在SQL*Plus中有一个HOSTcommand,可以在不离开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,我会回到 shell:

SQL> HOST
myunixuser ~$

如果我在命令行输入 exit,我会回到 SQL*Plus,这并不奇怪。

我分不清原来的命令行和SQL*Plus打开的shell。 是否有可能找出 SQL*Plus 是否在调用堆栈上,并且可能有一个打开的数据库事务?

很可能,这是一个关于 Unix 的问题,而不是关于 SQL*Plus?

您可以使用 ps 显示当前会话进程及其父进程 ID。

例如:

$ 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。