如何确定 SQL*Plus 是否在调用堆栈上?
How to find out if SQL*Plus is on the call stack?
在SQL*Plus中有一个HOST
command,可以在不离开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。
在SQL*Plus中有一个HOST
command,可以在不离开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。