如何查找SQL*Plus是否在调用栈中?

问题描述 投票:0回答:1

在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的问题?

bash oracle sqlplus
1个回答
1
投票

您可以使用 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.

© www.soinside.com 2019 - 2024. All rights reserved.