【问题标题】:How to find out if SQL*Plus is on the call stack?如何确定 SQL*Plus 是否在调用堆栈上?
【发布时间】:2020-05-25 04:43:00
【问题描述】:

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

【问题讨论】:

    标签: bash oracle sqlplus


    【解决方案1】:

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

    【讨论】:

    • 澄清选项:-j 是“显示 PPID 和 PGID”,不是吗? -t 是“仅显示连接到终端的进程”? man ps页面太恐怖了,mac版ps和linux版略有不同...
    • 在 CentOS 7 上,-j 是“作业格式”,t 是“选择与此终端关联的所有进程。”。
    • 好的,谢谢。这显然转化为 macOSX 上的-jT
    猜你喜欢
    • 2018-05-16
    • 2021-08-06
    • 2012-04-18
    • 2011-01-04
    • 2021-06-28
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多